Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL-Statement doesn't return rows (https://www.delphipraxis.net/190311-sql-statement-doesnt-return-rows.html)

Khanysha 22. Sep 2016 09:00

Datenbank: SQLite • Version: 3.9.2 • Zugriff über: UniDAC

SQL-Statement doesn't return rows
 
Hallo zusammen,
ich verzweifle ein bisschen.
Ich beschäftige mich seit neuestem mit Datenbanken bzw deren Zugriff über ein Delphi-Projekt. Ich nutze hierfür SQLite und für den Zugriff UniDAC. Ich habe eine Tabelle mit dem SQLite-Browser erstellt. Via Grid und nem Memo kann ich die Tabelle anzeigen lassen und SQL-Befehle ausführen.

Nun zu meinem Problem:
wenn ich INSERT INTO Tabelle(Spalte1, Spalte2) VALUES ('Wert1','Wert2'); ausführe, bekomme ich die Fehlermeldung: SQL-Statement doesn't return rows führt die Anweisung aber dennoch aus. Wenn ich die Aussagen von Onkel Google richtig verstehe sagt die Fehlermeldung, dass es diese Zeile noch nicht gibt. Nun will ich ja mit INSERT INTO einen neuen Datensatz anlegen, natürlich ist der noch nicht da, deswegen nutze ich das doch?!

Verstehe ich da nun was falsch? Muss ja, sonst käme die Meldung ja nicht :oops:

LG

Neutral General 22. Sep 2016 09:01

AW: SQL-Statement doesn't return rows
 
Du darfst die Query nicht mit "Open" ausführen, sonder mit "ExecSQL".
Mehr ist es nicht.

Alles was keine Datensätze zurückliefert geht über ExecSQL.

mkinzler 22. Sep 2016 09:08

AW: SQL-Statement doesn't return rows
 
Bzw. wenn man sich nicht für die Rückgabe interessiert.

Khanysha 22. Sep 2016 09:08

AW: SQL-Statement doesn't return rows
 
Danke für deine Antwort. Das war es wirklich. *Kopf-->Tisch*

Khanysha 22. Sep 2016 09:14

AW: SQL-Statement doesn't return rows
 
Zitat:

Zitat von mkinzler (Beitrag 1348415)
Bzw. wenn man sich nicht für die Rückgabe interessiert.

Aktuell...sagen wir mal so ist es ein Spielprojekt um zu verstehen. Angefangen mit: Einfügen, Ändern und löschen (und das nicht über den Navigator :D) von Datensätzen und natürlich visualisieren. Es soll nachher in ein größeres Projekt gebastelt werden, aber dazu muss ich erst verstehen was ich da mache und wenn es Fehler gibt warum ich die habe :)

mkinzler 22. Sep 2016 09:43

AW: SQL-Statement doesn't return rows
 
Bei ExecSQL wird die Abfrage ausgeführt, das Ergebnis aber nicht geholt. Das ist im Normalfall aber nicht sinnvoll.
Liefert die Abfrage ein Ergebnis -> Open, wenn nicht -> ExecSQL.

Khanysha 22. Sep 2016 09:48

AW: SQL-Statement doesn't return rows
 
Zitat:

Zitat von mkinzler (Beitrag 1348426)
Bei ExecSQL wird die Abfrage ausgeführt, das Ergebnis aber nicht geholt. Das ist im Normalfall aber nicht sinnvoll.
Liefert die Abfrage ein Ergebnis -> Open, wenn nicht -> ExecSQL.

Also muss ich sogesehen beides verwenden? Wenn ich aber einen Datensatz frisch anlege, dann gibt es doch kein Ergebnis oder? Zu dem Zeitpunkt wo ich das ausführe gibt es ID x mit den WertenY und WertenZ ja noch nicht.

Neutral General 22. Sep 2016 09:49

AW: SQL-Statement doesn't return rows
 
Machts nicht zu kompliziert.

SELECT --> Open
INSERT/UPDATE/DELETE/ALTER/CREATE/... --> ExecSQL

himitsu 22. Sep 2016 10:04

AW: SQL-Statement doesn't return rows
 
Einfach gesagt: Was Datensätze zurückliefern "könnte" mit OPEN (egal, ob es "gerade" keine gibt)
und was niemals ein ResultSet liefert, das mit EXECUTE.

Oder, wie schon gesagt wurde, SELECT mit OPEN und Rest mit EXECUTE.




Aber wer es genauer wissen will, bezüglich dem SQL-Sprachumfang. :stupid:
Wann wird OPEN verwendet: (ansonsten EXECUTE)

Data Manipulation Language (DML) -> hier alle Abfragebefehle, sonst nicht
Data Definition Language (DDL) -> nie
Data Control Language (DCL) -> meistens nicht

Data Query Language (DQL) -> immer
Transaction Control Language (TCL) -> nie



EXECUTE geht immer und OPEN wirft einen Fehler, wenn das Query "niemals" ein ResultSet liefern würde.

p80286 22. Sep 2016 10:18

AW: SQL-Statement doesn't return rows
 
Zitat:

Zitat von mkinzler (Beitrag 1348426)
Bei ExecSQL wird die Abfrage ausgeführt, das Ergebnis aber nicht geholt. Das ist im Normalfall aber nicht sinnvoll.

bei einem SELECT-Statement
Zitat:

Zitat von mkinzler (Beitrag 1348426)
Liefert die Abfrage ein Ergebnis -> Open, wenn nicht -> ExecSQL.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz