unidac的组件uniquery有两个个属性就可以轻松实现。但是这样做,你必须要写一条语句查出总记录来赋值给label才知道总共有多少记录哦,而且不能完美使用cxgrid、dbgrideh自带的过滤功能(因为刚开始只能100条数据,你是不能过滤100以后的符合条件的记录的)FetchRows可以设定一次获取记录的行数
uniquery 和 unitable 的 SpecificOptions 属性,需要设置 FetchAll=False才能使 FetchRows 的设置生效,而默认情况下, oracle 是设置Oracle.FetchAll=False;
而对去 sql server 和 mysql 等,却是设置的 XXX.FetchAll=True 

解决方案 »

  1.   

    先感谢楼上
    自己先解决了一部分问题 利用clientdataset来接收数据
    实在郁闷 clientdataset一直以来没能完全用上 这次算是用上了 就是实现3层结构的中间利器
    代码如下:
    ClientDataSet := TClientDataSet.Create(Self);
      DataSetProvider := TDataSetProvider.Create(Self);
      DataSetProvider.DataSet := ClientDataSet;
      CreateADODataSet(ADOQuery, ConnectionString, Self);
      try
        SqlStr := 'select * from T_Role';
        ExecADOQuery(ADOQuery, SqlStr, True);
        DataSetProvider.DataSet := ADOQuery;
        ClientDataSet.AppendData(DataSetProvider.Data, True);
      finally
        ADOQuery.Free;
      end;
      ClientDataSet.FieldByName('RoleID').ReadOnly := False;//这里赋值过来默认ID列会为自读,要改过来下,这样新增情况下才可以往里面编辑
      ClientDataSet.IndexFieldNames := 'RoleCode';//设置索引列,便于FindKey方法查找,编辑下查找是否重复编号用
      DataSource := TDataSource.Create(Self);
      DataSource.DataSet := ClientDataSet;
      DataSource.OnDataChange := DataChange;
    //  ClientDataSet.First;
      cxGridDBTableView.DataController.DataSource := DataSource;
      

  2.   

    使用DataSet数据集,批量读入DBGrid即可。
      

  3.   

    yes,clientdataset有个属性,可以设置每次加载记录的数量,分批次加载,完全符合你的要求
    另一种方法就是自己手动实现,使用stringgrid,每次滚到表格底部时,手动加载下一批数据到表格中
      

  4.   

    这位兄弟说的有理
    我就是用clientdataset了
    但是后面刷新 还是得自己处理下
    索性自己写了。。