AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Rückgabeparameter bei FireBird
Thema durchsuchen
Ansicht
Themen-Optionen

Rückgabeparameter bei FireBird

Ein Thema von idefix2 · begonnen am 27. Mai 2010 · letzter Beitrag vom 2. Jun 2010
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#11

Re: Rückgabeparameter bei FireBird

  Alt 29. Mai 2010, 10:03
Ich habe gerade unter Linux mit Lazarus folgendes ausprobiert:INSERT INTO Person(Name,Vorname) VALUES(:name,:vorname) RETURNING ID
Delphi-Quellcode:
  SQLQuery.Params.ParamByName('Name').Value := 'Mustermann';
  SQLQuery.Params.ParamByName('Vorname').Value := 'Max';
  SQLQuery.Open;
  ShowMessage(SQLQuery.FieldByName('ID').AsString);
Siehe da, mir wurde die ID ausgegeben. Unter Delphi dürfte das (je nach Zugriffskomponenten) ähnlich aussehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Rückgabeparameter bei FireBird

  Alt 29. Mai 2010, 10:09
Die Rückgabe scheint sehr von den verwendeten Komponenten abzuhängen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#13

Re: Rückgabeparameter bei FireBird

  Alt 29. Mai 2010, 10:13
Trotzdem würde ich es einmal mit Fields statt Params versuchen, wenn Letzteres nicht funktioniert.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#14

Re: Rückgabeparameter bei FireBird

  Alt 30. Mai 2010, 13:37
Delphi-Quellcode:
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;
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".
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Rückgabeparameter bei FireBird

  Alt 30. Mai 2010, 16:20
Hast Du auch mal das aus #11 probiert?
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#16

Re: Rückgabeparameter bei FireBird

  Alt 30. Mai 2010, 17:43
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.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#17

Re: Rückgabeparameter bei FireBird

  Alt 30. Mai 2010, 17:48
Hallo...
Zitat:
Hast Du auch mal das aus #11 probiert?
...ich wiederhole das mal.

Denn anscheinend nicht. Es wurde schon mehrfach gesgt, daß du wenn du einen Rückgabewert erwartest OPEN statt EXECSQL benutzen mußt.

  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#18

Re: Rückgabeparameter bei FireBird

  Alt 30. Mai 2010, 23:20
Ich habe sowohl open als auch execsql probiert. Das Verhalten ist in beiden Fällen exakt gleich:

SQLQ.SQL.add('insert into Interpret (id,name) values (''0'',''Testwert'') returning id;'); 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 (:id,:name) returning id;'); erlaubt mir zwar, die Werte für
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.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Rückgabeparameter bei FireBird

  Alt 31. Mai 2010, 00:23
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 hier.
Angehängte Dateien
Dateityp: zip fbtest_165.zip (40,8 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#20

Re: Rückgabeparameter bei FireBird

  Alt 31. Mai 2010, 13:34
Hallo omata,

Du verwendest in diesem Beispiel die Interbase DBX Komponenten. Das hatte ich als erstes versucht, leider absolut erfolglos.

In diesem Link ist beschrieben, dass mir mit den Komponenten nicht einmal ein Connect zur Firebird Datenbank gelungen ist. Das gleiche passiert mir bei Deinem Beispiel. Nach der Anpassung von Benutzername, Password und Datenbankpfad kommt auch hier die Fehlermeldung: connection rejected by remote interface, als wäre Benutzername oder Password falsch. Mit Isql und mit dbworkbench funktioniert der Zugriff. Ich verwende Delphi 2009 und Firebird 2.1. Im oben angeführten Thread haben verschiedene Poster gemeint, es liege daran, dass man mit den DBX Interbase Komponenten prinzipiell nicht auf Firebird zugreifen könne. Anscheinend geht es bei Dir doch, und es würde mich interessieren, in welcher Konstellation das geht.

Zitat:
Ist dir klar, was du alles in der Datenbank anlegen must, damit das überhaupt funktioniert
Im Posting #10 habe ich geschrieben: Das Insert wird ausgeführt, aber ich komme einfach nicht zum Rückgabewert.
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr.
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