如何在unidac 中執行一次查詢獲得多個數據集?


很多朋友問如何在unidac 中執行一次查詢獲得多個數據集?

其實這個問題很簡單,unidac 很早就支持這個功能,但是很多人沒有研究過。

今天就簡單說一下,在unidac 中執行一次查詢獲得多個數據集。首先這個需要數據庫支持,如果

數據庫不支持的話,unidac 也是沒有辦法實現的。

今天以sql server 2014 為例,說一下如何實現這個功能。

首先我們在uniquery中執行下面的查詢語句。

procedure TForm2.Button7Click(Sender: TObject);
begin
  cx.SQL.Clear;
  cx.SQL.Add('SELECT  *  FROM DWB d');
  cx.SQL.Add('SELECT * FROM FJRYB f');
  cx.Open;
end;

很明顯,如果我們直接運行這一段代碼,就會和正常的語句一樣,返回第一個select 語句的結果

 

 

 那么我們怎么取得第二個數據集呢?很簡單

procedure TForm2.Button8Click(Sender: TObject);
begin
 if not cx.OpenNext then
   exit;

end;

我們只需調用OpenNext 過程。如果有第二個數據集,當前的數據集就移動到第二個數據集了

 

 

 由於只有兩個數據集,如果再次執行opennext 就關閉數據集了。什么也不顯示了。

 

 

 那么再來一次,又可以顯示第一個數據集了,說明這個opennext 是環形的。

當然了在存儲過程中這個也是類似的。

我們首先寫一個存儲過程。

CREATE PROCEDURE dbo.MYSUM @sumok INT OUTPUT
AS
BEGIN

  SET @sumok = 1 + 2

  SELECT    *   FROM DWB d
    SELECT  *   FROM FJZB f
END
GO

我們要返回兩個數據集,一個輸出參數。

procedure TForm2.Button6Click(Sender: TObject);
var
  i:integer;

  tablelist:Tlist<Tdataset> ;
begin
   sp.Params[1].ParamType:=ptInputOutput;
   sp.Params[1].DataType:=ftInteger;
   sp.Params[1].AsInteger:=10;
   sp.Execute;
     repeat
       showmessage(  sp.Fields[1].AsString);
     until  not sp.OpenNext;


  i:=sp.Params[1].AsInteger;

  showmessage(i.ToString);
end;

運行結果為:

 

 

 

 

 

 說明一切運行正常。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM