Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   rdb$set_context mit parametern verwenden (https://www.delphipraxis.net/152819-rdb%24set_context-mit-parametern-verwenden.html)

idefix2 8. Jul 2010 09:49

Datenbank: Firebird • Version: 2.1 • Zugriff über: UIB

rdb$set_context mit parametern verwenden
 
Hallo,

Mit dem Befehl
Code:
'select rdb$set_context('USER_SESSION','User_Id',12) from rdb$database';
kann ich der Firebird-Sessionkontextvariable User_Id den Wert 12 zuweisen. Das funktioniert einwandfrei (der Rückgabewert des Select - 0 oder 1 - interessiert mich nicht).

Es gelingt mir aber nicht, diesen Wert 12 via Params zu übergeben. Ich habe mich jetzt schon mit allem möglichen gespielt, mit manuellem Erzeugen des Parameters und mit DescribeBind - egal ob Integer oder Stringtyp, beim SQL-Aufruf bekomme ich eine Exception auf die Art "ungültiger Parametertyp". Weiss jemand, wie das mit der UIBLib funktioniert?.

Es ist nicht sehr schlimm, ich erzeuge den SQL String jetzt einfach dynamisch, es hätte mich aber doch interessiert, wie das richtig gemacht wird.

alex517 8. Jul 2010 12:44

AW: rdb$set_context mit parametern verwenden
 
versuchs mal damit,
wenn deine Komponenten "EXECUTE BLOCK" verarbeiten können:
SQL-Code:
EXECUTE BLOCK (User_Id varchar(40) = :User_Id)
RETURNS ( User_Id2 varchar(40))
as
begin
  RDB$SET_CONTEXT('USER_SESSION', 'User_Id', User_Id);
  User_Id2 = RDB$GET_CONTEXT('USER_SESSION', 'User_Id'); -- nur zum Test wieder auslesen
  suspend;
end

idefix2 8. Jul 2010 15:13

AW: rdb$set_context mit parametern verwenden
 
Danke für die Antwort - ein funktionierendes Workaround habe ich schon: ich erzeuge einfach den kompletten SQL Befehlsstring unmittelbar vor dem Aufruf und übergebe keine Parameter.

Was ich gerne gewusst hätte, ist, warum gerade bei diesem SQL Befehl die Parameterübergabe nicht so funktioniert wie bei allen anderen, die mir bisher untergekommen sind, und wie sie da funktioniert - weil vielleicht stolpere ich bei irgend einer ganz anderen Sache bei nächster Gelegenheit wieder über ein derartiges Problem.

ChrisE 8. Jul 2010 15:34

AW: rdb$set_context mit parametern verwenden
 
Hallo,

also mit IBDAC scheint es zu gehen.

Delphi-Quellcode:
IBCQuery1.SQL.Text := 'select rdb$set_context(''USER_SESSION'',''User_Id'',:TheId) from rdb$database';
IBCQuery1.Prepare;
IBCQuery1.Params[0].DataType := ftInteger;
IBCQuery1.Params[0].AsInteger := 12;
IBCQuery1.Execute;
Ich weiß aber nicht wirklich, ob dir das weiter hilft ;-)

Greez, Chris

idefix2 9. Jul 2010 08:10

AW: rdb$set_context mit parametern verwenden
 
Hmm, wenn es mit IBDAC geht, müsste es mit der UIBLIB auch gehen, weil die ist eigentlich nur ein Wrapper um die Firebird API Aufrufe. Werde ich also in meinem Code weiter nach dem Fehler suchen, wenn ich Zeit dafür finde :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 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