Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select ... into Variable (https://www.delphipraxis.net/140014-select-into-variable.html)

Quake_MSC 10. Sep 2009 09:20


Select ... into Variable
 
Hallo Zusammen,

ist es möglich in einem SQL Select einen Wert in eine Variable umzuleiten (wie in einer Prozedur)?

Bsp.:
Delphi-Quellcode:
with QueryMyReport do
BEGIN
SQLcommand:= 'select name1 from sadr_adresse where adr_adrid = 100000 into :sNAME1';
SQL.Clear;
SQL.Add(SQLcommand);
ParambyName('sNAME1');
OPEN;
// hier würde die Behandlung der Variablen sNAME1 kommen
CLOSE;
END;
Oracle quittiert das, dass die Bindvariable nicht existiert.

Kennt jemand die korrekte Vorgehensweise? Oder gibt es etwas besseres?

Danke

mirage228 10. Sep 2009 09:24

Re: Select ... into Variable
 
So weit ich weiß dürfen Parameter nur für Werte (also DB-Felder) und nicht für Tabellen (ein String würde doch mit '' umgeben werden) verwendet werden...
Aber Du könntest ja einfach einen normalen Select machen und dann Open und das Speichern in eine Variable (oder mehrere) manuell erledigen, dürfte kaum mehr Code sein...

hoika 10. Sep 2009 09:29

Re: Select ... into Variable
 
Hallo,

die Frage ist wozu ???
Vielleicht meinst du ja sowas ?

Delphi-Quellcode:
var
  sStr: String;


with QueryMyReport do
BEGIN
  SQLcommand:= 'select name1 As sName1 from sadr_adresse where adr_adrid = 100000';
  SQL.Clear;
  SQL.Add(SQLcommand);
  OPEN;
  try
  // hier würde die Behandlung der Variablen sNAME1 kommen
    sStr:= FieldByName('sName1').AsString;
  finally
    CLOSE;
  end;
END;

Ich habe extra sStr als Variable genommen,
weil Delphi-Variablen nicht einfach per SQL gefüllt werden können.


Heiko

Elvis 10. Sep 2009 10:04

Re: Select ... into Variable
 
Ganz zu schweigen davon, dass es viel einfacher ginge das Ergebnis direkt abzufragen... (siehe hoikas code ;-) )

In Oracle kannst du nicht einfach PL/SQL und reines SQL vermischen.
Um ein SELECT-INTO auszuführen, musst du in einem PL/SQL Block sein, außerdem kommt das INTO direkt nach dem SELECT-Teil, nicht am Ende der Abfrage:
SQL-Code:
begin
   select name1
   into :name1
   from sadr_adresse
   where adr_adrid = 100000;
end;
Du musst auch auf den Fall reagieren, dass vllt nix gefunden wird (denn dann wirft Oracle eine Exception!):
SQL-Code:
begin
   select name1
   into :name1
   from sadr_adresse
   where adr_adrid = 100000;
exception when no_data_found then
  :name1 := null;
end;
Dieses SQL ist aber keine Abfrage mehr, und müsste dann mit Execute, ExecSql oder wie auch immer es mit deiner Zugriffsbibliothek heißt, ausgeführt werden.

Wenn du es einfach als normale Abfrage ausführst, wie Hoika es beschrieb musst du dir darum keine Sorgen machen.


Es ist übrigens kein Zufall, dass dieses Portal ein Datenbank-Forum hat, in dem man nach der Datenbank und den Zugriffsbibliotheken gefragt wird. ;-)

DP-Maintenance 10. Sep 2009 10:07

DP-Maintenance
 
Dieses Thema wurde von "Daniel" von "Object-Pascal / Delphi-Language" nach "Datenbanken" verschoben.

Quake_MSC 10. Sep 2009 12:23

Re: Select ... into Variable
 
OK! Super Antworten: ich werde rangehen und die "einfachere" Variante
einsetzen: ich nehme den "reinen" SQL Code von HOIKA.

Melde mich dann nochmals...

Vielen Dank für das "Verschieben" in die Kategorie "Datenbanken".

Quake_MSC 24. Sep 2009 10:18

Re: Select ... into Variable
 
So, jetzt konnte ich endlich den Code erweitern:

Delphi-Quellcode:
with QueryMyReport do
BEGIN
SQLcommand:= 'select name1 from sadr_adresse where adr_adrid = 100000';
SQL.Clear;
SQL.Add(SQLcommand);
ParambyName('sNAME1');
OPEN;
with QueryMyReport DO
 BEGIN
 while not EOF do
     BEGIN
       sName:= FieldbyName('name1').AsString;
   // hier kommen weitere Anweisungen...
     END;
 END;
QueryMyReport.Close;
END;
Als connector benutze ich übrigens den TOraSession von Devart.

Vielen Dank für eure Hilfe.

Gruss
Quake_MSC


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