![]() |
Re: Rückgabeparameter bei FireBird
Ich habe gerade unter Linux mit Lazarus folgendes ausprobiert:
SQL-Code:
INSERT INTO Person(Name,Vorname) VALUES(:name,:vorname) RETURNING ID
Delphi-Quellcode:
Siehe da, mir wurde die ID ausgegeben. Unter Delphi dürfte das (je nach Zugriffskomponenten) ähnlich aussehen.
SQLQuery.Params.ParamByName('Name').Value := 'Mustermann';
SQLQuery.Params.ParamByName('Vorname').Value := 'Max'; SQLQuery.Open; ShowMessage(SQLQuery.FieldByName('ID').AsString); |
Re: Rückgabeparameter bei FireBird
Die Rückgabe scheint sehr von den verwendeten Komponenten abzuhängen
|
Re: Rückgabeparameter bei FireBird
Trotzdem würde ich es einmal mit Fields statt Params versuchen, wenn Letzteres nicht funktioniert.
|
Re: Rückgabeparameter bei FireBird
Delphi-Quellcode:
Ich habe jetzt versucht, die Werte als Parameter zu übergeben (in der Hoffnung, dann vielleicht in id eine Antwort zurückzubekommen - obwohl auch das unbefriedigend wäre, weil der mit returning zurückgegebene Wert eines SQL Statements muss ja nicht in allen Fällen einem übergebenem Feldelement entsprechen, sondern kann ja irgend ein errechneter Wert sein). Jetzt erzeugt schon der SQL Aufruf eine Exception, mit der für mich unverständlichen Fehlermeldung: "Die Feldnamen für %s konnten nicht erkannt werden".
SQLQ := TSQLQuery.Create(SDIAppForm);
SQLQ.SQLConnection := SQLC; SQLQ.SQL.Clear; SQLQ.SQL.add('insert into Interpret (id,name) values (:id,:name);'); // returning id;'); SQLQ.PrepareStatement; SQLQ.Params.Parambyname('id').value := 0; SQLQ.Params.Parambyname('name').value := 'Testwert'; SQLQ.ExecSQL; |
Re: Rückgabeparameter bei FireBird
Hast Du auch mal das aus #11 probiert?
|
Re: Rückgabeparameter bei FireBird
Ich komme ja jetzt nicht einmal mehr dazu, das returning irgendwie auszuprobieren, weil das ExecSQL - mit und ohne returning - eine Exception auslöst, sobald ich Parameter verwende.
Wenn ich im SQL Statement keine Parameter verwende, sondern direkt die Werte angegebe, kennt er ein FieldByName ('id') nicht. |
Re: Rückgabeparameter bei FireBird
Hallo...
Zitat:
Denn anscheinend nicht. Es wurde schon mehrfach gesgt, daß du wenn du einen Rückgabewert erwartest OPEN statt EXECSQL benutzen mußt. :hi: |
Re: Rückgabeparameter bei FireBird
Ich habe sowohl open als auch execsql probiert. Das Verhalten ist in beiden Fällen exakt gleich:
SQL-Code:
liefert beim Aufruf von Open oder ExecSQL keine Fehlermeldung, aber es gibt keinen Parameter id, dh der Zugriff auf SQLQ.Params.Parambyname('id') produziert eine Exception (was zu erwarten war, weil den Parameter id gibt es ja wirklich nicht).
SQLQ.SQL.add('insert into Interpret (id,name) values (''0'',''Testwert'') returning id;');
SQL-Code:
erlaubt mir zwar, die Werte für
SQLQ.SQL.add('insert into Interpret (id,name) values (:id,:name) returning id;');
SQLQ.Params.Parambyname('id').value := 0; SQLQ.Params.Parambyname('name').value := 'testwert'; zu setzen, dafür produziert der Aufruf von Open ebenso wie der Aufruf von ExecSQL eine Exception, nämlich Die Feldnamen für %s konnten nicht erkannt werden Dabei ist es egal, ob ich versuche, mit der Klausel "returning id" einen Rückgabewert zu bekommen oder ob ich diese Klausel weglasse. In dem Fall komme ich also gar nicht dazu, den Rückgabewert von SQLQ.Params.Parambyname('id') anzuschauen. |
Re: Rückgabeparameter bei FireBird
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein Beispiel, das wunderbar funktioniert.
Ist dir klar, was du alles in der Datenbank anlegen must, damit das überhaupt funktioniert? Das hat nämlich nichts mit Delphi zu tun. Falls nicht, siehe ![]() |
Re: Rückgabeparameter bei FireBird
Hallo omata,
Du verwendest in diesem Beispiel die Interbase DBX Komponenten. Das hatte ich als erstes versucht, leider absolut erfolglos. In diesem ![]() Zitat:
Natürlich habe ich auch überprüft, ob in der Spalte id die richtigen trigger-generierten Werte ankommen, das ist alles in Ordnung. Nur der Rückgabewert in delphi ist das Problem. Ich werde jetzt noch versuchen, Dein Beispiel mit möglichst wenig Änderungen auf die Firebird - DBX-Komponenten umzustellen - mit etwas Glück könnte es genügen, nur die Properties von SQLConnection geeignet anzupassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 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