发生很奇怪的现象,看看大家有谁遇到过,给点帮助。
我使用vb的ado,调用conn.execute(sql),来更新vfp,平时使用都是正常,一点错误都没有。
但是,一旦我先进行写文件,比如我就是点个按钮,往本地写一个文件,这个操作完成后,在进行数据库操作,总是不能将数据提交到vfp里,举个例子,vfp里有2条数据,而且这个表没有主键的,(没办法,是帮人做插件,原来的表就是这样的),数据是id(111),id((222)这两条,一旦我先做完文件操作,然后我去更新数据id(111)为(333),结束后,查询出来的结果是(333),(333),也就是两条都给更新了,记住sql 文是绝对没有问题的,我去数据库看里面是(111),(222),感觉好像没有提交进去。
还有,只要我重起电脑,数据操作就是正常的,只要先写文件就会出现这样的问题。我也不知道怎么回事。
问问大家,看看谁遇到过类似的问题,给点提示或建议。代码太多了,不方便贴出来。
绝对高分。

解决方案 »

  1.   

    我使用filesystemobject,textstream来操作文件的。
      

  2.   

    不知你的数据库连接语句是怎么写的,因为vfp的数据表是以单个文件的方式存在硬盘上的。
    怀疑你是用的相对路径访问的数据库,如果没改变当前路径,数据库引擎可以在当前路径下找到数据库,一旦你向本地写一个文件,当前路径就变为你写文件的路径,再访问数据库的时候,就有可能找不到数据库。只是怀疑,希望你按此方法检查一下,或者贴一下你连接数据库的方式。
    ═══════════════════
    http://www.egooglet.com 资料、源码下载http://bbs.j2soft.cn 论坛交流
    ═══════════════════
      

  3.   

    谢谢你给我答复,现给你10分再说
    我的数据库连接字符串是
    Provider=MSDASQL.1;Driver=Microsoft Visual Foxpro Driver;SourceDB=" & App.path & "\data\" & code & ";SourceType=DBF;其中code是变得,也就是说假设code=1,那在肯定会目录App.path & "\data\1"
    在这个目录下有dbf文件,也就是我要访问的数据表还有,我刚刚又进行了研究,发现并不是写文件的时候发生,而是只要我弹出一个“打开文件”得对话框,然后点击了“打开“按钮,就会出现这种错误。我觉得你的建议非常好,希望你能跟贴,帮我解决。
    不会亏待你的。
      

  4.   

    经过测试,发现在VB调试环境下(未生成可执行文件之前),取得的app.path是正确的,打开文件之后,再取得的app.path就变成了打开文件的路径。生成可执行文件之后,进行测试,app.path不受打开文件的影响。所以,需要和你明确两点:
    1、你的数据库连接是全局的吗?(只连接一次,还是每次使用的时候都重新链接?)
    因为如果是每次使用时链接,app.path就会变化;2、你是在VB调试环境下测试的吗?如果是,建议你生成执行文件试一下;
      

  5.   

    非常感谢你。
    对于你的两点:
    1.每次使用的时候都重新链接,现在是增加一条数据,就在"\data"下,新建一个目录,目录名字为该条数据的code名,在"\data\code"下就会有dbf文件,当然该dbf文件里只会有一条数据
    (没办法,客户就要求你这样,真是麻烦)
    2.是在VB调试环境下测试的。针对你说的,昨晚我这样测试的,先弹出打开对话框,选择一个文件打开,然后再打印app.path,发现打印结果就是我的工程的路径,并没有改为我打开文件的那个路径,这是怎么回事,你是怎么测试的。今晚会按你的方法去测试的。
      

  6.   

    那就对了,与我猜想的一致。你是在每次使用的时候都重新链接了数据库,并且是在VB调试环境下测试的。如果在VB调试环境下测试,文件打开对话框会影响app.path的值(我测试是这样),你编译成可执行文件试一下吧。
      

  7.   

    学习,长见识了!
    我觉得可以定义一个全局变量sAppPath as string
    程序启动的时候让sAppPath =App.path 
    然后改为
    Provider=MSDASQL.1;Driver=Microsoft Visual Foxpro Driver;SourceDB=" & sAppPath & "\data\" & code & ";SourceType=DBF;
      

  8.   

    一个一个排除,应该可以找出原因。调试方便是VB的一大优点。不要把脑筋都放在app.path上,查查你的数据库query,insert,connection String,cursor,打开方式等等。
      

  9.   

    to:cuizm(射天狼 http://www.j2soft.cn/你好,为什么我打完包,安装时出现,“命令行选项语法错误”
    我都要崩溃了,怎么解决阿
    定义一个全局变量sAppPath as string
    程序启动的时候让sAppPath =App.path 
    这个也不好用的。只有在弹出打开对话框,选择一个文件打开后,就出现数据错误。
    帮帮我啊
      

  10.   

    Public Function query(sqlQuery As String) As ADODB.Recordset
    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
      

  11.   

    ' ***************************************************
    ' 获取连接字符串                                    *
    ' ***************************************************
    Private Function getConnStr() As String
        getConnStr = "Provider=MSDASQL.1;Driver=Microsoft Visual Foxpro Driver;SourceDB=" & gAppPath & "\data\" & code & ";SourceType=DBF;"
    End Function
      

  12.   

    再重新说明一下你的问题吧:
    1、你的程序执行时,数据库未出现什么链接错误之类的提示信息?
    2、问题只是SQL语句执行之后,查询出来的结果不对,并且只是程序查询出来的数据不对,而实际数据里面的数据是正确的(未更新)。是这样吗?
    ═══════════════════
    http://www.egooglet.com 资料、源码下载http://bbs.j2soft.cn 论坛交流
    ═══════════════════
      

  13.   

    要不你加我QQ交流吧
    QQ:906640
      

  14.   

    先把On Error GoTo XXX这样的语句删掉再试吧
    很有可能是执行的时候出错了,然后执行了conn.RollbackTrans这句