我动态的创建了一个ClientDataSet,然后用cds.CloneCursor(cdsMeter, True)克隆了一个数据集,当我遍历时,为什么ClientDataSet已经是最后一条记录了,而Eof()函数返回不为True,以致于执行cds.Next,导致出错:Missing data provider or data packet.
解决方案 »
- 那位好心的Delphi大哥帮个忙呗
- tcxtabsheet的重复显示及自动关闭问题
- CONSOLE和GUI双模式
- 如何替换字符串里的char(0)结束符 怎么stringreplace替换不了呢 ?
- 我为什么用下面的这个组件,不能监视Temp文件夹的改变?其他的文件夹都可以正常的监视?
- 关于checklistbox问题。急急急啊。如果知道很简单40。在线等待
- 如何用程序单击程序外的座标, 怎么总是单击不成功
- 哈尔滨的朋友进来坐坐
- 在这找到一个朋友——散分
- 对 DATASET 有研究的请进。
- 如何通过delphi 如一按button 按扭将excel 文件显示在form中,并存入sql2000
- delphi如何实现 检查网站的PR值,及收录情况,最后收录时间?
最簡單的: cbb_cb.Properties.Items.Clear;
cbb_cb.Text:='';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add( ' select CB from Res_User_Temp where CB is not NULL group by CB ' );
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
cbb_cb.Properties.Items.Add(Trim(ADOQuery1.FieldValues['CB']));
ADOQuery1.Next;
end;
var
cds: TClientDataSet;
begin
cdsMeter.Open;
cds := TClientDataSet.Create(nil);
if cdsMeter.State in [dsEdit, dsInsert] then
cdsMeter.Post; //这里cdsMeter的记录数为100,已经打开,
cds.CloneCursor(cdsMeter, True);
SelectCount := 0;
RelayClass := 0;
cds.First;
while not cds.Eof do
begin
if cds.FieldByName('Checked').AsBoolean = true then
Inc(SelectCount);
if cds.RecNo = cds.RecordCount then
Break;
cds.Next;//这里这跟踪过了,当cds的记录数RecordCount为100时,cds.Eof还为false,所以还会执行一次cds.Next,这时就会弹出哪个错误
end;
end;
cds.CloneCursor(cdsMeter, True);
cds.FetchOnDemand:=False;//加这一句
if cds.RecNo = cds.RecordCount then如果 cds.recNo是从0开始的,那么你判断最后一条应该是if cds.RecNo = cds.RecordCount-1 then这样才对