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;

    运行结果为:

     

     

     说明一切运行正常。

  • 相关阅读:
    I.MX6 fbset 使用
    I.MX6 Android 设备节点权限
    使用Android Studio自带的NDK编译JNI
    I.MX6 网卡能收不能发
    make: *** No rule to make target `out/target/common/obj/APPS/framework-res_intermediates/src/R.stamp'
    Linux 监视文件、文件夹改动
    如何定位web前后台的BUG
    <转>SQL语句大全
    软件测试基础理论(三)
    软件测试基础理论(二)
  • 原文地址:https://www.cnblogs.com/xalion/p/12418902.html
Copyright © 2011-2022 走看看