各位大哥有人看过<<Visual Basic 6.0数据库系统开发实例导航 >>这本书吗!!!请大家帮我解决一个错误:”错误是对象变量或with变量未设制”
工程--引用--引用microsoft activex data object 2.x library也打勾了.
情况是这样的:在一个添加员工信息窗口中,输入信息后,点击”保存”按钮后,就也出现了:”实时错误’91’: 错误是对象变量或with变量未设制”
”.代码如下: Option Explicit
'是否改动过记录,ture为改过
Dim mblChange As Boolean
Public txtSQL As String
Dim mrc As ADODB.Recordset
'操作的表名称
Private Sub cboItem_Change()
    '有变化设置gblchange
    mblChange = True
End Sub
Private Sub cboItem_KeyDown(KeyCode As Integer, Shift As Integer)
    EnterToTab KeyCode
End Sub
Private Sub cmdExit_Click()
    If mblChange And cmdSave.Enabled Then
        If MsgBox("保存当前记录的变化吗?", vbOKCancel + vbExclamation, "警告") = vbOK Then
            '保存
            Call cmdSave_Click
        End If
    End If
    Unload Me
End Sub
Private Sub cmdSave_Click()
    Dim intCount As Integer
    Dim txtSQL As String
    Dim MsgText As String
    Dim sMeg As String
    Dim i As Integer
   For intCount = 0 To 2
        If Trim(txtItem(intCount) & " ") = "" Then
            Select Case intCount
                Case 0
                    sMeg = "编号"
                Case 1
                    sMeg = "姓名"
                Case 3
                    sMeg = "部门"
            End Select
            sMeg = sMeg & "不能为空!"
            MsgBox sMeg, vbOKOnly + vbExclamation, "警告"
            txtItem(intCount).SetFocus
           Exit Sub
        End If
    Next intCount
   If Trim(txtItem(3) & " ") <> "" Then
        If Not IsDate(txtItem(3)) Then
            MsgBox "生日应输入日期(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
            txtItem(3).SetFocus
             Exit Sub
        Else
            txtItem(3) = Format(txtItem(3), "yyyy-mm-dd")
        End If
    End If
    If Trim(txtItem(7) & " ") <> "" Then
        If Not IsDate(txtItem(7)) Then
        MsgBox "参加工作时间应输入日期(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
            txtItem(7).SetFocus
          Exit Sub
        Else
            txtItem(7) = Format(txtItem(7), "yyyy-mm-dd")
        End If
    End If
    If Trim(txtItem(8) & " ") <> "" Then
        If Not IsDate(txtItem(8)) Then
            MsgBox "入党时间应输入日期(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
            txtItem(8).SetFocus
  Exit Sub
        Else
            txtItem(8) = Format(txtItem(8), "yyyy-mm-dd")
        End If
    End If
   If Trim(txtItem(10) & "") <> "" Then
        If Not IsDate(txtItem(10)) Then
            MsgBox "职称时间应输入日期(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
            txtItem(10).SetFocus
     Exit Sub
        Else
            txtItem(10) = Format(txtItem(10), "yyyy-mm-dd")
        End If
    End If
    If Trim(txtItem(14) & "") <> "" Then
        If Not IsDate(txtItem(14)) Then
            MsgBox "进入公司时间应输入日期(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
            txtItem(14).SetFocus
        Exit Sub
        Else
            txtItem(14) = Format(txtItem(14), "yyyy-mm-dd")
        End If
    End If
    If Trim(txtItem(15) & "") <> "" Then
        If Not IsDate(txtItem(15)) Then
            MsgBox "起薪时间应输入日期(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
            txtItem(15).SetFocus
        Exit Sub
        Else
            txtItem(15) = Format(txtItem(15), "yyyy-mm-dd")
        End If
    End If
     If Trim(txtItem(16) & "") <> "" Then
        If Not IsDate(txtItem(16)) Then
            MsgBox "调入时间应输入日期(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
            txtItem(16).SetFocus
   Exit Sub
        Else
            txtItem(16) = Format(txtItem(16), "yyyy-mm-dd")
        End If
    End If
    添加判断是否有相同的ID记录
    If gintMode = 1 Then
        txtSQL = "select * from manrecord where ygid='" & Trim(txtItem(0)) & "'"
        Set mrc = ExecuteSQL(txtSQL, MsgText)
       注:运行时错误在这里出现; If mrc.EOF = False Then
            MsgBox "已经存在此员工档案编号的记录!", vbOKOnly + vbExclamation, "警告"
            txtItem(0).SetFocus
            txtItem(0).SelStart = 0
            txtItem(0).SelLength = Len(txtItem(0))
            Exit Sub
        End If
        mrc.Close
    End If
        '先删除已有记录
    txtSQL = "delete from manrecord where ygid='" & Trim(txtItem(0)) & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    '再加入新记录
     txtSQL = "select * from manrecord"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    mrc.AddNew
     For intCount = 0 To 2
        mrc.Fields(intCount) = Trim(txtItem(intCount))
    Next intCount
     mrc.Fields(3) = Trim(cboItem.Text)
        For intCount = 3 To 18
        mrc.Fields(intCount + 1) = Trim(txtItem(intCount))
    Next intCount
    mrc.Update
     If gintMode = 1 Then
        MsgBox "记录添加成功!", vbOKOnly + vbExclamation, "警告"
        For i = 0 To 18
            txtItem(i).Text = ""
            mblChange = False
        Next i
        frmManRecord1.Show
        frmManRecord1.ZOrder 0
        frmManRecord.ShowTitle
        frmManRecord.txtSQL = "select * from manrecord"
        frmManRecord.ShowData
        frmManRecord.ZOrder 1
        
    Else
        MsgBox "记录修改成功!", vbOKOnly + vbExclamation, "警告"
        Unload Me
        frmManRecord.ShowTitle
        frmManRecord.txtSQL = "select * from manrecord"
        frmManRecord.ShowData
        frmManRecord.ZOrder 0
    End If
     gintMode = 0
