'这是模块代码
'为何没有数据被读到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
一个函数内部的局部变量,会在函数结束后自动销毁,你当然读不到内容了,如果想把它作为函数的返回值,一是改成模块变量,二是改为静态变量,如:static rst As ADODB.Recordset。
Dim cn As New ADODB.Connection
Dim mrc As ADODB.Recordset上面的位置不对,在模块里面就要申明。而不是在调用的时候才开始申明。
你把上面的代码剪切到模块里面。
放在
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset的下面试试。 如果窗口里面有多个ExecuteSQL,多次调用,就要放到模块里面定义!