Скрытие строки подключения 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
?