ADO访问SQLSERVER时组件游标类型选择的两难局面
delphi 代码
//-------part A--------------------
ADOConnection1.Connected := True;
ADOQuery1.SQL.Text := 'SELECT * FROM 消息';
ADOQuery1.Active := True;
//-------part B--------------------
ADOQuery1.active := False;
ADOQuery1.SQL.Text := 'SELECT 1; SELECT 2; SELECT 3';
ADOQuery1.Active := True;
rs1 := ADOQuery1.NextRecordset(dummy);
//error of next line:
//Current provider does not support returning multiple recordsets from a single execution
rs2 := ADOQuery1.NextRecordset(dummy);
在开发中遇到这样的难题,如果ADOQuery1 采用了CursorLocation = clUseClient,则part B取得多记录集OK,但 part A
部分取得大量数据时,没有分页处理(也就是说程序要把所有记录[可能有上万笔]拉到本地再执行).
如果采用 CursorLocation = clUseServer CursorType = ctDynamic, 第一部分OK,会立即返回,但如果与DATAGRID绑定会报错
在一个单向性的数据集上进行了非法操作
而且在执行第二部分
rs2 := ADOQuery1.NextRecordset(dummy);
会报错
Current provider does not support returning multiple recordsets from a single execution
现在的系统中,如果采用CursorLocation = clUseClient, CursorType = ctStatic 的方式,可以工作,但由于一次性下载数据,
系统性能简直是不能使用.
所以请各位出出招,如果用 CursorType = ctDynamic 方式工作,此外,用这种方式工作还会出现什么其它需要注意的问题,请大家多多支持.