![]() |
HELP ! Stored Procedures angelegt, Aufruf mißlingt !
Hallo,
ich bin es nochmal und habe einen neuen Thread aufgemacht. Ich habe ein echtes Problem an der Backe. Als Server benutze ich MS SQL 7.0. Der Zugriff erfolgt über ADO. TADOStoredProc ist ja wohl dazu da, gespeicherte Prozeduren ohne Ergebnismengen (also Insert, Create, Update..) aufzurufen. Die Prozedur habe ich im Objekt-Inspektor ausgewählt. Folgender Code funktioniert auch:
Code:
Das EXECPROC danach macht aber Schwierigkeiten, sodaß es zu folgender Fehlermeldung kommt:
AdoStoredProc1.Parameters.parambyname('@Feld').Value := 'Wert1';
....... Zitat:
Bei ergebnismengenorientierten Abfragen (Select etc.) kann man die Prozedur wie eine normale Tabelle behandeln. Also zum Beispiel so: Select * from test_procedure Ich brauche dazu ja wohl ein ADODataSet und eine Query. Und wie muß ich diese beiden im Objekt-Inspektor miteinander verbinden, daß die Query das Ergebnis der Prozedur zurückliefert ? Sind also nur zwei Fragen.. Wäre also wirklich klasse, wenn einer ne Antwort parat hätte. Komme nämlich echt nicht weiter. Danke ! Gruss Ich habe schon überall nachgeschaut, dieses Forum ist hier eigentlich die einzige Möglichkeit, dieses Scheiß-Problem zu beseitigen, da ich selbst an die Grenzen meiner Möglichkeiten gestoßen und etwas frustriert bin. :-( Gunnar |
Re: HELP ! Stored Procedures angelegt, Aufruf mißlingt !
Hallo Gunnar!
Ich habe mal ein paar Anmerkungen zu Deinem Posting geschrieben Zitat:
Delphi-Quellcode:
procedure CallSP;
var myCommand : ADOInt.Command; myParam : ADOInt.Parameter; RowsAffected : OleVariant; begin // Command-Objekt erzeugen myCommand := CoCommand.Create; with myCommand do begin // Command-Objekt initialisieren CommandType := adCmdStoredProc; CommandText := 'spDoSomething'; // Parameter erzeugen und an das Command-Objekt hängen myParam := CreateParameter('Param1',adChar,adParamInput,30); Parameters.Append(myParam); // Parameterwert setzen Parameters[0].Value := 'Hallo'; // Connection setzen, über die der Befehl abgesetzt wird, // irgendwo im Programm muss es die Connection myADOConnection // geben, diese muss auch (soweit ich weiss) offen sein Set_ActiveConnection (myADOConnection); // In RowsAffected steht drin, auf wie viele Zeilen sich die // Prozedur ausgewirkt hat. Wenn es Records zurück gibt, dann // muss natürlich der letzte Parameter anders sein. Execute (RowsAffected,EmptyParam,adExceuteNoRecords); end; // Command-Objekt wieder freigeben myCommand.Free; end; Zitat:
[quote="lemmond1976"] Bei ergebnismengenorientierten Abfragen (Select etc.) kann man die Prozedur wie eine normale Tabelle behandeln. Also zum Beispiel so: Select * from test_procedure Ich brauche dazu ja wohl ein ADODataSet und eine Query. Und wie muß ich diese beiden im Objekt-Inspektor miteinander verbinden, daß die Query das Ergebnis der Prozedur zurückliefert ? [/qoute] Wenn ich mich nicht ganz irre, dann kann man den obigen Code folgendermassen erweitern, um die Rückgabemenge der Stored Procedure in einem Recordset zu speichern:
Delphi-Quellcode:
In myRS steht dann die Ergebnismenge der Stored Procedure drin. Müsste klappen, aber ich weiss das gerade nicht zu 100%.
procedure CallSPmitRS;
var myCommand : ADOInt.Command; myParam : ADOInt.Parameter; myRS : ADOInt.RecordSet; RowsAffected : OleVariant; begin // Command-Objekt erzeugen myCommand := CoCommand.Create; with myCommand do begin // Command-Objekt initialisieren CommandType := adCmdStoredProc; CommandText := 'spDoSomething'; // Parameter erzeugen und an das Command-Objekt hängen myParam := CreateParameter('Param1',adChar,adParamInput,30); Parameters.Append(myParam); // Parameterwert setzen Parameters[0].Value := 'Hallo'; // Connection setzen, über die der Befehl abgesetzt wird, // irgendwo im Programm muss es die Connection myADOConnection // geben, diese muss auch (soweit ich weiss) offen sein Set_ActiveConnection (myADOConnection); // In RowsAffected steht drin, auf wie viele Zeilen sich die // Prozedur ausgewirkt hat. myRS := Execute (RowsAffected,EmptyParam,adOptionUnspecified); end; // Command-Objekt wieder freigeben myCommand.Free; end; Viele Grüsse Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 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 by Thomas Breitkreuz