奇怪奇怪真奇怪,高手请来看看!!(50分)

  • 主题发起人 主题发起人 kntrue
  • 开始时间 开始时间
K

kntrue

Unregistered / Unconfirmed
GUEST, unregistred user!
我在编程中遇到这样的一个奇怪问题。
在数据库查找中,我使用adoConnection连接sqlServer,adoQuery连接adoConnection。
当我查找一条记录时,如果这条记录没有,我关闭adoQuery.close时会抛一个异常,如下:
--->project traincount.exe raise exception class EOleException with message
bof 或eof 有一个是真,或者当前记录已被删除,所需的操作要求需要一个当前的记录.。
然而我直接关闭adoConnection时就没有问题了,难道当数据集为空时不能关闭么??
代码如下:

//查询一条没有的记录!
procedure TForm1.Button4Click(Sender: TObject);
var selectStr : string ;
begin
selectStr:='select * from depUserInfo where userId=''1''';//数据库中没有
if not adoCon.Connected then
adoCon.Open;
if not adoQuery1.Active then
begin
adoQuery1.SQL.Clear;
adoQuery1.SQL.Add(selectStr);
adoQuery1.Open;
end;

end;
//查询完毕尝试关闭
procedure TForm1.Button5Click(Sender: TObject);
begin
if adoQuery1.Eof then
//adoCon.Close; 关闭没问题
adoQuery1.Close; //将抛异常
end;
 
1.建议打ADO补丁,装MDAC2.6或以上版本
2.数据库设计可能有问题
 
to ysai,
我现在装得是mdac2.7版本,数据库设计的应该没问题,我又写了个测试程序!不行
 
你再做个测试,建一个只一个自编号字段的表,查询一个不存在的值试试
 
to ysai,首先感谢你,谢了。但是
已试过,不行
代码:-->
//差不存在地记录
procedure TForm1.Button1Click(Sender: TObject);
var strSql : string ;
begin
//这个表里没有一条记录!!
strsql :='select * from closeQuery_test where id=''1''';
adoQuery1.SQL.Clear;
adoQuery1.SQL.add (strSql);
adoQuery1.Open;
end;

//关
procedure TForm1.Button2Click(Sender: TObject);
begin
adoQuery1.Close;//抛异常,信息一样
end;
 
我做了一个测试,没有任何问题,你的表里是不是有bit类型的字段?
你试试在表名前加上ado.看会不会有什么问题!
 
把你的代码改成下面的样子试试:
procedure TForm1.Button4Click(Sender: TObject);
var selectStr : string ;
begin
selectStr:='select * from depUserInfo where userId=''1''';//数据库中没有
if not adoCon.Connected then
adoCon.Open;
adoQuery1.close;
adoQuery1.SQL.Clear;
adoQuery1.SQL.Add(selectStr);
adoQuery1.Open;
end;
end;

//查询完毕尝试关闭
procedure TForm1.Button5Click(Sender: TObject);
begin
adoQuery1.Close;
end;
 
to边走边悟,谢谢指点.
但是按你所说的尝试仍然不行依然抛异常!!

还有我发现只要数据集的指针指到一条空记录,就会抛这个异常。当我查询完,如果有记录
用while adoQuery.eof do
begin
.........
adoQuery.next;
end;
当循环结束时我关闭adoquery,抛异常。只有让adoQuery指向一条记录在关闭才可以!
adoQuery.first;
adoQuery.close;
我想这个关闭查询控件诸位都用过,难道你们这样用就没问题么,请指点迷津,不胜感激!

 
to seven_918 多谢,我加了ado.后会抛一个没有这个表的异常!
我重建了一个数据库,只有一个字段id :char型长度为10。
我原来的数据库中没有bit型,有一个bigInt,其他都是vchar和char
//查找没有的
procedure TForm1.Button4Click(Sender: TObject);
var selectStr : string ;
begin
selectStr:='select * from closeQuery_test where id=''25''';//没有这个值
if not adoCon.Connected then
adoCon.Open;
adoQuery1.Close;
adoQuery1.SQL.Clear;
adoQuery1.SQL.Add(selectStr);
adoQuery1.Open;
end;
//关闭
procedure TForm1.Button5Click(Sender: TObject);
begin

adoQuery1.Close; //照样抛异常!!
end;

我用的是delphi5,难道是5的bug,太夸张了吧
 
Delphi5的ADO确实有BUG
挺烦人
 
把ADO升一下级吧
 
老天爷,我在别人的delphi6上试了一下,毫无问题,昨天我白白的搞到2点^_^。
看来确实是delphi5的bug
spymaster老兄请告诉我如何升级ado来解决这个问题?我已经装了mdac2.7了。
感谢大家关心!
 
我现在已经安装delphi6一切问题解决,谢谢大家,我现在就散分
 
后退
顶部