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.

War es hilfreich?

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top