Hallo,
die Syntaxprüfung dürfte von der Datenbank kommen.
Kann mir nicht vorstellen, dass die
ADO-Connection für quasi jeden beliebigen Datenbanktyp vorab eine Syntaxprüfung durchführen kann.
Zumindest die Fehlermeldung
Syntaxfehler in der Nähe von ist absolut typisch für den
SQL-Server, die anderen, von mir bis dato genutzten Datenbanken, geben etwas präzisere Fehlermeldungen aus.
Dir bleibt hier (vermutlich) nichts anderes übrig, als Dir die Dateiinhalte zu nehmen und statementweise zu testen, d. h.:
zuerst das erste Statement, dann das erste und das zweite, dann das erste, das zweite und das dritte, bis Du das Script auf diese Weise wieder vollständig zusammengebaut hast, bzw. auf den ersten Fehler stößt.
Manchmal hilft zur Fehlerkorrektur ein zusätzliches Semikolon oder auch mal eins weglassen, eine zusätzliche Leerzeile zwischen einzelnen Statements...
Auch die Menge der Hochkommata sollte überprüft werden, zumindest, wenn sie irgendwo verschachtelt vorkommen.
Der Hinweis von Bommel ist nicht zu vernachlässigen: Kannst Du mit
sql = widestring beliebig große Zeichenfolgen "übermitteln" oder gibt es da eine Grenze.
Lies zum Test Deine Dateien in
sql ein und schreibe
sql in eine neue Datei. Alte und neue Datei müssen identisch sein, wenn nicht, geht da was verloren und Du hast den "Übeltäter".
Unvollständige Statements passen sehr gut zu Deiner Fehlermeldung.
Kannst Du mit
Execute(sql,i,[eoExecuteNoRecords]);
beliebiggroße Statements übergeben oder hat diese Methode eventuell bezüglich der Größe der Zeichenfolge eine Begrenzung?
Auch Dein Hinweis
Zitat:
Ich habe eher den Verdacht, dass
ADO nicht mit mehreren Befehlen innerhalb einer Transaction klarkommt
geht in die richtige Richtung, hierbei gilt die Einschränkung aber nicht in Bezug auf Transaktion sondern auf mehrere Befehle.
Es gibt Datenbanken, denen kann man per
Query und ExecSQL mehrere Befehle "in einem Rutsch" übergeben, also
Query.SQL enthält hier mehrere Befehle. Dies funktioniert allerdings nicht bei allen Datenbanken.
Für Deine eigentlich überschaubare Aufgabenstellung hast Du hier leider deutlich zuviele "Stolpersteine". Hoffe, Du findest mit unseren Hinweisen eine einfache Lösung.