用VB ADO结合access数据库完成数据库的添加操作:代码如下:1:定义的一个模块函数,此函数是从书中摘录的'数据库操作函数
Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset
'传递参数,SQL传递查询语句,Msgtring传递查询信息
'自身以一个数据集的形式返回
Dim cnn As ADODB.Connection
'定义连接
Dim rst As ADODB.Recordset'定义字符串
Dim sTokens() As String
'异常处理
On Error GoTo ExecuteSQL_Error'用Split函数产生一个包含各个子串的数组
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
'rst.MoveLast
'get RecordCount
'返回记录集对象
 Set ExecuteSQL = rst
 MsgString = "查询到" & rst.RecordCount & "条记录"
 
 End IfExecuteSQL_Exit:
'清空数据集对象
Set rst = Nothing
'中断连接
Set cnn = NothingExit Function'错误类型判断
ExecuteSQL_Error:
    MsgString = "查询错误:" & Err.Description
    Resume ExecuteSQL_Exit
    
End Function'用ADO字符串方式连接数据库Public Function ConnectString() As String
'返回数据库连接
   ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Microsoft Visual Studio\VB98\db.mdb;Persist Security Info=False"
   
End Function2:这是调用上面的函数对数据添加数据库的内容;'确定 事件
Private Sub cmd1_Click()
Dim mrc As ADODB.Recordset
'定义字符串变量,表示查询语句
Dim txtSQL As String
'定义字符串变量,返回查询信息
Dim MsgText As StringSet mrc = ExecuteSQL(txtSQL, MsgText)
'添加记录
mrc.AddNew
'给每个字段赋值
mrc.Fields(0) = Trim(id.Text)'更新数据库
mrc.Update
MsgBox "添加学籍信息成功!", vbOKOnly + vbExclamation, "警告"'关闭数据集对象
mrc.CloseEnd Sub在mrc.addnew 中出现错误,提示”实时错误91,对象变量或with块变量未设置
请问各位,那里出了问题?

解决方案 »

  1.   

    在执行ExecuteSQL时发生了错误,直接跳到ExecuteSQL_Exit:处出来了,mrc对象依然指向的是个声明,没有指向一个具体的实例。
      

  2.   

    '需要在【工程】→【引用】里面找"Microsoft ActiveX Object 2.1 Library"
      

  3.   

    Set mrc = ExecuteSQL(txtSQL, MsgText)
    改为
    mrc.open txtSql+msgtext,cnn,adopendynamic,adlockoptimistic
    试试(后面的ad..,ad..可能拼错了)
      

  4.   

    To Girl1983:
    没有“Microsoft ActiveX Object 2.1 Library”,只有"Microsoft ActiveX Data Object 2.1 Library",试过但是不行。
    To seeze:
    你的方法我试过了,也不行;还是在mac.addnew中出现错误
      

  5.   

    Dim cnn As New ADODB.Connection
    '定义连接
    Dim rst As  New ADODB.Recordset
      

  6.   

    在你的代码中cnn是一个局部变量,在函数结束后cnn对象无法访问,那么mrc对象就无法访问这个连接,代码当然出错
      

  7.   

    将cnn对象在ExecuteSQL函数外定义为一个全局变量或模块级变量
    Dim cnn As New ADODB.Connection
    将ExecuteSQL中的
    Set cnn = New ADODB.Connection
    '打开连接
    cnn.Open ConnectString
    改为
    If cnn.state=adStateClosed then cnn.Open ConnectString
      

  8.   

    Set mrc = ExecuteSQL(txtSQL, MsgText)'添加记录
    mrc.AddNew'给每个字段赋值之前没有给txtsql赋值啊?
      

  9.   

    现在修改如下:
    Private Sub cmd1_Click()
    Dim mrc As ADODB.Recordset
    '定义字符串变量,表示查询语句
    Dim txtSQL As String
    '定义字符串变量,返回查询信息
    Dim MsgText As String
    txtsql="select * from student_info"'增加这一句,没有SQL语句怎么查询。呵呵……
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    '添加记录
    mrc.AddNew
    '给每个字段赋值
    mrc.Fields(0) = Trim(id.Text)'更新数据库
    mrc.Update
    MsgBox "添加学籍信息成功!", vbOKOnly + vbExclamation, "警告"'关闭数据集对象
    mrc.CloseEnd Sub