![]() |
Datenbank: SQL Server • Version: 2005 • Zugriff über: ADO
Stored Procedure erwartet Parameter
Hallo, das Thema hatten wir zwar schon
![]() 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:
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.
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; |
Re: Stored Procedure erwartet Parameter
Hallo,
Zitat:
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 |
Re: Stored Procedure erwartet Parameter
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:
Interessant ist wahrscheinlich auch die Funktion Reconnect. Diese will ich aufrufen wenn der SQL Server mal nicht zur Verfügung steht.
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;
Delphi-Quellcode:
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 ?
procedure Reconnect;
begin try ADOConnection1.Connected:=false; Application.ProcessMessages; ADOConnection1.Open; except on exception do; end; end; |
Re: Stored Procedure erwartet Parameter
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 @ ![]() Ich würde mir auf jeden Fall zumindestens mal die Signatur der SP geben lassen (Deklaration, Feldtypen usw.). Heiko |
Re: Stored Procedure erwartet Parameter
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 |
Re: Stored Procedure erwartet Parameter
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 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