向ADOQuery高手求救!!!(50分)

  • 主题发起人 主题发起人 NewHuman
  • 开始时间 开始时间
N

NewHuman

Unregistered / Unconfirmed
GUEST, unregistred user!
我再利用ADOQuery对access数据库进行操作,为了减少控件,我使用一个ADOQuery。
运行会出现
“raised exception class EAccessViolation with message 'Access
violation at address 1F453E7E in module 'msado15.dll',write of
address 0147A000'”的错误提示
请诸位大侠指教!我将不胜感激!

with ADOQuery1 do
begin
Close ;
Sql.Clear ;
Sql.Text := 'select * from users ';
Open;
end;
with ADOQuery1 do
begin
Close ;
Sql.Clear ;
Sql.Text := 'delete from users where name=''aa''';
ExecSql;
end;
 
name 里面的内容是 'aa' ?
 
????
 
DELPHI ADO的BUG:如果一个AdoQuery对象事例做过了增删改操作(insert ,update, delete)之后
再做查询(select) ,就会出这个错误。目前我没有找到解决的办法,打补丁也没有用,我的
解决方法是:查询(select)用一个AdoQuery,增删改用另外一个AdoQuery,就一切ok,
写的时候要特别小心,一旦看见这个问题,就去看看是否两个query混用了
 
好象在win2000下面
adoquery.insert;
adoquery.delete;
好象不能用!
 
to: dcsdcs
可以用的,我这里就常常这样用,你是怎样用的?
 
sadj,

我insert之后可以select哦!我成功了的。我的系统是xp+d6
 
语句是没有问题, 给 Delphi 打上补丁看看,如果是 D5 ,两个都要打。
 
to sadj但是如果这是个过程,当我反复调用这个过程时,就会出现
这样的错误提示:

Either bof or eof is ture or the current record has been deleted ,Requested operation requires a current record

这是在执行adoquery.close是出错的。不知到是为什么
 
这就是需要打补丁了。
 
不要多次提同一个问题
 
到以下兩貼找找補丁下載的地點及打補丁的次序。
http://delphibbs.com/delphibbs/dispq.asp?lid=978072

http://delphibbs.com/delphibbs/dispq.asp?lid=968814
 
》》来自:sadj, 时间:2002-3-26 13:42:00, ID:1003288
》》DELPHI ADO的BUG:如果一个AdoQuery对象事例做过了增删改操作(insert ,update, delete)之后
》》再做查询(select) ,就会出这个错误。目前我没有找到解决的办法,打补丁也没有用,我的
》》解决方法是:查询(select)用一个AdoQuery,增删改用另外一个AdoQuery,就一切ok,
》》写的时候要特别小心,一旦看见这个问题,就去看看是否两个query混用了

这是瞎说~
只要一个 AdoQuery在同一时间内中执行某一句SQL操作, 是不会发生任何冲突的!
让一个 AdoQuery 并发insert delete 是不行的!
------------------------
顶楼的,你贴出来的语句,没有错误的! 大概有其他地方的错误 或数据库某些问题!
1。检查你的数据库模块 及 ado链接
2。用ADOQuery1.SQL.Add()
3。打补丁
你应该换调ado组件,删了,再重新链接! 试试一下!




 
顺序反一下就好了,如果目的同样能达到的话
with ADOQuery1 do
with ADOQuery1 do
begin
Close ;
Sql.Clear ;
Sql.Text := 'delete from users where name=''aa''';
ExecSql;
end;

begin
Close ;
Sql.Clear ;
Sql.Text := 'select * from users ';
Open;
end;
 
Sql.Text := 'delete from users where name=''aa''';
ExecSql;>>OPEN
 
如果不打补丁的话这样解决:
1、执行select以外的语句,用TADOCommand,不要用TADOQuery。如下
ADOCommand.CommandText:='Update...';
ADOCommand.Execute;
2、使用如下语句不会出错
ADOQuery1.Close;
ADOQuery1.SQL.Clear();
ADOQuery1.SQL.Add('select * from XXX where ... group by ...order by');
ADOQuery1.Open;
 
[:(!]to: jrq
我想你说我瞎说之前应该试一下:
用odbc建议一个别名,通过ado访问他,然后你先执行一个select,然后无论你是delete
还是update,insert都会出现上面那句错误:
raised exception class EAccessViolation with message 'Access
violation at address 1F453E7E in module 'msado15.dll',write of
address 0147A000'
并不是并发不并发的问题,如果你跟踪一下,就发现在execsql那句报错。
to::dylwordtop & Clark-Kidd
你们这样做是因为:如果先执行增删改然后执行select是不会错的,但是一旦执行了
select之后,增删改就会有错了,所以在delphi5下,用ado连接odbc的,一定要
分成至少两个adoquery
to::NewHuman
你说的那个问题:
to sadj但是如果这是个过程,当我反复调用这个过程时,就会出现
这样的错误提示:
Either bof or eof is ture or the current record has been deleted ,Requested operation requires a current record
这是在执行adoquery.close是出错的。不知到是为什么
duckstar解释的是对的,你去打个补丁(delphi5 sp1,sp2 and mdac2.6)
来自:duckstar, 时间:2002-3-26 14:10:00, ID:1003351
这就是需要打补丁了。
昨天下午换机器,没有来得及说

 
肯定是补丁问题
 
to sadj
大侠,你的答案我能够接受,经过我反复的实验,的确如您所说。
能否做个朋友 NewHuman_2001@21cn.com
QQ:35996878
 
to NewHuman
大虾就免了,交个朋友当然可以。这个问题是我们公司开发的时候遇到并解决的一个问题,
所以解答起来十分肯定:)
qq:20409005,不过我上班时间不上网:(
 
后退
顶部