Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#6

Re: [ADO und MS SQL-Server 2005/2008] Ausführen von Scripts

  Alt 17. Mär 2010, 08:42
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.
  Mit Zitat antworten Zitat