Dynami c запрос вызова и строка подключения - PullRequest
0 голосов
/ 02 апреля 2020
    Sub SavedConfiguration()

    Dim cnn1 As New ADODB.Connection
    Dim mrs As New ADODB.Recordset
    Dim iCols As Integer
    Const TABLE_NAME = "TableName"
    Const DRIVER = "{SQL Server}"

    Dim conf
    conf = Array("D11", "database", "D12", "server")

    Dim wb As Workbook, wsConfig As Worksheet, wsOut As Worksheet
    Dim i As Integer, strConn As String, sQry As String

    Set wb = ThisWorkbook
    Set wsConfig = Worksheets("Settings")
    Set wsOut = Worksheets("SavedConfig")

    ' construct connection string
    strConn = "driver=" & DRIVER & ";"
    For i = 1 To UBound(conf) Step 2
        strConn = strConn & conf(i) & "=" & wsConfig.Range(conf(i - 1)).Value & ";"
    Next

'    Debug.Print strConn
    sQry = Worksheets("SQL-COMMON").Range("B3").Value

    ' connect to db and run sql
    Set cnnl = New ADODB.Connection
        cnnl.ConnectionString = strConn
        cnnl.ConnectionTimeout = 30
        cnnl.Open




    wsConfig.Range("H35") = Now

    ' output
    mrs.Open sQry, cnn1
    For iCols = 0 To mrs.Fields.Count - 1
        wsOut.Cells(1, iCols + 1).Value = mrs.Fields(iCols).Name
    Next

    Worksheets("SavedConfig").Range("A2").CopyFromRecordset mrs

    wsConfig.Range("D35") = Now

    mrs.Close
    cnn1.Close
End Sub

Я отредактировал код, получаю неопределенную ошибку при его выполнении Как сделать строку подключения более динамичной c вместо жесткого кодирования, описанного выше, и получить значения из ячеек рабочего листа Excel. Как добавить код для отображения времени и даты начала последнего запуска, а также времени и даты последнего запуска выполнения запроса, который автоматически отображается в ячейках Excel.

1 Ответ

0 голосов
/ 02 апреля 2020

Создайте строку подключения, объединяя каждый параметр.

Sub Conn2SQL()

    Const TABLE_NAME = "TableName"
    Const DRIVER = "{SQL Server}"

    Dim conf
    conf = Array("A12", "database", "A13", "server", _
                 "A14", "password", "A15", "uid")

    Dim wb As Workbook, wsConfig As Worksheet, wsOut As Worksheet
    Dim i As Integer, strConn As String, sQry As String

    Set wb = ThisWorkbook
    Set wsConfig = wb.Sheets("Sheet1")
    Set wsOut = wb.Sheets("SavedConfig")

    ' construct connection string
    strConn = "driver=" & DRIVER & ";"
    For i = 1 To UBound(conf) Step 2
        strConn = strConn & conf(i) & "=" & wsConfig.Range(conf(i - 1)).Value & ";"
    Next
    'Debug.Print strConn
    sQry = "SELECT * FROM [" & TABLE_NAME & "]"

    ' connect to db and run sql
    Dim cnn1 As New ADODB.Connection, mrs As New ADODB.Recordset
    Dim iCols As Integer
    With cnn1
        .ConnectionString = strConn
        .ConnectionTimeout = 30
        .Open
    End With
    wsConfig.Range("H35") = "LAST RUN STARTED " & Now
    cnn1.Execute "USE " & wsConfig.Range(conf(0))

    ' output
    mrs.Open sQry, cnn1
    For iCols = 0 To mrs.Fields.Count - 1
        wsOut.Cells(1, iCols + 1).Value = mrs.Fields(iCols).Name
    Next
    wsOut.Cells(2, 1).CopyFromRecordset mrs 'A2
    wsConfig.Range("D35") = "LAST RUN COMPLETED " & Now

    i = wsOut.Cells(Rows.Count, 1).End(xlUp).Row
    MsgBox i & " rows added to " & wsOut.Name, vbInformation
    mrs.Close
    cnn1.Close
End Sub

Проверьте строку подключения с этим кодом

Sub testconnect()

    Dim conn As New ADODB.Connection, rs As New ADODB.Recordset, s As String
    s = "" ' put connection string here

    With conn
        .ConnectionString = s
        .ConnectionTimeout = 30
        .Open
    End With
    Set rs = conn.Execute("SELECT CURRENT_TIMESTAMP")
    MsgBox "Time is " & rs(0), vbOKOnly
    conn.Close

End Sub



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