各们高手,有个问题想请教一下:我在想做一个让两个组合框产生联动效果时当执行到
Set M_rec = Db.OpenRecordset(M_SQL)(第五行)时就出现了,实时错误’424’  要求对象   的提示,不知道是为什么,麻烦各位高手指点下迷津,Dim Db As Database、Dim M_rec As Recordset、
Dim M_SQL As String已经在别的窗体的通用中定义了,还有在Form_Load中的语句都执行正常,已经将数据库中的信息添加到组合框一(CmbPhoneName)中了谢谢大家了Private Sub CmbPhoneName_Click()
Dim PhoneID As StringM_SQL = "select id from phonesort where phonename='" + CmbPhoneName.Text + "'"
Set M_rec = Db.OpenRecordset(M_SQL)
PhoneID = M_rec!id
M_SQL = "select phonetype from phonetype where phonesortid='" + PhoneID + "'"
Set M_rec = Db.OpenRecordset(M_SQL)
M_rec.MoveLast
M_rec.movefrist
For i = 0 To M_rec.RecordCount - 1
  CmbPhoneType.AddItem M_rec!phonetype
  M_rec.MoveNext
Next
End Sub
Private Sub Form_Load()
Dim Dbpath As StringDbpath = App.Path + "\phone.mdb"     Set Db = DBEngine.Workspaces(0).OpenDatabase(Dbpath)M_SQL = "select phonename from phonesort"
Set M_rec = Db.OpenRecordset(M_SQL)M_rec.MoveLast     
M_rec.MoveFirstFor i = 0 To M_rec.RecordCount - 1
  CmbPhoneName.AddItem M_rec!phonename
  M_rec.MoveNext
Next
End Sub

解决方案 »

  1.   

    M_SQL = "select phonetype from phonetype where phonesortid='" + PhoneID + "'"这句
    你确定"phonetype"是一个表吗?
      

  2.   

    打开的记录集没有关闭试试载form_load 最后加入
    m_rec.close试试或者在
    Set M_rec = Db.OpenRecordset(M_SQL) 之前
    加入
    if m_rec.state=1 then
       m_rec.close
    end if
      

  3.   

    没错,phonetype是一个表名也是一个字段名,再说还没执行到那一步就提示错误了呀,麻烦再看看还有什么别的问题吗
      

  4.   

    Option Explicit
        Public Db As Database
        Public mWrk As Workspace
        Public M_rec As RecordsetPrivate Sub CmbPhoneName_Click()
    Dim PhoneID As StringM_SQL = "select id from phonesort where phonename='" + CmbPhoneName.Text + "'"
    Set M_rec = Db.OpenRecordset(M_SQL)
    PhoneID = M_rec!id
    M_SQL = "select phonetype from phonetype where phonesortid='" + PhoneID + "'"
    Set M_rec = Db.OpenRecordset(M_SQL)
    M_rec.MoveLast
    M_rec.movefrist
    For i = 0 To M_rec.RecordCount - 1
      CmbPhoneType.AddItem M_rec!phonetype
      M_rec.MoveNext
    Next
    End Sub
    Private Sub Form_Load()
    Dim Dbpath As StringDbpath = App.Path + "\phone.mdb" Set mWrk = CreateWorkspace("", "admin", "", dbUseJet)
     Set Db = mWrk.OpenDatabase(Dbpath)
    M_SQL = "select phonename from phonesort"
    Set M_rec = Db.OpenRecordset(M_SQL)M_rec.MoveLast
    M_rec.MoveFirstFor i = 0 To M_rec.RecordCount - 1
      CmbPhoneName.AddItem M_rec!phonename
      M_rec.MoveNext
    Next
    End Sub
      

  5.   

    RUKYO,你好,谢谢你的帮助,不过这把连Form_Load都过不去了,黄色的标记指在Form_Load上就停了,提示变量未定义小弟才学VB,还有个问题想请教一下:我的这个写法Set Db = DBEngine.Workspaces(0).OpenDatabase(Dbpath)有没有问题谢谢了
      

  6.   

    你不是说M_SQL在别的窗体已经定义了吗,如果这样在Option Explicit下加上Public M_SQL As String
      

  7.   

    Set mWrk = DBEngine.CreateWorkspace("", "admin", "", dbUseJet)Set Db = DBEngine.Workspaces(0).OpenDatabase(Dbpath,False,False)
      

  8.   

    对呀,是在别的窗体中定义了
    我一开始就把Public M_SQL As String加了一下,不然的是指向M_SQL = "select phonename from phonesort"提示变量未定义
    加了后是指在Form_Load上
      

  9.   

    还是麻烦各位高手帮忙看看吧,为什么Form_Load中的M_rec可以用,而CmbPhoneName_Click就不可以了呢,谢谢了