发生很奇怪的现象,看看大家有谁遇到过,给点帮助。
我使用vb的ado,调用conn.execute(sql),来更新vfp,平时使用都是正常,一点错误都没有。
但是,一旦我先进行写文件,比如我就是点个按钮,往本地写一个文件,这个操作完成后,在进行数据库操作,总是不能将数据提交到vfp里,举个例子,vfp里有2条数据,而且这个表没有主键的,(没办法,是帮人做插件,原来的表就是这样的),数据是id(111),id((222)这两条,一旦我先做完文件操作,然后我去更新数据id(111)为(333),结束后,查询出来的结果是(333),(333),也就是两条都给更新了,记住sql 文是绝对没有问题的,我去数据库看里面是(111),(222),感觉好像没有提交进去。
还有,只要我重起电脑,数据操作就是正常的,只要先写文件就会出现这样的问题。我也不知道怎么回事。
问问大家,看看谁遇到过类似的问题,给点提示或建议。代码太多了,不方便贴出来。
绝对高分。
我使用vb的ado,调用conn.execute(sql),来更新vfp,平时使用都是正常,一点错误都没有。
但是,一旦我先进行写文件,比如我就是点个按钮,往本地写一个文件,这个操作完成后,在进行数据库操作,总是不能将数据提交到vfp里,举个例子,vfp里有2条数据,而且这个表没有主键的,(没办法,是帮人做插件,原来的表就是这样的),数据是id(111),id((222)这两条,一旦我先做完文件操作,然后我去更新数据id(111)为(333),结束后,查询出来的结果是(333),(333),也就是两条都给更新了,记住sql 文是绝对没有问题的,我去数据库看里面是(111),(222),感觉好像没有提交进去。
还有,只要我重起电脑,数据操作就是正常的,只要先写文件就会出现这样的问题。我也不知道怎么回事。
问问大家,看看谁遇到过类似的问题,给点提示或建议。代码太多了,不方便贴出来。
绝对高分。
怀疑你是用的相对路径访问的数据库,如果没改变当前路径,数据库引擎可以在当前路径下找到数据库,一旦你向本地写一个文件,当前路径就变为你写文件的路径,再访问数据库的时候,就有可能找不到数据库。只是怀疑,希望你按此方法检查一下,或者贴一下你连接数据库的方式。
═══════════════════
http://www.egooglet.com 资料、源码下载http://bbs.j2soft.cn 论坛交流
═══════════════════
我的数据库连接字符串是
Provider=MSDASQL.1;Driver=Microsoft Visual Foxpro Driver;SourceDB=" & App.path & "\data\" & code & ";SourceType=DBF;其中code是变得,也就是说假设code=1,那在肯定会目录App.path & "\data\1"
在这个目录下有dbf文件,也就是我要访问的数据表还有,我刚刚又进行了研究,发现并不是写文件的时候发生,而是只要我弹出一个“打开文件”得对话框,然后点击了“打开“按钮,就会出现这种错误。我觉得你的建议非常好,希望你能跟贴,帮我解决。
不会亏待你的。
1、你的数据库连接是全局的吗?(只连接一次,还是每次使用的时候都重新链接?)
因为如果是每次使用时链接,app.path就会变化;2、你是在VB调试环境下测试的吗?如果是,建议你生成执行文件试一下;
对于你的两点:
1.每次使用的时候都重新链接,现在是增加一条数据,就在"\data"下,新建一个目录,目录名字为该条数据的code名,在"\data\code"下就会有dbf文件,当然该dbf文件里只会有一条数据
(没办法,客户就要求你这样,真是麻烦)
2.是在VB调试环境下测试的。针对你说的,昨晚我这样测试的,先弹出打开对话框,选择一个文件打开,然后再打印app.path,发现打印结果就是我的工程的路径,并没有改为我打开文件的那个路径,这是怎么回事,你是怎么测试的。今晚会按你的方法去测试的。
我觉得可以定义一个全局变量sAppPath as string
程序启动的时候让sAppPath =App.path
然后改为
Provider=MSDASQL.1;Driver=Microsoft Visual Foxpro Driver;SourceDB=" & sAppPath & "\data\" & code & ";SourceType=DBF;
我都要崩溃了,怎么解决阿
定义一个全局变量sAppPath as string
程序启动的时候让sAppPath =App.path
这个也不好用的。只有在弹出打开对话框,选择一个文件打开后,就出现数据错误。
帮帮我啊
On Error GoTo DBError ' 执行查询操作
conn.ConnectionString = getConnStr()
conn.Open
Set query = conn.Execute(sqlQuery)
Exit Function
DBError: Call closeConnection
Set query = Nothing
' 错误处理
MsgBox "系统错误,请重新启动程序!", vbOKOnly + vbCritical + vbDefaultButton1, "系统错误"
End Function
Public Function update(sqlUpdate As String) As Integer
Dim rows As IntegerOn Error GoTo DBError ' 执行更新操作
conn.ConnectionString = getConnStr()
conn.Open
conn.BeginTrans
Call conn.Execute(sqlUpdate, rows, adCmdText)
' 更新成功
If rows > 0 Then
conn.CommitTrans
End If
update = rows
Exit Function
DBError:
conn.RollbackTrans
Call closeConnection
update = -1 ' 错误处理
MsgBox "系统错误,请重新启动程序!", vbOKOnly + vbCritical + vbDefaultButton1, "系统错误"
End Function
' 获取连接字符串 *
' ***************************************************
Private Function getConnStr() As String
getConnStr = "Provider=MSDASQL.1;Driver=Microsoft Visual Foxpro Driver;SourceDB=" & gAppPath & "\data\" & code & ";SourceType=DBF;"
End Function
1、你的程序执行时,数据库未出现什么链接错误之类的提示信息?
2、问题只是SQL语句执行之后,查询出来的结果不对,并且只是程序查询出来的数据不对,而实际数据里面的数据是正确的(未更新)。是这样吗?
═══════════════════
http://www.egooglet.com 资料、源码下载http://bbs.j2soft.cn 论坛交流
═══════════════════
QQ:906640
很有可能是执行的时候出错了,然后执行了conn.RollbackTrans这句