隐藏ADO连接字符串和记录集

时间:2014-07-24 12:31:35

标签: vba excel-vba ado data-hiding excel

我试图尽可能严格地隐藏ADO例程中代码的Excel-vba部分中的内容。

第1单元:

Sub control()

Const strConn As String = _
    "PROVIDER=SQLOLEDB.1;" & _
    "PASS******=xxxxxxxxxxxxxxxxx;" & _
    "PERSIST SECURITY INFO=True;" & _
    "USER ID=xxxxxxxxxxxxxxxxx;" & _
    "INITIAL CATALOG=xxxxxxxxxxxxxxxxx;" & _
    "DATA SOURCE=xxxxxxxxxxxxxxxxx;" & _
    "USE PROCEDURE FOR PREPARE=1;" & _
    "AUTO TRANSLATE=True;" & _
    "CONNECT TIMEOUT=0;" & _
    "COMMAND TIMEMOUT=0" & _
    "PACKET SIZE=4096;" & _
    "USE ENCRYPTION FOR DATA=False;" & _
    "TAG WITH COLUMN COLLATION WHEN POSSIBLE=False"

Dim c As ADODB.Connection
Dim r As ADODB.Recordset

Set c = New ADODB.Connection
c.ConnectionTimeout = 0
c.Open strConn

Set r = New ADODB.Recordset
r.ActiveConnection = c

Call someADOproc(r)

End Sub

第2单元:

Sub someADOproc(ByRef ar As Object)

ar.Open _
    "SELECT top 1 Operator " & _
    "FROM   xxxxxxxxx.dbo.xxxxxxxxxxxx "

MsgBox ar.Fields(0).Value

End Sub

例程control中变量的严格范围让我感到惊讶ByRef实际上有效,并且该变量在位于不同模块中的例程someADOproc中可用吗?我原以为这会失败。

ByVal也有效 - 这是预期的,因为它传递了记录集r的副本?

我对这些概念的理解缺少什么?

我应该使用ByVal还是ByRef

0 个答案:

没有答案