Rückgabewert der gespeicherten Funktionen in MyDAC
Frage
Ich arbeite mit Devart der MyDAC und MySQL Server 5.0.41. Hier ist ein Ausschnitt aus der Dokumentation auf gespeicherte Prozeduren mit TMyConnection.ExecProc
ausführen:
Hinweis: Gespeicherte Funktionen im Gegensatz zu gespeicherten Prozeduren zurückgeben Ergebniswerte, die intern durch den Ergebnisparameter erhalten werden. Sie werden nicht mehr anonym Wert in der Params Array liefern müssen, um das Ergebnis der Funktion zu beschreiben. Das gespeicherte Funktionser wird von der params [0] indizierte Eigenschaft erhalten oder mit der ParamByName ( ‚RESULT‘) Methodenaufruf.
Sie geben auch ein Beispiel dafür, wie eine gespeicherte Funktion auszuführen:
aStringVariable1 := TMyConnection.ExecProc('StoredFunctionName',['Param1','Param2']);
aStringVariable2 := TMyConnection.ParamByName('Result').AsString;
Durch diese Beispiele Im Anschluss an meine Ausführung der gespeicherten Funktionen zurückkehren Param1
in der Variablen aStringVariable2
.The Ausführung der Funktionen in den Browser zurückgegeben Abfrage, um die richtigen Ergebnisse. Alle Hinweise auf die richtige Art und Weise gespeicherte Funktionen in MyDAC mit TMyConnection
oder TMyStoredProc
ausführen wird geschätzt.
Vielen Dank im Voraus.
Lösung
Hier ist der Code, den wir verwenden, um gespeicherte Prozeduren aufzurufen - hoffe, es hilft
function TDbControl.DatabaseStoredProc(FConnectionsAddr: integer; SpName: string;var Params: TDAParams): boolean;
var
MyStoredProc: TMyStoredProc;
PramsTxt: String;
Idx, Idx2: Integer;
begin
result := False;
MyStoredProc := nil;
try
try
MyStoredProc := TMyStoredProc.Create(nil);
MyStoredProc.Connection := TMyConnection(FConnectionsAddr);
MyStoredProc.StoredProcName := SpName;
MyStoredProc.ParamCheck := False;
if assigned(Params) then
begin
for Idx := 0 to Params.Count - 1 do
begin
MyStoredProc.ParamByName(Params[Idx].Name).DataType := Params[Idx].DataType;
MyStoredProc.ParamByName(Params[Idx].Name).Value := Params[Idx].Value;
end;
end;
MyStoredProc.Execute;
if assigned(Params) then
begin
for Idx := 0 to Params.Count - 1 do
begin
if (Params[Idx].ParamType = ptOutput ) then
Params[Idx].Value := MyStoredProc.ParamByName(Params[Idx].Name).Value;
end;
end;
result := True;
except
on E: Exception do
begin
PramsTxt := '';
if assigned(Params) then
begin
for Idx2 := 0 to Params.Count - 1 do
begin
PramsTxt := PramsTxt + Params.Items[Idx2].Name + '=' + Params[Idx2].AsString + ',';
end;
end;
LogText(FConnectionsAddr, 'DatabaseStoredProc Err:' + E.Message + ' SpName:' + SpName + ' Prams:' + PramsTxt);
raise ;
end;
end;
finally
FreeAndNil(MyStoredProc);
end;
end;