在做一个三层的MIS,现在中间层用ADO取出了数据,交给客户端使用。
问题是,中间层取数据的过程是被封装的了,而且数据集的列结构不确定(用户定义过程)
但我需要在这个结果集的基础上做汇总以及分组小计等其他操作
分组条件和汇总条件也是自定义的,无法预置,只能在运行期生成
现在感到很难办,我不想遍历数据集一条一条地判断,然后汇总
这样效率太低而且程序写起来麻烦维护也有问题
所以我想在中间层的结果的基础上再做一次SQL查询,这样能解决大部分问题
比如说,能不能把ADOQuery或者ClientDataSet的结果存成本地文件DBF,或者XML之类
然后用对应的数据库引擎在这之上再做一次查询
希望我表达清楚了我的意思,分不够可以加,希望大家帮忙

解决方案 »

  1.   

    ClientDataSet1.SaveToFile(...);
    ------------------------------
    procedure SaveToFile(const FileName: string = ''; Format TDataPacketFormat=dfBinary);
    type TDataPacketFormat = (dfBinary, dfXML, dfXMLUTF8);
      

  2.   

    有一些内容补充一下
    因为产生数据集的存储过程以后可能是由非专业人员去写的
    而且要同时支持SQLServer  Oracle数据库
    所以我感觉很难在存储过程上做文章
    上次也问过如何让一个自定义的存储过程返回一个表(数据集)
    没有得到好的办法
    如果能从这个角度去解决也是可以的
    即:对于几乎任意的SQL语句组合,用其创建存储过程
    使其返回的结果是最后一条select的结果
      

  3.   

    SaveToFile我知道
    但是XML文件用什么引擎去连接可以直接做SQL查询呢?
      

  4.   

    我想过了
    最初就是这样想的
    但是你怎么把数据插到临时表呢?
    取到中间层后再解析结果集的表结构
    构造SQL语句,然后建立临时表
    一条一条插么?
      

  5.   

    如果你的存储过程没有带参数且是一个临时表的话,可以用ADODataSet来执行的,它返回就是一个数据集,我们在客户可以通过ClientDataSet1进行返回数据集处理
      

  6.   

    我不是要做数据集处理
    而是执行SQL
    ClientDataSet不能支持SQL吧