Befehle an den Server senden

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Verbindungen zu Datenbanken einrichten - Index


Alle Datenbankverbindungskomponenten außer TIBDatabase ermöglichen Ihnen, SQL-Anweisungen für den zugeordneten Server auszuführen, indem Sie die Methode Execute aufrufen. Obwohl Execute einen Cursor zurückgeben kann, wenn es sich bei der Anweisung um eine SELECT-Anweisung handelt, ist diese Nutzung nicht zu empfehlen. Die bevorzugte Methode für die Ausführung von Anweisungen, die Daten zurückgeben, ist es, eine Datenmenge zu verwenden.

Die Methode Execute ist sehr praktisch für die Ausführung einfacher SQL-Anweisungen, die keine Datensätze zurückgeben. Solche Anweisungen sind unter anderem auch DDL-Anweisungen (Data Definition Language), die mit den Metadaten bestimmter Datenbanken arbeiten, wie beispielsweise CREATE INDEX, ALTER TABLE oder DROP DOMAIN. Einige DML-SQL-Anweisungen (Data Manipulation Language) geben ebenfalls keine Ergebnismenge zurück. DML-Anweisungen, die Aktionen mit Daten ausführen, aber keine Ergebnismengen liefern, gehören: INSERT, DELETE und UPDATE.

Die Syntax für die Methode Execute variiert für die verschiedenen Verbindungstypen:

  • Für TDatabase nimmt Execute vier Parameter entgegen: einen String, der eine einzelne SQL-Anweisung angibt, die Sie ausführen wollen, ein Data.DB.TParams-Objekt, das alle Parameterwerte für diese Anweisung bereitstellt, einen Booleschen Wert, der angibt, ob die Anweisung im Cache zwischengespeichert werden soll, von wo Sie sie gegebenenfalls wiederholt aufrufen können, sowie einen Zeiger auf einen BDE-Cursor, der zurückgegeben werden kann (es ist zu empfehlen, nil zu übergeben).
  • Für TADOConnection gibt es zwei Versionen von Execute.Die Erste nimmt einen WideString entgegen, der die SQL-Anweisung enthält, sowie einen zweiten Parameter, der mehrere Optionen angibt, die steuern, ob die Anweisung asynchron ausgeführt werden soll und ob sie Datensätze zurückgibt. Diese erste Syntax gibt eine Schnittstelle für die zurückgegebenen Datensätze zurück. Die zweite Syntax nimmt einen WideString entgegen, der die SQL-Anweisung enthält, einen zweiten Parameter, der die Anzahl der von der Ausführung der Anweisung betroffenen Datensätze zurückgibt, sowie einen Dritten, der die Optionen angibt, beispielsweise ob die Anweisung asynchron ausgeführt werden soll. Beachten Sie, dass keine Syntax die Übergabe von Parametern vorsieht.
  • Für TSQLConnection nimmt Execute drei Parameter entgegen: einen String, der eine einzelne SQL-Anweisung enthält, die ausgeführt werden soll, ein Data.DB.TParams-Objekt, das alle Parameterwerte für diese Anweisung bereitstellt, sowie einen Zeiger, der ein TCustomSQLDataSet entgegennehmen kann, das erzeugt wird, um Datensätze zurückzugeben.

Hinweis: Execute kann jeweils nur eine SQL-Anweisung gleichzeitig ausführen. Es ist nicht möglich, innerhalb eines einzigen Aufrufs von Execute mehrere SQL-Anweisungen auszuführen, so wie es mit Dienstprogrammen für das SQL-Skripting möglich ist. Um mehrere Anweisungen gleichzeitig auszuführen, rufen Sie Execute wiederholt auf.

Es ist relativ einfach, eine Anweisung auszuführen, die keine Parameter beinhaltet. Beispielsweise führt der folgende Code die (DLL-) Anweisung CREATE TABLE ohne Parameter für eine TSQLConnection-Komponente aus:

 procedure TForm1.CreateTableButtonClick(Sender: TObject);
 var
   SQLstmt: String;
 begin
   SQLConnection1.Connected := True;
   SQLstmt := 'CREATE TABLE NewCusts ' +
     '( ' +
     '  CustNo INTEGER, ' +
     '  Company CHAR(40), ' +
     '  State CHAR(2), ' +
     '  PRIMARY KEY (CustNo) ' +
     ')';
   SQLConnection1.Execute(SQLstmt, nil, nil);
 end;

Um Parameter zu verwenden, legen Sie ein Data.DB.TParams-Objekt an. Für jeden Parameterwert fügen Sie mithilfe der Methode TParams.CreateParam ein TParam-Objekt hinzu. Anschließend verwenden Sie die Eigenschaften von TParam, um den Parameter zu beschreiben und seinen Wert zu setzen.

Dieser Prozess ist im folgenden Beispiel illustriert, das TDatabase verwendet, um eine INSERT-Anweisung auszuführen. Die INSERT-Anweisung verwendet einen einzelnen Parameter namens StateParam. Ein TParams-Objekt (stmtParams) wird erstellt, um für diesen Parameter den Wert "CA" bereitzustellen.

 procedure TForm1.INSERT_WithParamsButtonClick(Sender: TObject);
 var
   SQLstmt: String;
   stmtParams: TParams;
 begin
   stmtParams := TParams.Create;
   try
     Database1.Connected := True;
     stmtParams.CreateParam(ftString, 'StateParam', ptInput);
     stmtParams.ParamByName('StateParam').AsString := 'CA';
     SQLstmt := 'INSERT INTO "Custom.db" '+
       '(CustNo, Company, State) ' +
       'VALUES (7777, "Robin Dabank Consulting", :StateParam)';
     Database1.Execute(SQLstmt, stmtParams, False, nil);
   finally
     stmtParams.Free;
   end;
 end;

Falls die SQL-Anweisung einen Parameter beinhaltet, Sie aber kein TParam-Objekt und damit keinen Wert für den Parameter bereitstellen, kann die SQL-Anweisung während der Ausführung einen Fehler erzeugen (das ist von dem jeweils verwendeten Datenbank-Backend abhängig). Wird ein TParam-Objekt bereitgestellt, aber es gibt keinen entsprechenden Parameter in der SQL-Anweisung, wird eine Exception ausgelöst, wenn die Anwendung versucht, den TParam zu benutzen.

Siehe auch