2015-01-02 5 views
1

Существует ли базовый способ создания соединения с базой данных в одном модуле/форме, а затем иметь возможность доступа к тому же соединению с базой данных (оставлено открытым) из другого модуля?Share adodb Соединение между модулями VBA

У меня есть форма, которая появляется с запросом SQL-сервера, а затем из нее собираются базы данных для выбора пользователем. Затем, когда я пытаюсь использовать соединение, он не подключается к объявленному db Public в другом модуле?

Это имеет смысл, и если так, то есть вокруг?

Public conn As ADODB.Connection 
Public Function openConnection(Optional DB As String) 
Dim str As String 
str = "Provider=SQLOLEDB;Server=" & Me.tbx_serverName.Text 
If (Not IsEmpty(DB)) Then 
str = str & ";Database=" & DB 
End If 
str = str & ";UID=" + tbx_dbuser.Text + " ;PWD=" + tbx_dbpass.Text + ";" 

On Error Resume Next 
    If conn Is Nothing Or conn.Status = 0 Then 
     Set conn = New ADODB.Connection 
     conn.Open str 
    End If 

If (conn.State = adStateOpen) Then 
If (Not IsEmpty(DB)) Then 
Me.lbl_connecteddb.Caption = "Connected to Database:" + DB 
Else 
Me.lbl_connecteddb.Caption = "Connected to Database:" + Me.ComboBox1.SelText 
End If 
Else 
Me.lbl_connecteddb.Caption = "Error" 
End If 

End Function 

Это моя открытая функция соединения, но я не могу получить доступ (правильно) сопп в другом модуле, IE установлен Rs = conn.execute ("SELECT * FROM Бла")

ответ

2

Вы должен быть в состоянии заявить. назначьте и откройте ADODB.Connection, а затем передайте его на другой юг через параметры (ы) второго подпрограммы.

sub Start_Here() 
    Dim str As String, conn As ADODB.Connection 

    str = "Provider=SQLOLEDB;Server=" & Me.tbx_serverName.Text 
    If (Not IsEmpty(DB)) Then 
     str = str & ";Database=" & DB 
    End If 
    str = str & ";UID=" + tbx_dbuser.Text + " ;PWD=" + tbx_dbpass.Text + ";" 

On Error Resume Next 
    If conn Is Nothing Or conn.Status = 0 Then 
     Set conn = New ADODB.Connection 
     conn.Open str 
    End If 

    Call Then_Here(conn) 

    'remember to close conn before exit 
end sub 

sub Then_Here(next_conn As ADODB.Connection) 
    debug.print next_conn.Status 
    'use open next_conn here 
end sub 
+0

благодарит за помощь! Могу ли я быть в состоянии, кроме Sub Then_Here в другом модуле, и все еще иметь возможность называть его и передавать соединение? – Lacko

+0

@ Lacko - Похоже, вам нужно провести некоторое исследование по публичной и частной подписке. – Jeeped

+0

yup, просто понял, что я спросил! извините и спасибо за помощь! – Lacko

Смежные вопросы