Hallo,
z.Z. versuche ich die (FireBird) Datenbank-Tabellen, Trigger und CO. automatisch per MetaScript zu erstellen. Dazu verwende ich von Zeos den TZSqlProcessor.
Delphi-Quellcode:
function RunScript(AOwner : TComponent; Connection : TZConnection; Script : TStringList):
String;
var
SqlProcessor : TZSqlProcessor;
begin
Result := '
';
SqlProcessor := TZSqlProcessor.Create(aOwner);
try
SqlProcessor.Connection := Connection;
SqlProcessor.DelimiterType := dtSetTerm;
SqlProcessor.Script.Assign(Script);
try
SqlProcessor.Execute;
except
on E:
Exception do Result := E.
Message;
end;
finally
SqlProcessor.Free;
end;
end;
Jetzt werden immer nur drei
SQL Anweisungsblöcke abgearbeitet, beim 4. Anweisungsblock bricht TZSqlProcessor ab mit
Code:
SQL Error: Dynamic
SQL Error
SQL error code = -901 invalid transaction
handle (expecting explicit transaction start). Error Code: -901. Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements The
SQL: <Code der 4.
SQL-Anweisung>
Die jeweilige
SQL-Anweisung scheint irrelevant, da Umsortieren immer die
Exception beim 4. Block auslöst (lege mein Test-Script trotzdem mal in die Anlage). TZSqlProcessor.Parse und anschließende Abfrage von Count gibt die korrekte Anzahl der Anweisungs-Blöcke wieder.
Ich bin mit dem Fehler etwas überfordert... scheinbar wird das Transaktions-
Handle nach dem 3. Block geschlossen und führt dann beim 4. zum Fehler?
Die Tabellen lassen sich problemlos "einzeln" anlegen, also wenn ich für jede Tabelle und für jeden Trigger einen einzelnen Aufruf starte. Aber das kann ja nicht die Lösung sein...