Скрытие строки подключения ADO и набора записей

Я пытаюсь скрыть как можно больше 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 ответов

Другие вопросы по тегам