InfoLight-EEP(delphi)執行後端Store Procedure免用call Server Method

InfoLight-EEP(delphi)執行後端Store Procedure免用call Server Method

緣由:在EEP(delphi)下,常常需要叫用資料庫的SP,以往的做法是在SERVER端的PACKAGE上寫一個METHOD讓前端來進行呼叫,並取得執行的結果。

其實有個很簡單的做法,就可以達到相同的功能。

 

利用image InfoClientDataSet

image image (幫InfoClientDataSet設定屬性ProviderName)

image

image 寫入

   1:  procedure TfmButtonPanelLayout.btnExecSPClick(Sender: TObject);
   2:  var execSQL:string;
   3:  begin
   4:    execSQL:= 'exec usp_Products_Price ';
   5:    cdsExecSP.Close;
   6:    cdsExecSP.SQL.Text:=execSQL +' SELECT GETDATE() as FDATE ';
   7:    cdsExecSP.Execute;
   8:    //用ClientDataSet進行呼叫,無法叫用方法Execute,只能用Close與Open來進行呼叫SP
   9:  end;

或是利用sp回傳一個值

   1:  DECLARE @USERID VARCHAR(50)
   2:  EXEC dbo.uSP_FlowWork_Audit_USERID :Unit, '一般使用者', @USERID OUTPUT
   3:  SELECT @USERID as USERID


※為什麼要加一段' SELECT GETDATE() as FDATE ' ,若單純只呼叫SP的語法會出現錯誤cursor not returned
原因是因為ClientDataSet進行OPEN後,會接收一個DATASET,但是只有呼叫SP,並不會產生需要的DATASET,
所以這就是為什麼要加這一段(也可以用 SELECT ‘TEST’AS F1),總之只要有資料回來,就可以把問題避掉。