2010-09-13 119 views
0

我正在使用Devart's MyDac和MySQL Server 5.0.41。下面是從文檔上執行的存儲過程與TMyConnection.ExecProc一個部分:MyDAC中存儲函數的返回值

注:存儲不同於存儲過程函數返回通過RESULT參數內部獲得結果值。您將不再需要在Params數組中提供匿名值來描述函數的結果。存儲的函數結果是從Params [0]索引屬性或ParamByName('RESULT')方法調用獲得的。

他們還就如何執行存儲功能的例子:在變量aStringVariable2 .The

aStringVariable1 := TMyConnection.ExecProc('StoredFunctionName',['Param1','Param2']); aStringVariable2 := TMyConnection.ParamByName('Result').AsString;

通過以下的例子,我的存儲功能的執行正在返回Param1查詢瀏覽器中的函數執行返回正確的結果。將讚賞在正確的方式執行存儲在MyDAC TMyConnectionTMyStoredProc功能的任何指針。

在此先感謝。

回答

0

這裏是我們用來調用存儲過程的代碼 - 希望它有助於

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; 
+0

我希望*無需*與商業數據訪問庫寫這樣的代碼。是不是MyDAC有一些內置的東西? – oodesigner 2010-09-14 09:20:39

+0

@oodesigner,我的問題是MyDAC builting功能,它似乎沒有一種簡單的方式來處理存儲的函數。我可以在不帶'OUT'參數的情況下調用一個函數調用的存儲函數,我問了一個問題,想知道是否有類似的方法來執行存儲的函數或帶有out參數的過程。 @Charles,這個工程。感謝 – NicM 2010-09-14 15:27:11

+0

存儲過程,沒有'OUT'參數而沒有存儲函數 – NicM 2010-09-14 18:21:10