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;
最後の3行を以下にしてみれば?
CloseWindow(AccessVariant.hWndAccessApp); //Accessをアイコン化する
AccessVariant.Quit; //ここで一瞬Accessが立ち上がって閉じるためにちらつきが出る
Screen.Cursor := crDefault;
うまくいきました )^o^(
takanaさんありがとうございました。
ツイート | ![]() |