在一个过程中用到了两次CONN.EXCUTE SQL ,偶尔会出现有第一条CONN.EXCUTE SQL没有保存结果的情况,以下是相关代码
 
  If myCardMgr.WriteicGoudianCard() = true  Then   ‘写卡函数  操作读卡器往卡中写数据
      sql = "SELECT yhxx.用户编号,yhxx.用户号, yhxx.用户姓名,yhxx.用户类型, yhlx.单价 FROM yhxx INNER JOIN yhlx ON yhxx.用户类型 = yhlx.用户类型 Where yhxx.用户编号 = " + CStr(GoudianKahao)
      Rst1.Close
      Rst1.Open sql, Conn, adOpenKeyset, adLockPessimistic
      sql = "Insert into sdjl (用户编号,用户表号,用户号,用户姓名,用户类型,[电价(元/kWh)],[购电量(kWh)],[购电金额(元)],[调剂电量(kWh)],购电日期,售电员,现金余额,备注)" + " values (" + CStr(GoudianKahao) + " , " + CStr(pbiaohao) + " , " + CStr(Trim(Text26.Text)) + ",'" + Rst1.Fields("用户姓名") + "','" + Rst1.Fields("用户类型") + "'," + CStr(Rst1.Fields("单价")) + "," + Text16.Text + "," + Text15.Text + "," + Text14.Text + ",#" + CStr(sj(ShoudianSJ)) + "#," + CStr(userID) + "," + CStr(Text19.Text) + ",'" + Text17.Text + "')" + Text16.Text + "," + Text15.Text + "," + Text14.Text + ",'" + CStr(ShoudianSJ) + "'," + CStr(userID) + "," + CStr(Text19.Text) + ",'" + Text17.Text + "')"           ‘向数据库中写一条售电记录
      Conn.Execute sql      ‘第一处
      sql = "update yhxx set 购电次数=" + CStr(GoudianCS) + ",总购电量=总购电量+" + Text16.Text + "+" + Text14.Text + ",总购金额=总购金额+" + Text15.Text + " where 用户编号=" + CStr(GoudianKahao)                 ‘向用户信息表中更新相关字段
      Conn.Execute sql    ’第二处近期偶尔出现的一些情况,经查全是第一处CONN.EXECUTE SQL,没有保存数据(不知道是什么原因),而第二处确确实实是保存了。  如果第一处CONN.EXECUTE SQL 执行失败的话,第二处也应该不会被执行吧。
难道说CONN.EXCUTE SQL执行 的 可靠性 有问题。

解决方案 »

  1.   

    第一处CONN.EXECUTE SQL 执行失败的话,第二处也应该不会被执行吧,这句话不对。它并不是执行错误之后就阻塞在哪里了,它把SQL语句交给了数据库去执行,正确不正确它是不管的。代码接着向下走如果你想保证可靠性,可以通过存储过程,然后配合事物和数据库的Try Catch错误处理,执行成功返回1,出错就返回0.在你的程序中获取存储过程返回的值,确定是否执行成功
      

  2.   

    我的开发环境是VB6+ACCESS2003,如果不用存储过程,单独只加事务控制的话,可否杜绝这种情况的发生。
      

  3.   

    你是不是在vb代码中,有on error resume next还有,你的rs1.最好关闭之后,再用conn。execute。
      

  4.   


       Dim strSql As String
        strSql = "Insert xxxx"
        cn.Execute (strSql)
        If Not cn Is Nothing Then
            If cn.State <> adStateClosed Then cn.Close
            Set cn = Nothing
        End If
    存储过程可以用SQL语句先在程序中添加么。还有就是可以设置超时。不过还是推荐使用存储过程,这样会等待执行结束并接受返回的值也并不难。参考