Einzelnen Beitrag anzeigen

tkoenig

Registriert seit: 16. Mär 2010
Ort: Dresden
19 Beiträge
 
Delphi XE7 Professional
 
#1

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

  Alt 16. Mär 2010, 17:10
Datenbank: SQL Server • Version: 2005/2008 • Zugriff über: ADO
Mahlzeit zusammen.

Ich habe ein Problem und bin langsam am verzweifeln, seit einer Woche durchforste ich jetzt schon das Internet, habe aber bisher keine zufriedenstellende Antwort zu meinem Problem gefunden.

Mein Problem ist folgendes:
Ich muss für ein Projekt (unter anderem) .sql-Dateien in mein Programm einlesen und diese an den SQL-Server übermitteln, der diese dann verarbeitet (Stichwort Query Analyzer). Die Scripts selbst können mehrere hundert Zeilen lang sein und sollten theoretisch keine Ergebnismenge zurückliefern.
Es soll ein Copy-Paste-Programm werden, deshalb benutze ich ADO um keine zusätzlichen Treiber oder Software wie die BDE etc. auf den Zielrechnern installieren zu müssen.

Ich verwende jetzt also eine TADOConnection-Komponente, Verbindung zum Server läuft super, einfache Scripts lassen sich auch ohne Fehler übertragen, allerdings kommt es bei größeren Transaktionen regelmäßig zu einer Exception á la "Syntaxfehler in der Nähe von "GO" / "Select" etc.". Scheinbar prüft also die ADOConnection die Syntax der Abfrage und blockiert diese unter Umständen. Ich weiß allerdings 100%ig, dass die SQL-Scripts korrekt sind, sie werden von Query Analyzer ohne Mucken verarbeitet.
Daher nun meine Frage: Kann ich der ADOConnection irgendwie mitteilen, dass ihr der Syntax meines Scripts egal zu sein hat?

Bis jetzt sieht der Code folgendermaßen aus:
Delphi-Quellcode:
function executeSQL(filename : string; ADO: TADOConnection) : boolean;
var i : integer;
    sql : widestring;
    success : boolean;
begin
  success := false;
  sql := CreateSQLSequence(filename);
  with ADO do
  begin
    if not Connected then Open;
    try
      BeginTrans;
      Execute(sql,i,[eoExecuteNoRecords]);
      success := true;
    except
      on e: Exception do
        success := false;
    end; // try .. except
    if success then
      CommitTrans
    else
    begin
      RollbackTrans;
      showmessage('Bei der Verarbeitung ist ein Fehler aufgetreten');
    end; // if .. else
    Close;
  end; // with ADO do
end; // executeSQL
Vielen Dank schonmal im Voraus für eure Hilfe.

Greetings, tkoenig
  Mit Zitat antworten Zitat