Abfrage definieren

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Datenmengen - Index

Bei echten Abfrage-Datenmengen geben Sie die SQL-Anweisung, die von der Datenmenge ausgeführt werden soll, über die Eigenschaft SQL an. Bei einigen Datenmengentypen, wie z.B. TADODataSet, TSQLDataSet und bei Client-Datenmengen müssen Sie hierzu die Eigenschaft CommandText verwenden.

Bei den meisten Abfragen, die Datensätze zurückgeben, handelt es sich um SELECT-Befehle. In der Regel dienen sie zur Angabe, welche Felder verwendet werden sollen, aus welchen Tabellen diese Felder stammen, welche Bedingungen die Menge der zu verwendenden Datensätze begrenzen und in welcher Reihenfolge die Datensätze der Ergebnisdatenmenge ausgegeben werden sollen. Beispiel:

SELECT CustNo, OrderNo, SaleDate
FROM Orders
WHERE CustNo = 1225
ORDER BY SaleDate

In Abfragen, die keine Datensätze zurückgegeben, sind außer SELECT-Anweisungen noch Anweisungen in einer der Sprachen DDL (Data Definition Language) oder DML (Data Manipulation Language) enthalten. (Über die Befehle INSERT, DELETE, UPDATE, CREATE INDEX und ALTER TABLE werden keine Datensätze zurückgegeben). Die in Befehlen verwendete Sprache ist serverspezifisch, aber normalerweise konform mit dem Standard SQL-92 für die Sprache SQL.

Der SQL-Befehl, den Sie ausführen, muss für den von Ihnen verwendeten Server geeignet sein. Datenmengen werten SQL-Befehle weder aus, noch führen sie diese aus. Sie geben den Befehl nur zur Ausführung an den Server weiter. In den meisten Fällen darf als SQL-Befehl nur eine vollständige SQL-Anweisung verwendet werden. Diese kann allerdings die benötigte Komplexität aufweisen (Beispiel: eine SELECT-Anweisung, in der eine WHERE-Klausel mit mehreren verschachtelten logischen Operatoren wie AND und OR enthalten ist). Einige Server unterstützen auch die Verarbeitung von Batch-Syntax zur Angabe mehrerer Anweisungen. Wenn Ihr Server diese Syntax unterstützt, können Sie bei der Definition der Abfrage mehrere Anweisungen angeben.

Die in Abfragen verwendeten SQL-Anweisungen können "wörtlich" angegeben werden oder ersetzbare Parameter enthalten. Abfragen, in denen Parameter verwendet werden, heißen parametrisierte Abfragen. Bei ihrer Verwendung werden die den Parametern zugewiesenen Werte in die Abfrage eingefügt, bevor diese ausgeführt wird. Solche Abfragen lassen sich sehr flexibel einsetzen, weil die Sicht und der Zugriff eines Benutzers auf die Daten zur Laufzeit geändert werden können, ohne dass hierzu die SQL-Anweisung angepasst werden muss. Weitere Informationen zu parametrisierten Abfragen finden Sie unter Parameter in Abfragen verwenden.

Abfrage über die Eigenschaft SQL definieren

Bei Verwendung einer echten Abfrage-Datenmenge (TQuery, TADOQuery, TSQLQuery oder TIBQuery) müssen Sie die Abfrage der Eigenschaft SQL zuweisen. Dabei handelt es sich um ein Objekt vom Typ TStrings. Jeder einzelne String in diesem TStrings-Objekt stellt eine Zeile der Abfrage dar. Die Verwendung mehrerer Zeilen hat keinen Einfluss darauf, wie der Server die Abfrage ausführt. Teilen Sie die Anweisung in logische Einheiten auf, erleichtert dies allerdings das Ändern sowie das Suchen und Beseitigen von Fehlern in der Abfrage:



 MyQuery.Close;
 MyQuery.SQL.Clear;
 MyQuery.SQL.Add('SELECT CustNo, OrderNO, SaleDate');
 MyQuery.SQL.Add(' FROM Orders');
 MyQuery.SQL.Add('ORDER BY SaleDate');
 MyQuery.Open;



 MyQuery->Close();
 MyQuery->SQL->Clear();
 MyQuery->SQL->Add("SELECT CustNo, OrderNO, SaleDate");
 MyQuery->SQL->Add("FROM Orders");
 MyQuery->SQL->Add("ORDER BY SaleDate");
 MyQuery->Open();



Der folgende Beispielquelltext zeigt das Ändern einer einzelnen Zeile einer SQL- Anweisung. In diesem Fall befindet sich die ORDER BY-Klausel schon in der dritten Zeile der Anweisung. Sie wird über die Eigenschaft SQL mit dem Index 2 referenziert.



 MyQuery.SQL[2] := 'ORDER BY OrderNo';



 MyQuery->SQL->Strings[2] = "ORDER BY OrderNO";



Anmerkung:  Damit Sie die Eigenschaft SQL angeben oder ändern können, muss die Datenmenge geschlossen sein.

Beim Entwurf der Anwendung können Sie den Stringlisten-Editor aufrufen, um die Abfrage zu definieren. Klicken Sie im Objektinspektor auf die Ellipsen-Schaltfläche (...) neben der Eigenschaft SQL, um diesen Editor aufzurufen.

Anmerkung:  Bei einigen Versionen von Delphi können Sie zusammen mit TQuery den SQL-Builder zum Erstellen einer Abfrage verwenden. Der visuelle Abfragegenerator unterstützt Sie dabei durch Anzeige der in einer Datenbank enthaltenen Tabellen und Felder. Um dieses Modul zu aktivieren, wählen Sie eine Abfragekomponente, klicken mit der rechten Maustaste darauf und wählen im lokalen Menü den entsprechenden Befehl. Details über den SQL-Builder können Sie der Online-Hilfe zu diesem Programmmodul entnehmen.

Da es sich bei der Eigenschaft SQL um ein TStrings-Objekt handelt, können Sie den Text für eine Abfrage aus einer Datei laden. Hierzu müssen Sie die Methode TStrings.LoadFromFile aufrufen:



 MyQuery.SQL.LoadFromFile('custquery.sql');



 MyQuery->SQL->LoadFromFile("custquery.sql");



Mit der Methode Assign der Eigenschaft SQL lässt sich der Inhalt eines String-Listen-Objekts in die Eigenschaft SQL kopieren. Dabei wird der aktuelle Inhalt der Eigenschaft vor dem Kopieren der neuen Anweisung zunächst gelöscht:



 MyQuery.SQL.Assign(Memo1.Lines);



 MyQuery->SQL->Assign(Memo1->Lines);



Eine Abfrage über die Eigenschaft CommandText definieren

Wenn Sie mit einer der Datenmengen vom Typ TADODataSet, TSQLDataSet oder mit einer Client-Datenmenge arbeiten, können Sie den Text für die Abfrageanweisung der Eigenschaft CommandText wie folgt zuweisen:



 MyQuery.CommandText := 'SELECT CustName, Address FROM Customer';



 MyQuery->CommandText = "SELECT CustName, Address FROM Customer";



Zur Entwurfszeit ist es möglich, die Abfrage direkt in den Objektinspektor einzugeben. Falls die Datenmenge allerdings bereits mit der Datenbank verbunden ist, können Sie auf die Ellipsen-Schaltfläche (...) neben der Eigenschaft CommandText klicken, um den Befehlstexteditor aufzurufen. Er unterstützt Sie beim Erstellen der Abfrage, weil er eine Liste der verfügbaren Tabellen und der Felder in den betreffenden Tabellen anzeigt.

Siehe auch