Есть ли способ объединить несколько соединений ODB C, чтобы использовать один логин вместо одного для каждого соединения? - PullRequest
0 голосов
/ 27 марта 2020

У меня есть Excel 365 ProPlus, где у меня есть 1 рабочая книга с 5 отдельными подключениями ODBS. Когда я повторяю sh, все это требует от пользователя ввода одних и тех же данных для входа в систему 5 раз для каждого. Я настроил некоторый VB-код, чтобы конечный пользователь вводил свою регистрационную информацию 1 раз в форму. Затем он обновляет каждый лист данных, но я не могу передать данные формы входа в систему refre sh, потому что он просто просит их снова ввести свои данные для входа. Мне просто нужно руководство. С одной стороны, я мог установить код VB для создания подключения к данным каждый раз, когда пользователь открывает книгу. Таким образом, я могу контролировать все параметры в VBA, но, несомненно, есть способ использовать мои существующие соединения и повторно указать sh при передаче данных для входа из формы. Любые идеи?

Dim UserID As String, Pword As String, SystemAccess As String


Sub Refresh()

Dim Svr As New ADODB.Connection
Dim Rs As ADODB.Recordset

    'Control events in screen
    'ActiveSheet.Select
    'Application.ScreenUpdating = False
    'Application.EnableEvents = False

    On Error Resume Next

    If SystemAccess = "True" Then
        Svr.Open "provider=IBMDA400;data source=137.168.234.245;User ID=" & UserID & "; Password=" & Pword
    Sheets("EDV001P - PM").Select
    Range("A2").Select
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
    Range("A2").Select

    Rs.Open "Select * From EDV002P", Svr
    Sheets("EDV002P - PO").Select
    Range("A2").Select
    ActiveCell.FormulaR1C1 = Rs.RecordCount

    Rs.Open "Select * From EDV003P", Svr
    Sheets("EDV003P - AP").Select
    Range("A2").Select
    ActiveCell.FormulaR1C1 = Rs.RecordCount

    Rs.Open "Select * From EDV005P", Svr
    Sheets("EDV005P - Ind Cost").Select
    Range("A2").Select
    ActiveCell.FormulaR1C1 = Rs.RecordCount
    Else
        MsgBox "Verify your credentials"
        Call Access
    End If

    If Err Then
        MsgBox Error
        Exit Sub
    End If

    Rs.Close
    Set Rs = Nothing
    Svr.Close
    Set Svr = Nothing

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    MsgBox ("Complete, Have a Semi Awesome Day") 
End Sub```

1 Ответ

0 голосов
/ 28 марта 2020
Rs.Open "Select * From EDV002P", Svr
Sheets("EDV002P - PO").Select
Range("A2").Select
ActiveCell.FormulaR1C1 = Rs.RecordCount

будет лучше как:

Rs.Open "Select count(*) From EDV002P", Svr
Sheets("EDV002P - PO").Range("A2").Value = Rs.Fields(0).Value

Если вам просто нужен подсчет, тогда не нужно делать это на стороне клиента.

Также - если вам просто нужно обновить sh некоторые таблицы данных из базы данных, вы можете запросить данные, как вы уже сделали для ваших подсчетов, а затем перетащите их на свой рабочий лист, используя CopyFromRecordset

...