我有一个操作数据库的模块
为什么用SELECT语句时可以,UPDATE不行呢。更新不了数据库
Public Function ExecuteSQL(ByVal sql As String) As ADODB.Recordset
Dim mycon As ADODB.Connection
Dim rst As ADODB.Recordset
Set mycon = New ADODB.Connection
mycon.ConnectionString = connstring
mycon.Open
Dim stokens() As String
On Error GoTo exectuesql_error
stokens = Split(sql)
If InStr("INSER,DELETE,UPDATE", UCase(stokens(0))) Then
      mycon.Execute sql
Else
  Set rst = New ADODB.Recordset
  rst.Open Trim(sql), mycon, adOpenKeyset, adLockOptimistic
 Set ExecuteSQL = rst
End If
exectuesql_exit:
  Set rst = Nothing
  Set mycon = Nothing
  Exit Function
exectuesql_error:
  Resume exectuesql_exit
End Function
Public Function connstring() As String
connstring = "provider=Microsoft.Jet.OLEDB.4.0;Data source =" & App.Path & "/xs.mdb"End Function

解决方案 »

  1.   

    Function 换成 sub 是不是更好一些啊?
    insert/update/delete时好象没有返回值啊?
      

  2.   

    Set rst = New ADODB.Recordset
    rst.locktype=adLockOptimistic  
    rst.Open Trim(sql), mycon, adOpenKeyset, adLockOptimistic
     Set ExecuteSQL = rst
    你没有设定LOCKTYPE,它默认的类型不能更新
      

  3.   

    把recordset 改成command对象吧
    再有就是要想返回记录集,执行了update/insert/delete之后再用select才能得到
    更新后的结果,它是不会直接反回记录集的
    尽量不要使用goto
      

  4.   

    '打开记录集,有返回值
    Function OpenTable(sel As String) As ADODB.Recordset
      Dim rds As New ADODB.Recordset
      rds.CursorLocation = adUseClient
      rds.Open sel, conn
      Set OpenTable = rds
    End Function'执行一句插入,删除,更新的SQL语句
    Sub ExectueSQL(strsql As String)
       Dim Cmd As New ADODB.Command
       Set Cmd.ActiveConnection = conn
       On Error Resume Next
       conn.BeginTrans
       Cmd.CommandText = strsql
       Cmd.Execute
       If conn.Errors.Count = 0 Then
          conn.CommitTrans
       Else
          conn.RollbackTrans
       End If
       Set Cmd = Nothing
    End Sub
      

  5.   

    这段代码看过好几次了,好像是某本书上的
    将你传递的变量贴出来看看,也许是你的update语句错了
      

  6.   

    我就知道用ACCESS数据库时,如果原来是NULL值,则UPDATE语句不起做用.
      

  7.   

    你在update时
    不要也想select一样用这样的语句:set rst=executesql(select语句)
    应当 execute (update语句)
    就是说update时不要把结果赋值给变量,因为update时没有返回结果。
      

  8.   

    执行了update/insert/delete之后再用select才能得到
    更新后的结果,它是不会直接反回记录集的