在类模块中定义全局变量
 Public CN As New ADODB.Connection
在窗体from 怎么调用 CN呢?
刚学VB

解决方案 »

  1.   

    直接用啊
    连接ACcess 数据库     dbconStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & _
               "\Data.DB" & ";Jet OLEDB:Database Password= "
        cn.open  dbconStr 
      

  2.   

    这里是VB连接数据库操作的一个比较详细的说明,希望能对你有用:
    Dim conn As New   ADODB.Connection   '创建一个 Connection 实例,在这里使用New等于将Dim和Set合并为一段代码执行
    Dim rs As ADODB.Recordset     '创建一个 Recordset 实例,不使用New 是因为,经常需要重复使用Set,因此没必要在这里使用
    Dim CnStr As String, Sql As String   '创建两个字符串变量分别存放两个集合的SQL语句代码段
    1、装载数据库(不属于Recordset集合)
    =============
    Dim FileNamw$, DbIp$, DbName$, DbUser$, DbPw$
    '以上5个字符串变量分别表示文件路径和文件名、数据库地址、数据库名、数据操作员用户名、操作员密码FileName = App.Path & "\'数据库名'"
    DbIp = "数据库地址"
    DbName = "数据库名"
    DbUser = "数据操作员用户名"
    DbPw = "操作员密码"
    '以上变量根据数据库类型的不同而不同,有可能只需要1至两个变量'1)连接Access数据库:
    '-------------------
    CnStr = "PROVIDER=microsoft.jet.oledb.3.51;persist security info =false;data source=" & FileName & ";Jet OLEDB:Database Password=" & DbPw'2)连接Oracle数据库:
    '-------------------
    CnStr = "PROVIDER=MSDAORA.1;Password=" & DbPw & ";User ID=" & DbUser & ";Data Source=" & FileName & ";Persist Security Info=True"'其中:
    'PASSWORD:       密码
    'User ID:        用户号
    'Data Source:    数据库名
    'Persist Security Info:
    'Provider:'3)连接VF的DBF库:
    '----------------
    CnStr = "PROVIDER=MSDASQL.1;Persist Security Info=False;Driver={Microsoft Visual FoxPro Driver};UID=" & DbUser & ";SourceDB=" & FileName &";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;"'4)连接SQL的数据库
    '------------------
    CnStr = "PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;uid=" & DbUser & ";pwd=" & DbPw & ";DRIVER=SQL Server;DATABASE=" & DbName & ";WSID=GQSOFT;SERVER=" &DbIP'也可以使用这段简易代码 CnStr = "Provider=SQLOLEDB;Data Source=" & DbIp & ";DATABASE=" & DbName & ";UID=" & DbUser & ";pwd=" & DbPwConn.Open cnstr '使用 Connection 集合的 Open 方法 与数据库建立连接2、Recordset集合的常用方法
    =========================='1)打开一个表
    '------------Sql = "select * from 表名" 'SQL查询语句
    Set rs = New ADODB.Recordset '新建一个实例
    rs.Open Sql, conn '使用 Open 方法打开数据库中的一个表'注意,这种打开方式只能使用 rs.MoveNext (即,向后移动行坐标)而不能像其他方向,并且不能修改数据内容
    '
    'rs.Open Sql, conn,1 '虽然只加了个“1”,但这种方法可以向任何方向移动行坐标。
    '
    '以下参数代表了这个可选值的含义
    '0 = adOpenForwardOnly (默认值)打开仅向前类型游标。 
    '1 = adOpenKeyset        打开键集类型游标。 
    '2 = adOpenDynamic       打开动态类型游标。 
    '3 = adOpenStatic        打开静态类型游标。
    '
    '虽然使用以上方法可以可以实现行坐标(游标)的任意移动,但是仍然无法写入数据。因此需要进一步的对Open 方法进行完善'rs.Open Sql, conn, 1, 3   '后面的3是确定读写权限的'以下参数代表了这个可选值的含义
    '1 = adLockReadOnly         (默认值)只读 — 不能改变数据。 
    '2 = adLockPessimistic      保守式锁定(逐个) — 在编辑时立即锁定数据源的记录。 
    '3 = adLockOptimistic       开放式锁定(逐个) — 只在调用 Update 方法时才锁定记录。 
    '4 = adLockBatchOptimistic 开放式批更新 — 用于批更新模式(与立即更新模式相对)。
    '
    '2)读写数据
    '----------
    '增加一行记录并对新记录的内容进行修改并保存可以如下写法
    rs.AddNew '增加一行记录
    rs("...")="..."     '数据读写操作
    ...
    rs.UpDate '保存写入资料,如果使用只读权限,则不能使用这个方法
    rs.Close   '这个方法用来关闭你所代开的表,如果不使用这个方法也可以,但是数据库仍然认为你在对标进行锁定,可造成数据库负担过重2、对数据进行筛选和排序
    =======================
    Sql = "select * from 表名" 'SQL查询语句
    '以上为打开一个表的所有内容Sql = "select top 50 * from 表名" 'SQL查询语句
    '以上为只打开前50行的记录Sql = "select top 50 列名1,列名2,列名5 from 表名" 'SQL查询语句
    '以上为只打开前50行的记录,并且只打开第1、2、5列数据Sql = "select * from 表名 where 列名1='" & 字段 & "'" 'SQL查询语句
    '以上为一个简单的筛选,表示打开的内容必须符合[列名1='" & 字段 & "'"]的内容
    '需要注意的是,数据库列的类型必须匹配,比如字符串类型需要以单引号括起
    '而数字类型则不能用单引号括起
    '另外SQL语句还支持通配符,例如 列名1 like '%" & 字段 & "%'" 表示包含[字段]
    '在表达式中的匹配 
    '? _(下划线) 任何单一字符 
    '* or %         零个或多个字符 
    '#              任何单一数字(0 — 9) 
    '[charlist]     任何在字符表中的单一字符 
    '[!charlist]    任何不在字符表中的单一字符 
    '注:根据数据库的不同?、_和*、%的应用有所差别,比如SQL只使用% 和 _ 分别代表多个字符和单一字符Sql = "select * from 表名 where 列名1='" & 字段 & "' ORDER BY 字段1 ASC" '对查询结果进行升序排列
    Sql = "select * from 表名 where 列名1='" & 字段 & "' ORDER BY 字段1 DESC"   '对查询结果进行降序排列
    Sql = "select * from 表名 where 列名1='" & 字段 & "' ORDER BY 字段1 DESC, ORDER BY 字段2 DESC"   '对查询结果进行多维降序排列(速度奇慢,不推荐使用)3、Recordset集合的常用属性方法
    ==============================
    rs.BOF         '是否游标在最上边
    rs.EOF         '是否游标在最下边
    rs.RecordCount     '记录集的行数(如果使用像前类型的游标,可能返回不准确)
    rs.AddNew     '新建一行记录
    rs.Update     '保存当前行被修改的记录
    rs.Delete     '删除当前行
    rs.Close     '关闭记录集4、Fields集合的一些属性的解释
    =============================
    '以下为简写,正常情况需要rs.Fileds.但是Fields属于Recordset的一个默认集合,因此可以省略rs()   '括号内可以是列名也可以是列的序号例如:rs("姓名")、rs(3) 都是是可以的rs(3).Name   '返回列名
    rs(3).Type   '返回列的类型
    rs(3).value '返回当前行的值
    rs.Fields.Count '返回列数   补充:ADO打开EXCEL示例Dim Conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim i As Integer
    Dim sql As StringPrivate Sub Form_Load()
    On Error Resume Next
    strName = "f:\book.xls"    'EXCEL文件名
    strSheetName = "sheet1"    'EXCEL表名Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strName & ";Extended Properties='Excel 8.0;HDR=Yes'"                 '连接EXCEL文件sql = "select * from [" & strSheetName & "$]"                        '打开EXCEL表
    rs.Open sql, Conn, 3, 3MsgBox rs.RecordCount
    Do Until rs.EOF
          For i = 0 To rs.Fields.Count - 1
          List1.AddItem rs.Fields.Item(i).Name
          If Not IsNull(rs.Fields.Item(i).value) Then
          List2.AddItem rs.Fields.Item(i).value
          Else
          rs.Update
          rs.Fields.Item(i).value = "peter" & i
          rs.Update
          End If
          Next i
    rs.MoveNext
    Loop
    End Sub
      

  3.   

    在类模块中如何定义全局变量 
    然后在窗体from 怎么调用 
      

  4.   

    首先你要清楚,一个自定义的类就是一个自定义的对象,所以,遵循对象的引用原则,就是使用前先实例化,在你的窗体或其他引用的地方:
    dim cObj as 你的类名
    set cObj=new 你的类名
    或者直接:dim cObj as new 你的类名
    在你的例子中这样就可以直接 cObj.open......
      

  5.   

    如果类名是 cls1则:
    dim obj1 as new cls1
    cls1.cn不过,类中定义的变量,最后在类中使用,在类外用,会增大耦合性呀。是不好的设计。
      

  6.   

    1. 你应为定义的已经是一个全局的了,所以直接用CN就是全局的。
    2. 你实在不放心就用Module1.CN这样写法,其实都一样。
      

  7.   

    Public比Global关键字晚出来,Global是为了兼容,一样的。