OleVariantで立ち上げた Accessのちらつき解消

解決


笹団子  2012-05-29 05:44:00  No: 42356  IP: [192.*.*.*]

AccessをADO接続して利用しています。
長く使っているうちに、DBサイズが肥大してきますので、最適化を組み込みました。
最適化処理そのものはうまくいっているのですが、Quit処理で一瞬Accessが表示されてすぐ閉じるため、画面がちらついたように見えます。回避する方法がありましたら教えてください。


procedure TForm1.ActionCompactExecute(Sender: TObject);
var
  AccessVariant : OleVariant;
  DBName, tmpDBName, Ext : string;
begin
  Screen.Cursor := crSQLWait;
  AccessVariant := CreateOleObject('Access.Application');
  DBName :=  'Testdb.mdb';
  // get new name
  Ext := ExtractFileExt(DBName);
  tmpDBName := ChangeFileExt(DBName, '');
  tmpDBName := tmpDBName + ' ' + FormatDateTime('MMDDYY',Date) + Ext;
  try
    // call compact function
    AccessVariant.DBEngine.CompactDatabase(DBName, tmpDBName);
    //original 仮セーブ
    RenameFile(DBName, '_tempBackUp.mdb');
    // copy newly compacted db
    CopyFile(PChar(tmpDBName), PChar(DBName), false);
    // delete temp file db
    DeleteFile(PChar(tmpDBName));
    // delete original db
    DeleteFile('_tempBackUp.mdb');
    if Active then MessageDlg('最適化を完了しました.', mtInformation, [mbOK], 0);
  except
    MessageDlg('最適化に失敗しました!' + #13#10 +
               '他のパソコンで使用中と考えられます', mtWarning, [mbOK], 0);
  end;
  AccessVariant.Quit;  //ここで一瞬Accessが立ち上がって閉じるためにちらつきが出る
  Screen.Cursor := crDefault;
end;

編集    削除
takana  2012-05-29 06:23:19  No: 42357  IP: [192.*.*.*]

最後の3行を以下にしてみれば?

CloseWindow(AccessVariant.hWndAccessApp); //Accessをアイコン化する
AccessVariant.Quit;  //ここで一瞬Accessが立ち上がって閉じるためにちらつきが出る
Screen.Cursor := crDefault;

編集    削除
笹団子  2012-05-29 14:26:51  No: 42358  IP: [192.*.*.*]

うまくいきました  )^o^(
takanaさんありがとうございました。

編集    削除