'这是模块代码
'为何没有数据被读到DataGrid,出没有出错提示!!!!
Public Function ConnectString() As String
ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=C:\Mowob.mdb;Persist   Security   Info=False"
End Function
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,EXECUTE", UCase$(sTokens(0))) Then
      cnn.Execute (SQL)
    MsgString = sTokens(0) & _
         " 'query successful"
   Else
      Set rst = New ADODB.Recordset
      rst.CursorLocation = adUseClient
      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 RunSQL(ByVal SQL As String, Msg As String)
 Dim cn As Connection
 On Error GoTo RunSQL_Error
 Set cn = New Connection
 cn.Open ConnectString()
 cn.Execute SQL
 MsgS = SQL & "Successful."
 Set cn = Nothing
 Exit Function
RunSQL_Error:
 MsgS = "查询错误:" & Err.Description
 Set cn = Nothing
End Function'下面是窗体代码
Option Explicit
Dim cn As New ADODB.Connection
Dim mrc As ADODB.Recordset
Dim txtSQL As StringDim MsgText As String
Private Sub Form_Load()
Set mrc = ExecuteSQL("select * from SoftClass", MsgText)
Set DataGrid.DataSource = mrc
Me.SSTab1.Tab = 0
End Sub
Private Sub SSTab1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case Me.SSTab1.Tab
Case 0
Set mrc = ExecuteSQL("select * from SoftList", MsgText)
Set DataGrid.DataSource = mrc
Case 1
Set mrc = ExecuteSQL("select * from SoftList", MsgText)
Set DataGrid.DataSource = mrc
Case 2
Set mrc = ExecuteSQL("select * from SoftList", MsgText)
Set DataGrid.DataSource = mrc
End Select
End Sub

解决方案 »

  1.   

    Dim rst As ADODB.Recordset
    一个函数内部的局部变量,会在函数结束后自动销毁,你当然读不到内容了,如果想把它作为函数的返回值,一是改成模块变量,二是改为静态变量,如:static rst As ADODB.Recordset。
      

  2.   


    Dim cn As New ADODB.Connection
    Dim mrc As ADODB.Recordset上面的位置不对,在模块里面就要申明。而不是在调用的时候才开始申明。
    你把上面的代码剪切到模块里面。
    放在
       Dim cnn As ADODB.Connection
       Dim rst As ADODB.Recordset的下面试试。 如果窗口里面有多个ExecuteSQL,多次调用,就要放到模块里面定义!