Zitat von
toyoman:
funzt leider auch mit "normalen" namen nicht (ohne @).
hab noch ein attachment von der genauen fehlermeldung angehängt!
Hi Toyoman!
Unter
ADO funktioniert das mit den Parametern ein bisschen anders als bei Datenbankaufrufen über die
BDE. Innerhalb von
ADO werden Parameter durch ein ? im
SQL-String und die Position des Parameters in der Parameters-Liste des Command-Objektes definiert. Ich benutze immer folgenden Code, der ganz gut funktioniert (angenommen wir haben einer Prozedur spDoSomething mit dem Parameter Param1 dann kann man die Prozedur wie folgt aufrufen (ich gehe über direkte
ADO-Programmierung weil in dbGO der ein oder andere Fehler drin ist. Wenn man
ADO direkt anspricht läuft auch das Programm selbst schneller (frag mich nicht...) genaueres hierzu kannst Du in dem sehr guten Buch "
ADO und Delphi" von Andreas Kosch finden (u.a. auch eine Art Benchmark...sehr interessant!)). Damit der Code funktioniert musst Du die
Unit ADOInt in deine Uses-Klausel aufnehmen:
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 := adCmdStoredProcedure;
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;
Ich hoffe ich konnte Dir weiterhelfen
Viele Grüsse
Frank