关于ADO连接ACCESS数据库延时问题,似乎有了头绪,但……

时间:2022-12-28 21:42:54
我用ADO连接ACCESS数据库,INSERT,UPDATE,DELETE操作后马上查询数据没有变化,要过几秒才能查得到。

1、通过在网上查找,找到微软的网页:http://support.microsoft.com/kb/200300/en-us
里面有说CommitTrans之后要RefreshCache(刷新缓冲池),然后马上查询可以得到同步的数据。可是微软的方法是VB的:
Dim JRO As New JRO.JetEngine
……
JRO.RefreshCache conn2
这个在DELPHI里面怎么实现呢?

2、后来又找到了OLE DB Provider Microsoft Jet oledb连接字符串格式介绍网页:
http://lidangwei528.blog.163.com/blog/static/68866474200911572941413/
连接字符串中有一个参数为:Jet OLEDB:Transaction Commit Mode(指示事务提交时 Jet 是同步还是异步向磁盘写入数据。)
可是我不知道要怎样设置这个参数的数值才是同步向磁盘写入数据,经过多次查询也没有答案。我就尝试将值设为:sync, synchronize, Immediate, Immediately, True, False, 0, 1。几个都试了一下,都会出现“找不到可安装的ISAM”错误。
我的连接字符串为:
    ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";'
                        + 'User ID=Admin;Data Source='
                        + DbfPath + '\data.mdb;'
                        + 'Mode=Share Deny None;Extended Properties="";'
                        + 'Jet OLEDB:System database="";'
                        + 'Jet OLEDB:Registry Path="";'
                        + 'Jet OLEDB:Database Password="";'
                        + 'Jet OLEDB:Engine Type=5;'
                        + 'Jet OLEDB:Database Locking Mode=1;'
                        + 'Jet OLEDB:Global Partial Bulk Ops=2;'
                        + 'Jet OLEDB:Global Bulk Transactions=1;'
                        + 'Jet OLEDB:New Database Password="";'
                        + 'Jet OLEDB:Create System Database=False;'
                        + 'Jet OLEDB:Encrypt Database=False;'
                        + 'Jet OLEDB:Don''t Copy Locale on Compact=False;'
                        + 'Jet OLEDB:Compact Without Replica Repair=False;'
                        + 'Jet OLEDB:Transaction Commit Mode=Immediate;'
                        + 'Jet OLEDB:SFP=False';
这个问题困扰我很久了,好不容易找到了点线索,现在又断了,不知道怎么办?

11 个解决方案

#1


用这个

ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+ DbfPath + '\data.mdb;Persist Security Info=False';

#2


连接串是复杂了, 你用个控件,点开ConnectionString属性, 会有提示配置连接串的, 配置好后, 可以复制出来, 配置的时候把文件名换了即可.

#3


你的TADOConnection有一个CommitTrans方法,做完修改后再调用TADOConnection.CommitTrans试下看看。

#4


正常,是不是你的查询和更新不是一个connection?

#5


connection只有一个,只是不同的计算机分别进行更新和查询.

#6


一:connstr="DBQ="+server.mappath("数据库名")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)}

二、provider=Microsoft.Jet.OLEDB.4.0;data source="&Server.MapPath("数据库名")


试试以上两种连接字符串。

#7


个人认为直接用ado的控件连接,毕竟是集成的控件,应该不会出现延时的问题。

#8


还没结帖?楼主解决了吗 ?我也遇到相同的问题,用的是c++

#9


建议使用ado的控件连接。

#10


用ado控件先手动连接得到连接字符串,再改为程序里代码连接就行了,已用了好多年了,也没有出现你这种情况

#11


引用 10 楼 ptvbs 的回复:
用ado控件先手动连接得到连接字符串,再改为程序里代码连接就行了,已用了好多年了,也没有出现你这种情况

大侠能不能给我个可用的字符串示例,小女子感激不尽呐~
这个是我的:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\***\Output\Debug\***.mdb;Jet OLEDB:Flush Transaction Timeout=0;"
但是“Jet OLEDB:Flush Transaction Timeout=0;”这段加上之后查询都出问题了。

#1


用这个

ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+ DbfPath + '\data.mdb;Persist Security Info=False';

#2


连接串是复杂了, 你用个控件,点开ConnectionString属性, 会有提示配置连接串的, 配置好后, 可以复制出来, 配置的时候把文件名换了即可.

#3


你的TADOConnection有一个CommitTrans方法,做完修改后再调用TADOConnection.CommitTrans试下看看。

#4


正常,是不是你的查询和更新不是一个connection?

#5


connection只有一个,只是不同的计算机分别进行更新和查询.

#6


一:connstr="DBQ="+server.mappath("数据库名")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)}

二、provider=Microsoft.Jet.OLEDB.4.0;data source="&Server.MapPath("数据库名")


试试以上两种连接字符串。

#7


个人认为直接用ado的控件连接,毕竟是集成的控件,应该不会出现延时的问题。

#8


还没结帖?楼主解决了吗 ?我也遇到相同的问题,用的是c++

#9


建议使用ado的控件连接。

#10


用ado控件先手动连接得到连接字符串,再改为程序里代码连接就行了,已用了好多年了,也没有出现你这种情况

#11


引用 10 楼 ptvbs 的回复:
用ado控件先手动连接得到连接字符串,再改为程序里代码连接就行了,已用了好多年了,也没有出现你这种情况

大侠能不能给我个可用的字符串示例,小女子感激不尽呐~
这个是我的:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\***\Output\Debug\***.mdb;Jet OLEDB:Flush Transaction Timeout=0;"
但是“Jet OLEDB:Flush Transaction Timeout=0;”这段加上之后查询都出问题了。