VBA - Как вызвать соединение с базой данных SQL из отдельного модуля - PullRequest
0 голосов
/ 29 мая 2019

Я копался в этом, но я не мог найти решение, связанное с этим. У меня есть соединение с базой данных SQL в отдельном модуле (модуль 5), который я хотел вызывать всякий раз, когда мне нужно подключиться к моей базе данных из другого модуля / формы. Это для простоты и единственного обновления, поэтому мне не нужно проходить через каждую функцию, чтобы обновить соединение.

Соединение с базой данных (Module5)

Function dbconnection()
Dim cnn As New ADODB.connection
Dim rst As New ADODB.Recordset

cnn.Open = "Driver={SQL Server};Server=HOLAP- 
IST9985\CASETRACKER;Database=casetracker; Trusted_Connection=Yes"


cnn.Close
Set cnn = Nothing

End Function

И здесь мне нужно вызвать соединение (Module2) - отправляет запрос в базу данных и отображает результат в моем списке.

Function po_maintenance()

Dim cnn As New ADODB.connection
Dim rst As New ADODB.Recordset
Set rst = New ADODB.Recordset


rst.Open "SELECT * FROM po_numberstbl ORDER BY [PO_Number];", cnn, 
adOpenStatic
If rst.EOF = False Then
i = 0

With maintenance_frm.maintenance_list
.Clear
Do
    .AddItem
    .List(i, 0) = rst![po_number]
    .List(i, 1) = rst![purpose]
    .List(i, 2) = rst![Vendor]
    .List(i, 3) = rst![id]

    i = i + 1
    rst.MoveNext
Loop Until rst.EOF
End With
Else
End If

End Function

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Итак, вот что я придумала, чтобы решить проблему с подключением ..

DbConnection:

Public sqlt As String
Function dbconnection() As ADODB.connection
Dim cnn As New ADODB.connection
Dim rst As New ADODB.Recordset

sqlt = "Driver={SQL Server};Server=HOLAP- 
IST9985\CASETRACKER;Database=storecons; Trusted_Connection=Yes"
End Function

Вызов dbconnection:

Function po_maintenance()

Dim cnn As New ADODB.connection
Dim rst As New ADODB.Recordset
Set rst = New ADODB.Recordset

Set cnn = Module5.dbconnection()
cnn.Open sqlt


rst.Open "SELECT * FROM po_numberstbl ORDER BY [PO_Number];", cnn, 
adOpenStatic
If rst.EOF = False Then
i = 0

With maintenance_frm.maintenance_list
.Clear
Do
    .AddItem
    .List(i, 0) = rst![po_number]
    .List(i, 1) = rst![purpose]
    .List(i, 2) = rst![Vendor]
    .List(i, 3) = rst![id]

    i = i + 1
    rst.MoveNext
Loop Until rst.EOF
End With
Else
End If
End Function
0 голосов
/ 29 мая 2019

Вы можете вернуть соединение из вашей функции:

Function dbconnection() as ADODB.connection

    Dim cnn As New ADODB.connection

    cnn.Open = "Driver={SQL Server};Server=HOLAP-IST9985\CASETRACKER;" & _
               "Database=casetracker; Trusted_Connection=Yes"

    Set dbconnection = cnn

End Function

И затем использовать его:

Function po_maintenance()

Dim cnn As New ADODB.connection
Dim rst As New ADODB.Recordset
Set rst = New ADODB.Recordset

Set cnn = dbconnection()
rst.Open "SELECT * FROM po_numberstbl ORDER BY [PO_Number];", cnn, 
adOpenStatic
If rst.EOF = False Then
'etc etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...