Guten Tag Delphianer,
ich habe die verschiedenen Themen zu einem Datenbankupdate die hier im Forum stehen
gelesen. Es ist aber alles nicht das was ich suche.
Folgende Situation:
Ich möchte einige Tabellen in einer Interbase-Datenbank zur Laufzeit updaten,
oder auch Felder zu Tabellen hinzufügen.
Vorher prüfe ich ob eine Update nötig ist. Das ist alles klar.
Um was es mir geht ist folgendes:
Wenn ich ein Update ausführen möchte, muss ich ja die Datenbank öffnen.
Wenn die
DB geschlossen ist, kann ich nicht auf die Transaction zugreifen usw.
Beim User sind aber die Änderungen in der
DB noch nicht bekannt.
Ein öffnen führt also zu einer Fehlermeldung (siehe Anhang, das Feld soll
erst hinzugefügt werden).
Das Update wird von einem
SQL-Scipt Ausgeführt.
Um die Änderung in die Datenbank zu übernehmen wird eine Transaction geöffnet
und hinterher mit Commit geschlossen.
Hier ein klein wenig Code:
Delphi-Quellcode:
procedure TOLogenUpdate2420.NeueTabelleMatrikelNr;
begin
try
dtmdMain.DoStartTransaction;
FMSQL.Close;
FMSQL.SQL.Clear;
FMSQL.SQL.Add('create table matrikelnummern (');
FMSQL.SQL.Add('matrikelnr integer not null ) ');
FMSQL.Prepare;
FMSQL.ExecQuery;
FMSQL.Close;
FMSQL.SQL.Clear;
FMSQL.SQL.Add('alter table matrikelnummern add primary key (matrikelnr)');
FMSQL.Prepare;
FMSQL.ExecQuery;
finally
dtmdMain.ibtrnsctnLoge.Commit;
end;
end;
Dazu die Transaction aus der Datenbank:
Delphi-Quellcode:
procedure TdtmdMain.DoStartTransaction;
begin
if not ibtrnsctnLoge.InTransaction then ibtrnsctnLoge.StartTransaction;
end;
Wie kann die Fehlermeldung umgangen werden????
Ich möchte nicht jedesmal die gesamte
DB-Struktur und die enthaltenen Daten exportieren.
Das ist keine Option, in manchen Tabellen stehen tausende von Datensätze.
Welchen Weg gibt es noch um ein Update durchzuführen?
Die Fehlermeldung ist im Anhang beigefügt.
Wenn Vorschläge, dann bitte mit Beispiel.
Mit Gruß HPB