我是一个出学者,我在连接数据库的过程中,总是出现编译错误:无效的外部过程,我在模块中定义的数据库打开文件
Sub InitProgram()
        '初始化系统
        '打开数据库连接、设置初始变量
        Global cnExam As New ADODB.Connection
        Dim islocked As Boolean
        DbPath = SERVER.MapPath("exam.mdb")
        cnExam.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DbPath
        islocked = False
End Sub然后我在每个窗体前加上了 initprogram就会出错!  我不知道为什么,谢谢各位高手帮帮小弟。

解决方案 »

  1.   

    改一下连接字符串工程--->引用--->Microsoft ActiveX Data Object 2.x(版本号)    Dim CN   As New ADODB.Connection                '定义数据库的连接
        Dim Rs   As New ADODB.Recordset    CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & App.Path & "\student.mdb"     CN.Open
        Rs.CursorLocation = adUseClient
        Rs.Open "select * from employees", CN, adOpenDynamic, adLockOptimistic
      

  2.   

    首先应该把函数设置成公共的
    public sub InitProgram()cnExam是在模块的一个函数中声明的,即使每个窗体都加上了initprogram也不能在窗体里用,要实现你的想法,我认为要把数据连接作为参数传给initProgrampubic sub initprogram(cnExam as AdoDb.Connection)
    ...
    end sub还有你声明的islocked根本没有起到任何的作用啊,出了这个函数就不起作用了
      

  3.   

    我怎么样才能把打开数据库的文件定义到一个模块中,然后在模块中我怎么样调用他啊! 象在ASP中我可以把打开数据库的代码定义到system.asp中,然后我每个页面都包含他,在VB中我应该怎么做啊! 谢谢大家的帮助!
      

  4.   

    Global cnExam As New ADODB.Connectionpublic Sub InitProgram()
            '初始化系统
            '打开数据库连接、设置初始变量        Dim islocked As Boolean
            DbPath = SERVER.MapPath("exam.mdb")
            cnExam.Open 连接符串
            islocked = False
    End Sub
    ------------------------
    然后在每个窗体中就不用再建立连接了,直接用cnExam这个全局的连接,如:Dim Rs   As New ADODB.Recordset
    Rs.Open "select * from employees", cnExam, adOpenDynamic, adLockOptimistic
      

  5.   

    一定要引用。
    你肯定没有引用。工程--->引用--->Microsoft ActiveX Data Object 2.x(版本号)
      

  6.   

    adOpenDynamic, adLockOptimistic是什么意思啊! 我试了啊! 但是还是不行啊!出现错误:3709  数据库无法打开或已经关闭,我不定义模块,直接把数据库打开文件放入窗体中就可以用但是,放入模块中就出错,不知道为什么,谢谢大家,帮帮我吧!
      

  7.   

    ADO连接:
    工程--->引用--->Microsoft ActiveX Data Object 2.x(版本号)Option ExplicitDim WithEvents adoRS As Recordset
    Dim db As Connection
    '提数据事件
        Set db = New Connection
        db.CursorLocation = adUseClient
        db.Open"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & App.Path & "\db1.mdb;Jet OLEDB:Database Password=1234;"
    '                           ##########################################
    '打开密码是1234的Access2000数据库db1.mdb
    '不需要密码,就把Jet OLEDB:Database Password=1234;这段去掉    Set adoRS = New Recordset
        
        adoRS.Open "SELECT * FROM 表", db, adOpenStatic, adLockOptimistic
        '赋值给 DataGrid 表
        Set DataGrid1.DataSource = adoRS
        '表刷新
        DataGrid1.Refresh
    '添加事件和保存
        adoRS.AddNew
        '保存
        adoRS![字段a] = text1.Text
        adoRS![字段b] = text2.Text
        adoRS.UpdateBatch adAffectAll'删除
        adoRS.Delete
        '重新赋值给表
        adoRS.Requery
        Set DataGrid1.DataSource = adoRS
        DataGrid1.Refresh    '其他相关操作:
        '上一条
        If Not adoRS.BOF Then adoRS.MovePrevious
        If adoRS.BOF And adoRS.RecordCount > 0 Then
             '已到最后返回
             adoRS.MoveFirst
        End If
        '下一条
        If Not adoRS.EOF Then adoRS.MoveNext    '下一条
        If adoRS.EOF And adoRS.RecordCount > 0 Then
              '已到最后返回
              adoRS.MoveLast
        End If
        '第一条
        If Not adoRS.BOF Then adoRS.MoveFirst
        '最末
        If Not adoRS.EOF Then adoRS.MoveLast