End Sub
Private Sub Form_Load()
    Dim MsgText As String
    Dim intCount As Integer
    With cboItem
        .AddItem "男"
        .AddItem "女"
      End With
    If gintMode = 1 Then
        Me.Caption = Me.Caption & "添加"
        cboItem.ListIndex = 0
ElseIf gintMode = 2 Then
Set mrc = ExecuteSQL(txtSQL, MsgText)
         If mrc.EOF = False Then
            With mrc
                For intCount = 0 To 2
                    txtItem(intCount) = .Fields(intCount)
                Next intCount
                If Not IsNull(!ygsex) Then
                    cboItem = !ygsex
                End If
                For intCount = 3 To 18
                    If Not IsNull(.Fields(intCount + 1)) Then
                        txtItem(intCount) = .Fields(intCount + 1)
                    End If
                Next intCount
            End With
            txtItem(0).Enabled = False
        End If
        mrc.Close
        Me.Caption = Me.Caption & "修改"
          End If
    mblChange = False
   End Sub
Private Sub Form_Unload(Cancel As Integer)
    'MsgBox "realy want to quit?", vbOKOnly + vbExclamation, "quit"
End Sub
Private Sub txtItem_Change(Index As Integer)
    '有变化设置gblchange
    mblChange = True
End Sub
    txtItem(Index).SelStart = 0
    txtItem(Index).SelLength = Len(txtItem(Index))
End Sub
Private Sub txtItem_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
 EnterToTab KeyCode
End Sub

解决方案 »

  1.   

    mrc还没有实例化.Dim mrc As new ADODB.Recordset'这样来定义吧(加个new)
      

  2.   

    如果用Dim mrc As  ADODB.Recordset来定义的话,在执行查询前就实例化它,set mrc=new ADODB.Recordset
      

  3.   

    Set mrc = ExecuteSQL(txtSQL, MsgText)
           注:运行时错误在这里出现; If mrc.EOF = False Then
                MsgBox "已经存在此员工档案编号的记录!", vbOKOnly + vbExclamation, "警告"
                txtItem(0).SetFocus
                txtItem(0).SelStart = 0
                txtItem(0).SelLength = Len(txtItem(0))
                Exit Sub
            End If
            mrc.Close
        End If
            '先删除已有记录
        txtSQL = "delete from manrecord where ygid='" & Trim(txtItem(0)) & "'"
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        '再加入新记录
         txtSQL = "select * from manrecord"
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        mrc.AddNew
         For intCount = 0 To 2
            mrc.Fields(intCount) = Trim(txtItem(intCount))
        Next intCount
         mrc.Fields(3) = Trim(cboItem.Text)
            For intCount = 3 To 18
            mrc.Fields(intCount + 1) = Trim(txtItem(intCount))
        Next intCount
        mrc.Update
         If gintMode = 1 Then
            MsgBox "记录添加成功!", vbOKOnly + vbExclamation, "警告"
            For i = 0 To 18
                txtItem(i).Text = ""
                mblChange = False
            Next i
            frmManRecord1.Show
            frmManRecord1.ZOrder 0
            frmManRecord.ShowTitle
            frmManRecord.txtSQL = "select * from manrecord"
            frmManRecord.ShowData
            frmManRecord.ZOrder 1
            
        Else
            MsgBox "记录修改成功!", vbOKOnly + vbExclamation, "警告"
            Unload Me
            frmManRecord.ShowTitle
            frmManRecord.txtSQL = "select * from manrecord"
            frmManRecord.ShowData
            frmManRecord.ZOrder 0
        End If
         gintMode = 0
    End Sub