我在模块module1里加“Public cn As Connection”了
为什么还要在每个控件里都重复写上
“Set cn = New ADODB.Connection
  cn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Passwor=后面省略
 cn.Open”
否则,一执行“rs1.open"select......",cn, adOpenDynamic, adLockOptimistic, adCmdText”
就报连接未打开,好麻烦啊!请高手指点

解决方案 »

  1.   

    Public cn As Connection只是定义了变量类型,Set cn = New ADODB.Connection是使用时创建新的连接。这是我个人的理解,不知道专业说法是怎么样的。还请注意:每次用完后注意关闭。或者在程序退出前要关闭它。
      

  2.   

    MSDN:Dim、Private、Public、ReDim以及 Static 语句都只声明了引用对象的变量。在用 Set 语句将变量赋为特定对象之前,该变量并没有引用任何实际的对象。
      

  3.   

    我同意楼上的说法,如果你觉得麻烦,你可以把建立新的数据库连接,做到类模块里面,这样可能方便一些,仅供参考:
    '类模块
    Dim cn As ADODB.Connection
    Public Function Opencn(Optional ByVal strcn As String) As ADODB.Connection    
        '如果连接字符串为空,使用默认字符串连接数据库
        If strcn = "" Then
            strcn = "Provider=OraOLEDB.Oracle.1;Passwor=后面省略"
        End If   
        Dim cn As New ADODB.Connection
        cn.ConnectionString = strcn
        cn.Open
        Set Opencn = cn    
    End Function'Form 声明部分
    Option Explicit
    Dim cn As New ADODB.Connection'在你的程序中的调用
    Set cn = Opencn
      

  4.   

    Public cn As New ADODB.Connection
    Public rs1 As New ADODB.RecordSet