![]() |
Datenbank: DB2 (AS400) • Zugriff über: ADO
ADO Query mit Parameter
aloha zusammen,
ich versuch gerade verzweifelt eine Stored Procedure auf einer AS400 aufzurufen... da ich mit der Stored Procedure komponente von ADO nicht so vertraut bin, wollte ich es gerade über eine normale ADOQuery versuchen... In der ADO Query habe ich mir 3 Parameter Felder angelegt (2 Input, 1 Output) mein source sieht wie folgt aus:
Delphi-Quellcode:
das komische ist, das er beim 1. versuch den SQL ohne probleme ausführt, allerdings ist danach der Return Parameter leer!
Try
With (dmas400_main.as400_query2) Do Begin Active := False; SQL.Clear; Parameters.ParamByName('KZGR').Value := '3'; Parameters.ParamByName('ZUKZ').Value := ' '; Parameters.ParamByName('Return').Value := EmptyStr; dmas400_main.as400_query2.Prepared := True; SQL.Add('Call LIBARY.StoredProcedure1 (:KZGR, :ZUKZ, :Return)'); ExecSQL; End; Except MessageDlg('Error SQL Query!', mtError, [mbOK], 0); Exit; End; Beim 2. mal ausführen findet er auf einmal den 1. Parameter nicht mehr... hat jemand eine idee woran es liegen könnte? |
Re: ADO Query mit Parameter
ich habs jetzt alternativ mal noch mit einem adocommand probiert...
Delphi-Quellcode:
da bringt er mir zwar nicht mehr die fehlermeldung mit dem parameter den er nicht findet, aber mein return value ist immer noch leer :(
Try
dmas400_main.adocmd.CommandText := 'Call LIBARY.StoredProcedure1 (:KZGR, :ZUKZ, :Return)'; dmas400_main.adocmd.Parameters.ParamByName('KZGR').Value := '3'; dmas400_main.adocmd.Parameters.ParamByName('ZUKZ').Value := ' '; dmas400_main.adocmd.Parameters.ParamByName('Return').Value := EmptyStr; dmas400_main.adocmd.Execute; Except MessageDlg('Error Command', mtError, [mbOK], 0); End; wenn jemand eine idde hat worans liegen könnte oder wie ich alternativ die stored procedure aufrufen kann und die werte zurück bekommen, dann meldet euch bitte... ich bin grad am verzweifeln ^^ edit: source eingefügt |
Re: ADO Query mit Parameter
Hallo,
soweit ich weiß, kann man mit den Parametern nur Werte an die Abfrage übergeben, bekommt dort aber keine Rückgabewerte. Aber schau Dir bitte mal dashier an: ![]() |
Re: ADO Query mit Parameter
danke für den link...
ich habs mal so nachprogrammiert wie beschrieben... jetzt kennt er auf einmal meine parameter nicht mehr :( habs mit adocommand und adostoredprocedure versucht: storedprocedure
Delphi-Quellcode:
command
dmas400_main.StoredProcedure.ProcedureName := 'LIBARY.STOREDPROCEDURE1';
dmas400_main.StoredProcedure.Parameters.Refresh; dmas400_main.StoredProcedure.Parameters.ParamByName('@KZGR').Value := '3'; dmas400_main.StoredProcedure.Parameters.ParamByName('@ZUKZ').Value := ' '; dmas400_main.StoredProcedure.ExecProc; ShowMessage(dmas400_main.StoredProcedure.Parameters.ParamValues['@Return']);
Delphi-Quellcode:
Try
dmas400_main.adocmd.CommandText := 'LIBARY.STOREDPROCEDURE1'; dmas400_main.adocmd.Parameters.Refresh; dmas400_main.adocmd.Parameters.ParamByName('KZGR').Value := '3'; dmas400_main.adocmd.Parameters.ParamByName('ZUKZ').Value := ' '; dmas400_main.adocmd.Execute; Except MessageDlg('Error Command', mtError, [mbOK], 0); End; |
Re: ADO Query mit Parameter
Hallo,
die von Dir genutzte Syntax mit dem @ ist auch eher für MS-SQL gedacht, der Autor schreibt ja, dass er von DB2 nicht wirklich Ahnung hat. Das dort beschriebene muss daher nicht für jede Datenbank genau passen, es beschreibt nur das grundlegende Vorgehen. Hilft die IBM direkt weiter? ![]() Ansonsten bitte Google bemühen: ![]() Bitte ändere die Fehlerbehandlung mal, damit sie aussagekräftiger wird: zumindest in
Delphi-Quellcode:
dann erfährst Du (eventuell) die Fehlerursache.
try
... Except on : e Exception do begin MessageDlg(e.Message, mtError, [mbOK], 0); end; end; Wenn's ein bisserl mehr sein darf:
Delphi-Quellcode:
Try
... except on e : EAdoError do begin slError := TStringList.Create; slError.Add(e.Message); if ADOConnection1.Errors.Count > 0 then begin for i := 0 to ADOConnection1.Errors.Count - 1 do begin slError.Add('Number: ' + IntToStr(ADOConnection1.Errors.Item[i].Number)); slError.Add('NativeError: ' + IntToStr(ADOConnection1.Errors.Item[i].NativeError)); slError.Add('Description: ' + ADOConnection1.Errors.Item[i].Description); slError.Add('Source: ' + ADOConnection1.Errors.Item[i].Source); slError.Add('HelpFile: ' + ADOConnection1.Errors.Item[i].HelpFile); slError.Add('SQLState: ' + ADOConnection1.Errors.Item[i].SQLState); ShowMessage(slError.Text); slError.Free; end; end; end; on e : Exception do begin ShowMessage(e.Message); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 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