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';
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("数据库名")
试试以上两种连接字符串。
二、provider=Microsoft.Jet.OLEDB.4.0;data source="&Server.MapPath("数据库名")
试试以上两种连接字符串。
#7
个人认为直接用ado的控件连接,毕竟是集成的控件,应该不会出现延时的问题。
#8
还没结帖?楼主解决了吗 ?我也遇到相同的问题,用的是c++
#9
建议使用ado的控件连接。
#10
用ado控件先手动连接得到连接字符串,再改为程序里代码连接就行了,已用了好多年了,也没有出现你这种情况
#11
大侠能不能给我个可用的字符串示例,小女子感激不尽呐~
这个是我的:
"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';
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("数据库名")
试试以上两种连接字符串。
二、provider=Microsoft.Jet.OLEDB.4.0;data source="&Server.MapPath("数据库名")
试试以上两种连接字符串。
#7
个人认为直接用ado的控件连接,毕竟是集成的控件,应该不会出现延时的问题。
#8
还没结帖?楼主解决了吗 ?我也遇到相同的问题,用的是c++
#9
建议使用ado的控件连接。
#10
用ado控件先手动连接得到连接字符串,再改为程序里代码连接就行了,已用了好多年了,也没有出现你这种情况
#11
大侠能不能给我个可用的字符串示例,小女子感激不尽呐~
这个是我的:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\***\Output\Debug\***.mdb;Jet OLEDB:Flush Transaction Timeout=0;"
但是“Jet OLEDB:Flush Transaction Timeout=0;”这段加上之后查询都出问题了。