【用ADO控件连接ACCESS数据库的问题】

时间:2021-11-15 21:47:20
在delphi中我在主窗体中有一个Dbgrid显示数据库,一个AdoQuery连接access数据库,SQL语句为select * from 表名,这些都正常设置好了,现在我再用一个adoTable来向数据库中添加记录,或删除记录,
比如这样:
adotable.append
ado.fieldbyname(字段名):=xxxx
.....
adotable.post
这时我再把adoQuery刷新,或先close再open,但发现在表格dbgrid中却没有新加入的记录,如果是用adotable删除记录也是,但多刷新几次就有了,就是说好像要过五秒钟左右才生效?
这是什么原因呢?
我就想要立即就可以用adoQuery查询到,该怎么实现呢?

我也试着不用adoTable来修改或增加记录,改用adoQuery,并用Sql语句中的insert来实现,但结果是一样的,都好像不是立即生效,要过几秒钟,或多查询几次。

13 个解决方案

#1


Active := False;
Active := True;

就该可以的

我用着却没有这样的问题出现哦

http://lysoft.7u7.net

#2


adotable.delete


adotable.insert
ado.fieldbyname(字段名).value:=xxxx
.....
adotable.append
adotable.refresh

#3


最有效:

adotable.close;
adotable.open;

#4


添加后
ADOQuery.Requery

#5


其实,朋友,你只要用一个adoquery就完全可以办到了呀。因为里面有SQL语句呀。
在SQL语句上变化,比你多用一个控件要好得多呀。
或者是一个主adoquery1 一个tempadoquery 主 adoquery 是用一显示的。那个tempadoquery 是用来操作的。操作完后 adoquery1.close adoquery1.open 
就可以了呀。

推荐不要使用ADOTABLE。

#6


没碰到过,用adoquery.requery看行不行

#7


建议不要这样使用,我从来都是用insert into 来实现的

#8


都一样,插入数据时有时候会有延迟。
adoquery.active:=false;
adoquery.active:=true;
有时候也不起作用,最好还select一下

#9


问题不在于是否用adotable,
因为我即使用adoQuery更新,再用adoQuery查询也是这么一回事,就是有个延迟,
但我却不希望有这个延迟。

我想要达到的效果就是:增加一条记录,并在dbgrid中直接显示出来。但query是通过一个sql语句select查询得到的,我就用另一个adoQuery来insert记录。用这个adoQuery刷新到dbgrid

但会有延迟,不过有时又没有延迟,不知道怎么回事?
如果谁有兴趣,我把程序发出来给大家看看。

#10


我也试着不用adoTable来修改或增加记录,改用adoQuery,并用Sql语句中的insert来实现,但结果是一样的,都好像不是立即生效,要过几秒钟,或多查询几次。
------------------------
使用TADOTable或者TADOQuery,并且打开的时候使用异步方式,这样显示时候的时候会有延时,但至少不会说此时不能操作,另外你也可以设大CacheSize,这些李维的书上都讲过了可以试一试.

#11



增加索引或者改进你的系统性能是可以缓解延时的,但是要读入很多条记录的话一般都要延时的,要从根本上解决是不可能的.

#12


看看这个

http://search.csdn.net/Expert/topic/1239/1239736.xml?temp=.8733789

#13


使用一个adoConnect控件,别的都连接到这上面就解决问题了,谢谢各位!

#1


Active := False;
Active := True;

就该可以的

我用着却没有这样的问题出现哦

http://lysoft.7u7.net

#2


adotable.delete


adotable.insert
ado.fieldbyname(字段名).value:=xxxx
.....
adotable.append
adotable.refresh

#3


最有效:

adotable.close;
adotable.open;

#4


添加后
ADOQuery.Requery

#5


其实,朋友,你只要用一个adoquery就完全可以办到了呀。因为里面有SQL语句呀。
在SQL语句上变化,比你多用一个控件要好得多呀。
或者是一个主adoquery1 一个tempadoquery 主 adoquery 是用一显示的。那个tempadoquery 是用来操作的。操作完后 adoquery1.close adoquery1.open 
就可以了呀。

推荐不要使用ADOTABLE。

#6


没碰到过,用adoquery.requery看行不行

#7


建议不要这样使用,我从来都是用insert into 来实现的

#8


都一样,插入数据时有时候会有延迟。
adoquery.active:=false;
adoquery.active:=true;
有时候也不起作用,最好还select一下

#9


问题不在于是否用adotable,
因为我即使用adoQuery更新,再用adoQuery查询也是这么一回事,就是有个延迟,
但我却不希望有这个延迟。

我想要达到的效果就是:增加一条记录,并在dbgrid中直接显示出来。但query是通过一个sql语句select查询得到的,我就用另一个adoQuery来insert记录。用这个adoQuery刷新到dbgrid

但会有延迟,不过有时又没有延迟,不知道怎么回事?
如果谁有兴趣,我把程序发出来给大家看看。

#10


我也试着不用adoTable来修改或增加记录,改用adoQuery,并用Sql语句中的insert来实现,但结果是一样的,都好像不是立即生效,要过几秒钟,或多查询几次。
------------------------
使用TADOTable或者TADOQuery,并且打开的时候使用异步方式,这样显示时候的时候会有延时,但至少不会说此时不能操作,另外你也可以设大CacheSize,这些李维的书上都讲过了可以试一试.

#11



增加索引或者改进你的系统性能是可以缓解延时的,但是要读入很多条记录的话一般都要延时的,要从根本上解决是不可能的.

#12


看看这个

http://search.csdn.net/Expert/topic/1239/1239736.xml?temp=.8733789

#13


使用一个adoConnect控件,别的都连接到这上面就解决问题了,谢谢各位!