unidac的组件uniquery有两个个属性就可以轻松实现。但是这样做,你必须要写一条语句查出总记录来赋值给label才知道总共有多少记录哦,而且不能完美使用cxgrid、dbgrideh自带的过滤功能(因为刚开始只能100条数据,你是不能过滤100以后的符合条件的记录的)FetchRows可以设定一次获取记录的行数
uniquery 和 unitable 的 SpecificOptions 属性,需要设置 FetchAll=False才能使 FetchRows 的设置生效,而默认情况下, oracle 是设置Oracle.FetchAll=False;
而对去 sql server 和 mysql 等,却是设置的 XXX.FetchAll=True
uniquery 和 unitable 的 SpecificOptions 属性,需要设置 FetchAll=False才能使 FetchRows 的设置生效,而默认情况下, oracle 是设置Oracle.FetchAll=False;
而对去 sql server 和 mysql 等,却是设置的 XXX.FetchAll=True
自己先解决了一部分问题 利用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;
另一种方法就是自己手动实现,使用stringgrid,每次滚到表格底部时,手动加载下一批数据到表格中
我就是用clientdataset了
但是后面刷新 还是得自己处理下
索性自己写了。。