zoukankan      html  css  js  c++  java
  • 如何在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;

    运行结果为:

     

     

     说明一切运行正常。

  • 相关阅读:
    HttpServletRequest和HttpServletResponse实例
    ioc autofac简单示例
    sql left join 字符串
    sqlserver split函数
    类型同时存在于A.dll和B.dll中的解决办法
    ef使用dbfirst方式连接mysql
    html5 图片上传 预览
    webservice使用EF生成的model序列化问题
    sqlserver2008数据库文件降级为sqlserver2005文件
    [转]webapi部署在IIS7.5报404的解决方案
  • 原文地址:https://www.cnblogs.com/xalion/p/12418902.html
Copyright © 2011-2022 走看看