Public Function executesql(ByValSQL As String, megstring As String) As ADODB.Recordset
  Dim cnn As ADODB.Connection
  Dim rst As ADODB.Recordset
  Dim sTokens() As String
  On Error GoTo executesql_error
  sTokens = Split(SQL)
  Set cnn = New ADODB.Connection
  cnn.Open connectstring
  If InStr("insert,delete,update", UCase$(sTokens(0))) Then
  cnn.Execute SQL
  msgstring = sTokens(0) & "query successful"
  Else
   Set rst = New ADODB.Recordset
   rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic
   Set executesql = rst
   msgstring = "查询到" & rst.RecordCount
   End If
executesql_exit:
   Set rst = Nothing
   Set cnn = Nothing
   Exit Function
executesql_error:
   msgstring = "查询错误:" & Err.Description
   Resume executesql_exit
   End Function
   
   
Public Function connectstring() As String
connectstring = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=manage;uid=;pwd="
End Function
Public Function test(txt As String) As Boolean
If Trim(txt) = "" Then
  testtxt = False
  Else
  testtxt = True
  End If
End Function好象是数据库连接的问题。
connectstring = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=manage;uid=;pwd="
是不是这句写得不对!数据库是access,没设用户和密码!

解决方案 »

  1.   

    connectstring = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=manage;uid=admin;pwd="
      

  2.   

    连接字符串:
    http://www.connectionstrings.com/^_^
      

  3.   

    cnnDB.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                & "Data Source=" & GetPath & "\gl.mdb" & _
                ";Persist Security Info=False"
      

  4.   

    还是不对啊,我认为还是数据库打开有问题!
    数据库连接怎么这么麻烦啊!
    谁愿意帮我弄明白着,愿意独加50分(重新追加)以示感谢!我跟踪了一下程序,老是跑到错误标号executesql_error:那个地方去了,所以我认为数据库连接有问题!
      

  5.   

    不要:Public Function connectstring() As String
    直接:
    Public Function executesql(ByValSQL As String, megstring As String) As ADODB.Recordset
      Dim cnn As ADODB.Connection
      Dim rst As ADODB.Recordset
      Dim sTokens() As String
      On Error GoTo executesql_error
      sTokens = Split(SQL)
      Set cnn = New ADODB.Connection
      cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & App.Path & "\db1.mdb;" & _
            "Persist Security Info=False"
      If InStr("insert,delete,update", UCase$(sTokens(0))) Then
      cnn.Execute SQL
      msgstring = sTokens(0) & "query successful"
      Else
       Set rst = New ADODB.Recordset
       rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic
       Set executesql = rst
       msgstring = "查询到" & rst.RecordCount
       End If
    executesql_exit:
       Set rst = Nothing
       Set cnn = Nothing
       Exit Function
    executesql_error:
       msgstring = "查询错误:" & Err.Description
       Resume executesql_exit
    End Function
      

  6.   

    你写得也有些太麻烦了。
    连接ACCESS,也要这么多语句吗?
      

  7.   

    1 连接sql
    If cn.State = adStateClosed Then
         cn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=wq_yjr;Data Source=wangqiaosoft"
           cn.Open
    End If
    2  连接网络sql
    If Conn.State = adStateClosed Then
       Conn.ConnectionString = "Provider=SQLOLEDB.1;Password=wqsoft;Persist Security Info=True;User ID=oft;Initial Catalog=soft;Data Source=222.190.7.12"
       Conn.Open
    End If3 连接accessIf cn.State = adStateClosed Then
       cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                        "" & App.Path & "\yjr.mdb;Persist Security Info=False"
       cn.Open
    End If
      

  8.   

    Private Sub Command1_Click()
    Dim mrst As New ADODB.Recordset
    Dim mReturnMsg As String
        mReturnMsg = ""
        Set mrst = executesql("select * from Table1", mReturnMsg)
        MsgBox "影响字段数" & mrst.Fields.Count & "  " & mReturnMsg
        Set mrst = Nothing
    End Sub
    Public Function executesql(ByVal SQL As String, msgstring As String) As ADODB.Recordset
      Dim cnn As ADODB.Connection
      Dim rst As ADODB.Recordset
      Dim sTokens() As String
      On Error GoTo executesql_error
      sTokens = Split(SQL)
      Set cnn = New ADODB.Connection
      cnn.Open connectstring
      If InStr("insert,delete,update", LCase$(sTokens(0))) Then
      cnn.Execute SQL
      msgstring = sTokens(0) & "query successful"
      Else
       Set rst = New ADODB.Recordset
       rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic
       Set executesql = rst
       msgstring = "查询到" & rst.RecordCount
       End If
    executesql_exit:
       Set rst = Nothing
       Set cnn = Nothing
       Exit Function
    executesql_error:
       msgstring = "查询错误:" & Err.Description
       Resume executesql_exit
       End Function
       
       
    Public Function connectstring() As String
    connectstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb" & ";Persist Security Info=False"
    End FunctionPrivate Sub Command2_Click()
    Dim mrst As New ADODB.Recordset
    Dim mReturnMsg As String
        mReturnMsg = ""
        Call executesql("delete from Table1 where Field1 = '" & "ABCD'", mReturnMsg)
        MsgBox mReturnMsg
        Set mrst = Nothing
    End Sub
      

  9.   

    有错误3处:
    1、ByValSQL  应该是  ByVal SQL2、megstring   应该是   msgstring3、UCase  应该是  LCase
      

  10.   

    可能要将Accesss数据库转换成早期版本的Access数据库
      

  11.   

    我刚才照上面说的那样,去掉错误处理。发现它的报错是:
    实时错误 ’-214767259 (80004005)
    常见错误: 无效的文件 dsn 'manage'好象是数据源的错误,但是我重新配置了一个,发现还是这样的问题。我用vb
    的  vb数据窗口向导 做窗体的时候,发现不能识别access数据库,所以只要用
    odbc去连接,发现根据向导做成的窗体的功能还是正常的,这样是不是说明manage 这个数据源没有问题?但是错误提示为什么又是上面那样的呢?
      

  12.   

    如果是数据源,连接代码:
    cnn.Open "数据源名称","用户","密码"
      

  13.   

    你程序中有三处BUG:
    1、ByValSQL  应该是  ByVal SQL2、megstring   应该是   msgstring3、UCase  应该是  LCase