AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Stored Procedure erwartet Parameter
Thema durchsuchen
Ansicht
Themen-Optionen

Stored Procedure erwartet Parameter

Ein Thema von v2afrank · begonnen am 10. Jun 2009 · letzter Beitrag vom 10. Jun 2009
Antwort Antwort
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
571 Beiträge
 
Delphi XE2 Professional
 
#1

Stored Procedure erwartet Parameter

  Alt 10. Jun 2009, 06:24
Datenbank: SQL Server • Version: 2005 • Zugriff über: ADO
Hallo, das Thema hatten wir zwar schon hier, aber bei mir scheint der Fehler etwas anders gelagert zu sein.
Und zwar, greife ich auf eine Stored procedure auf meine Datenbank zu. Die Stored procedure habe ich im Designer angelegt. Nach einigen Stunden bekomme ich die Fehlermeldung "Die Prozedur oder Funktion 'spGetNextTask' erwartet den '@Id'-Parameter, der nicht bereitgestellt wurde".
Die ganze Zeit vorher funktioniert die Abfrage. Ab diesem Zeitpunkt nicht mehr.
Hier ist mein Code mit dem ich die Abfrage ausführe
Delphi-Quellcode:
function TKommunikationsDataModule.GetTask(Bezeichnung: String;
  var Device: Integer; var Number: String;var ID:String): Boolean;
var
 returnvalue:Integer;
begin
  result:=false;
  returnvalue:=0;

  GetTask.Parameters.ParamByName('@Id').Value:=vaNull;
  GetTask.Parameters.ParamByName('@RETURN_VALUE').Value:=returnvalue;
  GetTask.Parameters.ParamByName('@Bezeichnung').Value:=Bezeichnung;
  try
    GetTask.ExecProc;
    Device:=GetTask.Parameters.ParamByName('@Device').Value;
    Number:=GetTask.Parameters.ParamByName('@Number').Value;
    ID:=GetTask.Parameters.ParamByName('@Id').Value;
    Result:=true;
  except
    on E:exception do
      LogMe(GetTask'+e.Message);
end;
end;
In dem oben verlinkten Beitrag ist ein Tipp zu lesen, dass marabu seine SP nur im Code anlegt. Gilt das immer noch ? Schön wäre zu wissen warum.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Stored Procedure erwartet Parameter

  Alt 10. Jun 2009, 07:08
Hallo,

Zitat:
Die ganze Zeit vorher funktioniert die Abfrage. Ab diesem Zeitpunkt nicht mehr.
Also ohne was geändert zu haben, klappt es plötzlich nicht mehr ?

Also ich glaube nicht, dass das der Original-Quellcode ist
(im except fehlt mindestens ein Hochkomma).

Was mich eh wundert ist, wie in einer Boolean-Funktion GetTask
GetTask.Parameters geschrieben werden kann ???
Ist GetTask eine SP-Komponente und gleichzeitig eine Funktion?
Wenn ja, würde ich das mal ändern.
Sieht ja keiner druch

Das returnvalue:=0; macht eigentlich auch keinen Sinn.

Ausserdem fehlt der Quellcode der SP.



Heiko
Heiko
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
571 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Stored Procedure erwartet Parameter

  Alt 10. Jun 2009, 08:10
Du hast Recht durch meine Versuche sind mir ein paar Fehler unterlaufen (Ich hatte gepostet, als ich dabei war die Funktion umzubauen). Hier ist der Orginalquelltext, der den Fehler erzeugt hat. GetNextTaskStoredProc ist dabei eine Komponente vom Typ TADOStoredProc die ich im Designer gesetzt habe

Delphi-Quellcode:
function TKommunikationsDataModule.GetTask(Bezeichnung: String;
  var Device: Integer; var Number: String;var ID:String): Boolean;
var
 returnvalue:Integer;

begin
  LogMe('GetTask');
  result:=false;
  returnvalue:=0;

  GetNextTaskStoredProc.Parameters.ParamByName('@Id').Value:=vaNull;
  GetNextTaskStoredProc.Parameters.ParamByName('@RETURN_VALUE').Value:=returnvalue;
  GetNextTaskStoredProc.Parameters.ParamByName('@Bezeichnung').Value:=Bezeichnung;

  try
    GetNextTaskStoredProc.ExecProc;
    Device:=GetNextTaskStoredProc.Parameters.ParamByName('@Device').Value;
    Number:=GetNextTaskStoredProc.Parameters.ParamByName('@Number').Value;
    ID:=GetNextTaskStoredProc.Parameters.ParamByName('@Id').Value;
    Result:=true;
  except
    on E:exception do
     begin
      LogMe('GetTask'+e.Message);
      if e is EOleException then
       begin
        Watchdogdatamodule.Reconnect;
       end
      else
       begin
        if isWordInParameter('debug') then
         Infomemo.Lines.Add(e.Message);
       end;
     end;
  end;
 LogMe('Ende GetTask');
 end;
Interessant ist wahrscheinlich auch die Funktion Reconnect. Diese will ich aufrufen wenn der SQL Server mal nicht zur Verfügung steht.
Delphi-Quellcode:
procedure Reconnect;
begin
 try
   ADOConnection1.Connected:=false;
   Application.ProcessMessages;
   ADOConnection1.Open;
 except
  on exception do;
 end;
end;
Auf den Quellcode der SP habe ich momentan keinen Zugriff, da dieser von extern programmiert worden ist. Es ist aber so wie ich im Eingangspost beschrieben habe, dass die Funktion mehrere Stunden durchläuft, und dann den Fehler erzeugt. Interessant wäre wahrscheinlich auch, ob die Reconnectfunktion vor dem ersten Fehler durchlaufen wird. Kann diese etwas böses machen ?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Stored Procedure erwartet Parameter

  Alt 10. Jun 2009, 08:42
Hallo,

das sind dann blöde Fehler.

Was macht denn das vaNull, ich kenne hier nur varNull.
Aber ist wohl intern das gleiche ...

Wenn der Fehler in der SP erst nach Stunden auftritt,
liegt es wohl nifht in der SP selber.
Log doch mal ALLE Parameter mit,
die übergeben werden.

Vielleicht wird einer nicht richtig übergeben
und "überschreibt" die Id.

Warum schreibst du eigentlich @RETURN_VALUE, laut MSDN ohne @
RETURN_VALUE

Ich würde mir auf jeden Fall zumindestens mal die Signatur der SP geben lassen
(Deklaration, Feldtypen usw.).


Heiko
Heiko
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
571 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Stored Procedure erwartet Parameter

  Alt 10. Jun 2009, 08:45
Ich kenne nur das vaNull. Dadurch will ich erreichen, dass ich immer einen festegelegt Defaultwert habe.
Mit mitloggen meinst Du, dass ich die Parameter, die ich in der StoredProcedure habe mitlogge oder ?
Werde ich auf jeden Fall mal machen
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Stored Procedure erwartet Parameter

  Alt 10. Jun 2009, 10:29
Hallo,

vaNull ist ein Type aus TValueType,
das hat mit DB's nix zu tun.

Du willst ja den Datentyp des Return-Parameters festlegen,
dazu sollte reichen

.Parameters.ParamByName('@Id').DataTpye:= ftInteger;
.Parameters.ParamByName('RETURN_PARAMETER').DataTp ye:= ftInteger;

RETURN_PARAMETER ohne das @ (siehe mein Link)

Ausserdem wird ja auch im Link immer das parameter.Direction gesetzt,
bei @Id muss es auf pdReturnValue gesetzt sein.
Kann aber ein, dass das die IDE selber schon gemacht hat.



Heiko
Heiko
  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 00:25 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