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 1 von 4  1 23     Letzte »    
idefix2

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

Rückgabeparameter bei FireBird

  Alt 27. Mai 2010, 19:48
Zitat:
INSERT INTO TEST(BEZ) VALUES (:BEZ) returning ID;
Dazu habe ich eine Frage: Wo bekomme ich in meinem Delphi Programm diesen Ergebniswert ID zurück?

[edit=mkinzler] Dieser Beitrag wurde von http://www.delphipraxis.net/internal...t.php?t=120227 angespalten Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Performance: Interbase vs. Firebird

  Alt 27. Mai 2010, 19:56
Indem Du statt ExecSQL Open benutzt.
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
 
#3

Re: Performance: Interbase vs. Firebird

  Alt 27. Mai 2010, 20:02
Und dann im 2. Parameter ( Index 1)
Markus Kinzler
  Mit Zitat antworten Zitat
idefix2

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

Re: Performance: Interbase vs. Firebird

  Alt 27. Mai 2010, 20:44
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Performance: Interbase vs. Firebird

  Alt 27. Mai 2010, 20:52
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];
Markus Kinzler
  Mit Zitat antworten Zitat
idefix2

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

Re: Performance: Interbase vs. Firebird

  Alt 27. Mai 2010, 21:31
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Performance: Interbase vs. Firebird

  Alt 27. Mai 2010, 21:40
Zitat:
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?
Nein, diese Werte sind ja Spalten in der Ergebnismenge.
Zitat:
Was wird in Params[0] zurückgeliefert?
Der Rückgabeparameter wird an die Inputparameter angehängt, Params[0] ist also der Paramter Bez
Markus Kinzler
  Mit Zitat antworten Zitat
idefix2

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

Re: Rückgabeparameter bei FireBird

  Alt 28. Mai 2010, 22:19
Delphi-Quellcode:
       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);
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.

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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Rückgabeparameter bei FireBird

  Alt 28. Mai 2010, 22:21
Vielleicht hilft dir dieser Beitrag:
http://www.andreanolanusse.com/bloge...dbx-framework/
Markus Kinzler
  Mit Zitat antworten Zitat
idefix2

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

Re: Rückgabeparameter bei FireBird

  Alt 28. Mai 2010, 23:21
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 12:37 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