Ich teste gerade ein paar Sachen mit IBX (soll keine Dauerlösung sein, also auf AnyDAC müsst Ihr nicht verweisen).
Wenn ich eine Datenbank erzeuge oder öffne funktioniert alles.
Will ich eine neue Datei erzeugen, wird die alte nicht gelöscht.
DeleteFile wird also nicht ausgeführt, da noch eine Verbindung vom Programm offen ist.
Weiß jemand Hilfe...?
Delphi-Quellcode:
procedure TDataModuleMyFriends.CloseDataBase;
begin
if IBTransactionMyFriends.InTransaction then
IBTransactionMyFriends.Commit;
IBDatabaseMyFriends.Connected := False;
IBDatabaseMyFriends.DatabaseName := '';
end;
procedure TDataModuleMyFriends.CreateDataBase;
var
DT: TDateTime;
begin
CloseDataBase;
DeleteFile(FileName);
DT := Now;
while (ExistDataBase) and (DT + (15 * OneSecond) > Now) do // nicht erfolgreich !!!
Sleep(500);
IBDatabaseMyFriends.DatabaseName := FileName;
IBScriptMyFriends.ExecuteScript;
end;
procedure TDataModuleMyFriends.DataModuleCreate(Sender: TObject);
begin
FileName := ExtractFilePath(ParamStr(0)) + 'MyFriends.fdb';
IBScriptMyFriends.Script.Text := StringReplace(IBScriptMyFriends.Script.Text, '[FILENAME]', FileName, [rfReplaceAll]);
TssGuiManager.ObjectClassList.AddObject('TFriend', IBQueryFriends);
TssGuiManager.RefreshAllData();
end;
procedure TDataModuleMyFriends.DataModuleDestroy(Sender: TObject);
begin
CloseDataBase;
end;
function TDataModuleMyFriends.ExistDataBase: Boolean;
begin
Result := FileExists(FileName);
end;
procedure TDataModuleMyFriends.OpenDataBase;
begin
CloseDataBase;
if not ExistDataBase then
CreateDataBase;
IBDatabaseMyFriends.DatabaseName := FileName;
IBDatabaseMyFriends.LoginPrompt := False;
IBDatabaseMyFriends.Params.Clear;
IBDatabaseMyFriends.Params.Add('user_name=SYSDBA');
IBDatabaseMyFriends.Params.Add('password=masterkey');
IBDatabaseMyFriends.Open;
IBTransactionMyFriends.StartTransaction;
IBQueryFriends.Open;
IBQueryFriends.FetchAll;
end;