Поместить результаты SQL-запроса в объект на активной пользовательской форме из модуля SQL - PullRequest
0 голосов
/ 12 июня 2018

У меня есть несколько пользовательских форм в проекте, каждая из которых имеет свое имя для пользовательской формы, но я использую единые имена для объектов.Например, каждая форма, которая должна использовать запрос SQL, имеет объект с именем «Команда» и использует тот же запрос для получения списка команд.Каждая форма также имеет один и тот же запрос в своем коде с оператором «with», измененным для отображения имени формы.То, что я хотел бы сделать, - это иметь только один экземпляр запроса в модуле под названием SQL или что-то подобное.Вот пример типа запросов, которые я сейчас использую.

Sub GetTeams()
Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Server_Name = "SDL02-VM25"
Database_Name = "PIA"
SQLStr = "select distinct[team] from dbo.[Master Staffing List]  ORDER BY [team]"
Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & vbNullString
rs.Open SQLStr, Cn, adOpenStatic
With MasterStaffing.Team
.Clear
Do
.AddItem rs![Team]
rs.MoveNext
Loop Until rs.EOF
End With
rs.Close
Cn.Close
Set rs = Nothing
Set Cn = Nothing
Exit Sub
End Sub

Могу ли я заменить «С MasterStaffing.Team» на что-то, что будет ссылаться на то, какая форма активна в настоящее время?Каждая форма, которая будет использовать этот запрос, будет иметь объект под названием Team, поэтому единственное, что действительно нужно изменить, - это ссылка на форму.Можно ли это сделать?

1 Ответ

0 голосов
/ 12 июня 2018

Передайте элемент управления, который вы хотите загрузить в качестве параметра, в сабвуфер в обычном модуле:

Например:

LoadTeams Me.Team

Сабвуфер вызывается:

Sub LoadTeams(ctrl as Object)

    Dim Cn As ADODB.Connection
    Dim Server_Name As String
    Dim Database_Name As String
    Dim SQLStr As String
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    Server_Name = "SDL02-VM25"
    Database_Name = "PIA"
    SQLStr = "select distinct[team] from dbo.[Master Staffing List]  ORDER BY [team]"
    Set Cn = New ADODB.Connection
    Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & _
             Database_Name & vbNullString
    rs.Open SQLStr, Cn, adOpenStatic
    With ctrl
        .Clear
        Do
            .AddItem rs![Team]
            rs.MoveNext
        Loop Until rs.EOF
    End With
    rs.Close
    Cn.Close
    Set rs = Nothing
    Set Cn = Nothing

End Sub

Если вы хотите еще больше улучшить свой код, выделите соединение с базой данных и сделайте запрос в отдельной функции, которая принимает строку SQL и возвращает открытый набор записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...