1能否把ADOQUERY查询到的数据倒入TClientDataSet中?或者大家提供一个可以本地编辑的查询数据的例子也可以。
2在DBGRID中,我想根据查询的结果依次生成序号。能否仅在DBGRID中实现,如下
查询的DATASET
field1 field2
a      b
c      d
显示的DBGRID
显示的序号 field1 field2
1          a      b
2          c      d

解决方案 »

  1.   

    关于第一个问题,可以,
    使用一个DataSetProvider,它连接一个ADOQuery,在ADOQuery.Open执行后,使用
    ClientDataSet.Close;
    ClientDataSet.Data := DataSetProvider.Data;
    就可以把ADOQuery查询得到的结果送给ClientDataSet
      

  2.   

    第一个已经试成功,但是有一个问题。现在查询到的数据量比较大,通过DATASETPROVIDER进行转化速度很慢,大数据量下让人无法忍受。我是否能用TCLIENTDATASET直接查询?
      

  3.   

    关于第二个,我做了一个,但是不知道对不对,还是在回答第一个问题的基础上,在ClientDataSet中建立一个计算字段,取名Index,在ClientDataSet中添加事件处理CalcFields,代码如下:
    procedure TForm1.ClientDataSet1CalcFields(DataSet: TDataSet);
    begin
      DataSet.FieldByName('Index').Value := DataSet.RecNo;
    end;
      

  4.   

    你是做的三层程序么?你的查询在中间层完成,客户端用了ClientDataSet取得查询数据么?如果是,我还是有办法的,如果不是,那么就自己想办法优化你的查询把
      

  5.   

    我做的是本地数据库,数据库就是一个ACCESS文件,由于老版的程序数据已经存在,他们是把数据写到一个ACCESS文件中的,查询的许多从很多历史表中关联。所以没办法,只能按他们要求来了。
    我是通过ADOQUERY查询得到数据,并放入DBGRID。因为现在用户只能看不能写,所以在DBGRID里面,用户可以删除自己不想看的数据,但是没法更新到ACCESS文件中。现在最大的问题就是查询的时候速度太慢了,如果不用DATASETPROVIDER,速度还能忍受,要是加了,速度不行了。
      

  6.   

    为什么要用DATASETPROVIDER?两层结构,就不必ClentDataSet和DATASETPROVIDER了吧,另外一些DisableControls之类的,是不是有呢?
      

  7.   

    因为数据文件是放在一个ACCESS文件里,没办法,而且用户也只要求一台机器进行操作。DisableControls这类的东西当然不会少。速度还是没有快多少。现在有个新问题了。我现在用ADOQUERY保存数据,速度也还可以。问题是我要过滤掉很多不需要的东西,在连续使用DELETE时就报“无法定位”的错误了,请问这个怎么处理?
      

  8.   

    你使用了moMarshalAll还是moMarshalModifiedOnly?
    根据你的情况和ADO的更新机制,应该是在数据库进行查找的时候找不到你要删除的记录了,你是不是已经删除了,