AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADO Query mit Parameter
Thema durchsuchen
Ansicht
Themen-Optionen

ADO Query mit Parameter

Ein Thema von Andidreas · begonnen am 8. Sep 2009 · letzter Beitrag vom 8. Sep 2009
Antwort Antwort
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

ADO Query mit Parameter

  Alt 8. Sep 2009, 11:28
Datenbank: DB2 (AS400) • Zugriff über: ADO
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:
  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;
das komische ist, das er beim 1. versuch den SQL ohne probleme ausführt, allerdings ist danach der Return Parameter leer!
Beim 2. mal ausführen findet er auf einmal den 1. Parameter nicht mehr...

hat jemand eine idee woran es liegen könnte?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: ADO Query mit Parameter

  Alt 8. Sep 2009, 12:57
ich habs jetzt alternativ mal noch mit einem adocommand probiert...

Delphi-Quellcode:
  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;
da bringt er mir zwar nicht mehr die fehlermeldung mit dem parameter den er nicht findet, aber mein return value ist immer noch leer
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
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

Re: ADO Query mit Parameter

  Alt 8. Sep 2009, 13:04
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: Delphi - Returning data with stored procedures
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: ADO Query mit Parameter

  Alt 8. Sep 2009, 13:27
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:
  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']);
command
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;
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

Re: ADO Query mit Parameter

  Alt 8. Sep 2009, 14:03
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? http://www.ibm.com/developerworks/da.../dm-0512swart/

Ansonsten bitte Google bemühen: delphi +stored +procedure +db2 eventuell ist da ja was brauchbares bei.

Bitte ändere die Fehlerbehandlung mal, damit sie aussagekräftiger wird:

zumindest in
Delphi-Quellcode:
try
  ...
Except
  on : e Exception do begin
    MessageDlg(e.Message, mtError, [mbOK], 0);
  end;
end;
dann erfährst Du (eventuell) die Fehlerursache.
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;
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:48 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