Abfragen ausführen, die keine Ergebnismenge liefern

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Abfrage-Datenmengen


Abfragen, die eine Menge von Datensätzen liefern (beispielsweise eine SELECT-Abfrage), werden genauso ausgeführt wie Vorgänge, bei denen eine Datenmenge mit Datensätzen gefüllt wird: Sie setzen die Eigenschaft Active auf True oder rufen die Methode Open auf.

Von bestimmten SQL-Befehlen werden allerdings keine Datensätze zurückgegeben. Solche Befehle beinhalten Anweisungen, die DLL-Anweisungen (Data Definition Language) oder DML-Anweisungen (Data Manipulation Language) verwenden, bei denen es sich nicht um SELECT-Anweisungen handelt (beispielsweise geben die Befehle INSERT, DELETE, UPDATE, CREATE INDEX und ALTER TABLE keine Datensätze zurück).

Bei allen Typen von Abfrage-Datenmengen lassen sich Abfragen, die keine Ergebnismenge liefern, durch Aufrufen der Methode ExecSQL ausführen:

CustomerQuery.ExecSQL;  { Abfrage liefert keine Ergebnismenge }
CustomerQuery->ExecSQL(); // Liefert keine Ergebnismenge

Tip:  Führen Sie eine Abfrage mehrfach aus, so empfiehlt es sich, die Eigenschaft Prepared auf True zu setzen.

Auch wenn die Abfrage keine Datensätze zurückgibt, ist es unter Umständen interessant zu wissen, wie viele Datensätze von ihrer Ausführung betroffen waren (z.B. wie viele Datensätze mit einer DELETE-Abfrage gelöscht wurden). Die Eigenschaft RowsAffected gibt diesen Wert nach dem Aufruf von ExecSQL an.

Tip:  Ist zur Entwurfszeit noch nicht bekannt, ob eine Abfrage eine Ergebnismenge liefert oder nicht (z.B. wenn der Benutzer die Abfrage zur Laufzeit dynamisch erstellt), können sie beide Arten von Anweisungen für die Ausführung der Abfrage in einem try...catch-Block programmieren. Fügen Sie einen Aufruf der Methode Open in die try-Klausel ein. Wenn die Abfrage mit der Methode Open ausgeführt wird, erfolgt eine Aktionsabfrage, zusätzlich wird allerdings eine Exception ausgelöst. Überprüfen Sie die Exception, und unterdrücken Sie diese, wenn sie nur angibt, dass keine Ergebnismenge vorhanden ist. (Beispielsweise wird dies bei einer Datenmenge vom Typ TQuery durch eine ENoResultSet-Exception angegeben.)

Siehe auch