说不清楚。 来一个例子分析。我想建立一个数据管理系统。 有多个窗口, 因为数据库要不停的动态更新, 所以我想把connection 跟 recordset 都在 模块里声明好, 然后在窗口里直接用。以下是我自己写的程序的一部分。首先是窗口部分:
...
Private Sub HScroll1_Change()rsp.MoveFirst
rsa.MoveFirstrsp.find "ID= " & HScroll1.Value & ""
rsa.find "ID= " & rsp.Fields!Head.Value & ""
LeaderN = rsp.Fields!Head.Value
Text1(0).Text = rsa.Fields!Name.Value
Text1(1).Text = rsp.Fields!Position.Value
Text1(3).Text = RepAbs(rsp.Fields!Salary.Value)
Text1(5).Text = rsp.Fields!Office.Value
End Sub模块部分:
Public Function cn()       
  
  Dim cnn  As New ADODB.Connection
  cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db1.mdb"
  Set cn = cnnEnd FunctionPublic Function rsp()   Dim rspt As New ADODB.Recordset
  rspt.Open "select   *   from   power", cn, adOpenDynamic, adLockOptimistic, adCmdText
  Set rsp = rsptEnd FunctionPublic Function rsa() 
  Dim rsat As New ADODB.Recordset
  rsat.Open "select   *   from   actors", cn, adOpenDynamic, adLockOptimistic, adCmdText
  Set rsa = rsatEnd Function  我发现无论怎么按scrollbar, 始终停留在第一条记录。我按F8 一步步的追踪, 发现两个问题:1. 主窗口的命令里, 每次调用rsp 跟rsa, 就会重新连接一次数据库,效率奇低 2. rsp.find 跟rsa.find 没有任何效果。 请问应该怎么解决这两个问题? 有没有效率高一点的写法?  

解决方案 »

  1.   

    一般来说,connection连接只做一次,声明一个全局变量的conn来连接,这样在系统中都可以使用此全局变量,但rdcordset是根据查询条件需要每次查询时都执行
      

  2.   

    首先,把cn函数删掉
    然后,在模块里面定义一个全局变量cn
    public cn as new ADODB.Connection
    然后在模块里面定义一个过程:
    sub main
       cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db1.mdb" 
       主窗体.show
    end sub然后设置工程属性:
    菜单“工程”->“工程属性”->“通用”->“启动对象”->"sub main"
      

  3.   

    是啊 你干么用函数在模块中直接声明:
    Private cnn As ADODB.Connection                               '数据库连接对象
    Private Rst As ADODB.Recordset                                '数据库记录在需要的时候建立数据库连接,
    set cnn = New ADODB.Connection
    cnn.open……然后根据条件,进行查询set Rst = New ADODB.Recordset
    Rst.open ……
    Rst.close
    进行下一个查询
    ……
    set Rst = New ADODB.Recordset
    Rst.open ……
    Rst.close所有的操作完成后,关闭数据库连接
    cnn.close直到所有的操作都进行完了再关闭连接
      

  4.   

    谢谢各位。 公共connection 我以前搞过,我这个写法就是抄别人的。我的问题是有没有办法声明公共的recordset。 因为窗体比较多,对数据库操作也很频繁。 每次都要声明一下New recordset 很容易搞混或者忘了关闭。
      

  5.   

    set rs=New recordset 
    set rs=nothing
    这是创建和释放rs.open
    rs.close
    这是打开和关闭创建和释放可以全局来做
    打开和关闭必须每次做
      

  6.   

    在moulde中声明表全局变量的conn来连接,并open即可