procedure TForm1.Button1Click(Sender: TObject);
var str_temp: string;
begin
ADODataSet2.Close;
ADODataSet2.CommandText := 'select * from vegetable';
{ 内容如下:
veid mid goodsname spec unitname
------- ------- ------------------ -------------------------- ----------
1 1024 辣椒 大 kg
2 2014 猪肉 瘦 kg
4 2015 羊肉 山羊 kg
5 6897 芹菜 鲜 kg(所影响的行数为 4 行)
}
ADODataSet2.Open;
ShowMessage(IntToStr(ADODataSet2.RecordCount));
if ADODataSet2.RecordCount > 0 then
begin
ADODataSet2.Recordset.MoveFirst;
while not ADODataSet2.Eof do
begin
if ADODataSet2.Eof then
ShowMessage('靠,怎么到最后了。');
if ADODataSet2.Bof then
ShowMessage('靠,怎么到最前端了。');
//str_temp := ADODataSet2.Fields[1].AsString;
str_temp := ADODataSet2.Recordset.Fields['mid'].Value;
ShowMessage(str_temp);
ADODataSet2.Recordset.MoveNext;
end;
end;
ADODataSet2.Close;
end; {
如果是使用 str_temp := ADODataSet2.Recordset.Fields['mid'].Value;
则提示分别为 “4”、“靠,怎么到最前端了。”、“1024”、
“靠,怎么到最前端了。”、“2014”、“靠,怎么到最前端了。”、
“2015”、“靠,怎么到最前端了。”、“6897”、“靠,怎么到最前端了。”、
然后出现错误
“BOF或EOF中有一个是真,或者当前的纪录已被删除、所需的操作要求一个当前的纪录。” 如果使用 str_temp := ADODataSet2.Fields[1].AsString;
则提示分别为“4”、“靠,怎么到最前端了。”、“1024”、
“靠,怎么到最前端了。”、“1024”、“靠,怎么到最前端了。”、“1024”、
“靠,怎么到最前端了。”、“1024”、“靠,怎么到最前端了。”、“1024”、
然后出现错误
“BOF或EOF中有一个是真,或者当前的纪录已被删除、所需的操作要求一个当前的纪录。”
}
注:我使用的是Delphi 6,已经装过2个补丁,实在不知道为什么会出现这样的结果,请帮忙,谢谢.
var str_temp: string;
begin
ADODataSet2.Close;
ADODataSet2.CommandText := 'select * from vegetable';
{ 内容如下:
veid mid goodsname spec unitname
------- ------- ------------------ -------------------------- ----------
1 1024 辣椒 大 kg
2 2014 猪肉 瘦 kg
4 2015 羊肉 山羊 kg
5 6897 芹菜 鲜 kg(所影响的行数为 4 行)
}
ADODataSet2.Open;
ShowMessage(IntToStr(ADODataSet2.RecordCount));
if ADODataSet2.RecordCount > 0 then
begin
ADODataSet2.Recordset.MoveFirst;
while not ADODataSet2.Eof do
begin
if ADODataSet2.Eof then
ShowMessage('靠,怎么到最后了。');
if ADODataSet2.Bof then
ShowMessage('靠,怎么到最前端了。');
//str_temp := ADODataSet2.Fields[1].AsString;
str_temp := ADODataSet2.Recordset.Fields['mid'].Value;
ShowMessage(str_temp);
ADODataSet2.Recordset.MoveNext;
end;
end;
ADODataSet2.Close;
end; {
如果是使用 str_temp := ADODataSet2.Recordset.Fields['mid'].Value;
则提示分别为 “4”、“靠,怎么到最前端了。”、“1024”、
“靠,怎么到最前端了。”、“2014”、“靠,怎么到最前端了。”、
“2015”、“靠,怎么到最前端了。”、“6897”、“靠,怎么到最前端了。”、
然后出现错误
“BOF或EOF中有一个是真,或者当前的纪录已被删除、所需的操作要求一个当前的纪录。” 如果使用 str_temp := ADODataSet2.Fields[1].AsString;
则提示分别为“4”、“靠,怎么到最前端了。”、“1024”、
“靠,怎么到最前端了。”、“1024”、“靠,怎么到最前端了。”、“1024”、
“靠,怎么到最前端了。”、“1024”、“靠,怎么到最前端了。”、“1024”、
然后出现错误
“BOF或EOF中有一个是真,或者当前的纪录已被删除、所需的操作要求一个当前的纪录。”
}
注:我使用的是Delphi 6,已经装过2个补丁,实在不知道为什么会出现这样的结果,请帮忙,谢谢.
我不知用这个属性的好处,但我的建议是如果用,就全用,如ADODataSet2.Eof改为ADODataSet2.Recordset.Eof.否则就别用Recordset了.Using recordset is not recommended unless you are familiar with recordset object
^^^
operations.
这句应该为 str_temp := ADODataSet2.Fields.Fields[1].AsString;
算了,还是等后面的高手们解释一下吧
pf pf
begin
ADODataSet2.Close;
ADODataSet2.CommandText := 'select * from gz_AssetCard'; ADODataSet2.Open;
ShowMessage(IntToStr(ADODataSet2.RecordCount));
if ADODataSet2.RecordCount > 0 then
begin
ADODataSet2.Recordset.MoveFirst;
while not ADODataSet2.Recordset.EOF do
begin
if ADODataSet2.Recordset.EOF then
ShowMessage('靠,怎么到最后了。');
if ADODataSet2.Recordset.BOF then
ShowMessage('靠,怎么到最前端了。');
//str_temp := ADODataSet2.Fields[1].AsString;
str_temp := ADODataSet2.Recordset.Fields['Card_No'].value;
ShowMessage(str_temp);
ADODataSet2.Recordset.MoveNext;
end;
end;
ADODataSet2.Close;
end;
Second 别用DATASET吧,用QUERY吧,你用 ADODataSet2.Recordset.MoveNext;
和while not ADODataSet2.Eof do来判断循环 ,从错误消息可以看出,ADODATASET。BOF始终为TRUE, 你用ADODATASET2。RECORDSET。MOVENEXT,移动了四个指针后,就移向空了
(不過好像我更新到2.7就出現這種情況﹐后來將其中兩個Dll文件覆蓋掉了就沒事﹐這兩個文件好像是低版本的﹐具體原因到現在我也不得而知﹐只要稱動記錄就會出現說Eof或Bof為真的錯誤信息。我的是D5+SQL 7.0)
ShowMessage('靠,怎么到最后了。');
================
强!!!
huayuxing(huayuxing)应该是对的。
——delphi真他妈的垃圾,程序员的时间老是被补丁和bug无谓的浪费掉