![]() |
Rückgabeparameter bei FireBird
Zitat:
[edit=mkinzler] Dieser Beitrag wurde von ![]() |
Re: Performance: Interbase vs. Firebird
Indem Du statt ExecSQL Open benutzt.
|
Re: Performance: Interbase vs. Firebird
Und dann im 2. Parameter ( Index 1)
|
Re: Performance: Interbase vs. Firebird
Nachdem ich mit der SQL Programmierung eben erst anfange, kann ich mit diesen Antworten nicht viel anfangen.
Mir ist nicht klar, was ich brauche, um einen einzelnen Wert als Query-Ergebnis zu übernehmen. Wenn im Hintergrund eine Tabelle liegt, liefert mir eine Query die entsprechenden Spalten, die dann z.B. in einem dbGrid landen. Aber in dem Fall habe ich ja keine Datenbanktabelle im Hintergrund und damit keine entsprechende Komponente. |
Re: Performance: Interbase vs. Firebird
So würde es mit IBDAC gehen
Delphi-Quellcode:
IBCQuery.SQL.Text := 'INSERT INTO TEST(BEZ) VALUES (:BEZ) returning ID;';
... IBCQuery.ParamByName('bez').Value := 'Test'; IBCQuery.Open; ID := IBCQuery.Params[1]; |
Re: Performance: Interbase vs. Firebird
Ah, danke.
Ich hoffe, es geht mit DBX genauso. Landen eigentlich alle Ergebnis-Einzelwerte von Querys in Params, (z.B. select count(*) from x) oder gilt das nur für Werte, die mit returns zurückgegeben werden? Und nur aus Neugierde: Was wird in Params[0] zurückgeliefert? Und letzte Frage: Gibt es irgendwo eine Schnittstellendokumentation, in der man derartige Informationen halbwegs kompakt nachlesen kann - das ist ja nicht die einzige Frage, die sich einem SQL-Einsteiger in den Weg stellt, das meiste lässt sich mit recht mühsamen Herumsuchen irgendwo herausfinden, manches anscheinend nicht (zum Glück gibt es dann dieses Forum, aber lieber würde ich die Sachen irgendwo nachlesen, als euch hier wiederholt mit Trivialitäten zu quälen). Ich habe jetzt noch einmal nachgeschaut, in der Delphi Dokumentation von Tquery steht dazu nichts, und wenn doch, dann so gut versteckt, dass ich es jedenfalls nicht finde. |
Re: Performance: Interbase vs. Firebird
Zitat:
Zitat:
|
Re: Rückgabeparameter bei FireBird
Delphi-Quellcode:
Irgendwie funktioniert das nicht - Ich bekomme beim letzten Befehl eine Exception, weil SQLQ.Params leer ist. Auch der Versuch, vor dem Open des SQL Statement einen leeren Params[0] zu erzeugen (auskommentierte Zeile) hat an der Exception nichts geändert.
s:='insert into Interpret values (''0'',''Wert1'') returning id;';
SQLQ := TSQLQuery.Create(SDIAppForm); SQLQ.SQLConnection := SQLC; SQLQ.Params.Clear; // SQLQ.Params.Add; SQLQ.SQL.Clear; SQLQ.SQL.add(s); SQLQ.open; messagedlg ('id: '+SQLQ.Params[0].asstring,mtInformation,[mbok],0); In ISQL wird bei der Eingabe dieses Befehls über den gespeicherten Trigger der Wert id='0' durch einen neuen eindeutigen Wert ersetzt. Ja, und in der Datenbank ist nach der Ausführung dieses Codes in der Tabelle Interpret auch noch keine neue Zeile angekommen, obwohl bei der Ausführung des Open Befehls keine Fehler gemeldet wurde. |
Re: Rückgabeparameter bei FireBird
|
Re: Rückgabeparameter bei FireBird
Leider nein, hat mit meinem Problem nichts zu tun.
Ich bekomme einfach das Ergebnis des SQL Statements, das mit der returning Klausel an das Programm zurückgegeben werden sollte, nicht zu fassen. Bei der Rückkehr von der Query ist Query.params ganz leer. Aber es muss irgend etwas grundlegend falsch sein, weil in der Tabelle auch kein Datensatz abgelegt wird. Die Übergabe des Befehlsstrings an SQL funktioniert aber offenbar, weil wenn ich den String irgendwie auf ein ungültiges SQL-Statement ändere (ungültiger Tabellenname oder fehlender Strichpunkt am Ende), löst der Aufruf von Open eine Exception aus. Nur wenn S einen syntaktisch richtigen SQL Befehl enthält, kehrt OPEN ohne Fehlermeldung zurück, ausgeführt wird das Insert aber trotzdem nicht - nicht einmal, wenn ich die returning Klausel weglasse. Edit: Dass keine Daten in der Tabelle ankommen, stimmt nicht. Es scheint nötig zu sein, im ISQL nach einem Select ein commit einzugeben, bevor man mit einem neuerlichen Select die neuen Daten zu Gesicht bekommt. Offenbar wird mit einem select implizit eine Transaktion gestartet, die dann die Sicht auf die Daten konsistent hält. Fazit: Das Insert wird ausgeführt, aber ich komme einfach nicht zum Rückgabewert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz