Получение нескольких значений Excel для SQL-запроса VBA Где - PullRequest
0 голосов
/ 09 октября 2018

Я хочу создать импорт нескольких значений ячеек (порядковых номеров) в запрос SQL.

Мне удалось написать код, и он работает только для одного значения ячейки.

Например, приведенный ниже код перетаскивает номер заказа из ячейки D4 в предложение where, и это работает, однако я стремлюсь вытащить из D4 в DXX.

Таким образом, это будет 20 или 100 номеров заказовв предложении where.

Я искал часы и не мог найти решение.

Я чувствую, что я так близок ... но пока так далеко.

Этострока STRDATA, с которой мне нужна помощь.

Кроме того, под предложением where, я думаю, вместо Field = номер заказа, он должен быть Field in (номер заказа1, номер заказа2, номер заказа3)

Спасибо

Sub Import()

    Dim Cn As ADODB.Connection
    Dim Server_Name As String
    Dim Database_Name As String
    Dim User_ID As String
    Dim Password As String
    Dim SQLStr As String
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    Dim Strdata As String

    Strdata = Worksheets("Loan Level").Range("D4").Value
    Server_Name = " "
    Database_Name = ""
    User_ID = ""
    Password = ""
    SQLStr = "SELECT FIELDS FROM TABLES WHERE FIELD= '" & Strdata & "'"

    Set Cn = New ADODB.Connection
    Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & _
    ";Uid=" & User_ID & ";Pwd=" & Password & ";"

    rs.Open SQLStr, Cn, adOpenStatic

    With Worksheets("sheet1").Range("a1:z500")
        .ClearContents
        .CopyFromRecordset rs
    End With
     '
    rs.Close
    Set rs = Nothing
    Cn.Close
    Set Cn = Nothing
End Sub

1 Ответ

0 голосов
/ 09 октября 2018

Да, IN было бы лучше здесь.

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

Sub Test()

    Dim rRange As Range
    Dim rCell As Range
    Dim sWHEREclause As String
    Dim SQLStr As String

    Set rRange = Sheet1.Range("D4:DXX4")

    For Each rCell In rRange
        sWHEREclause = sWHEREclause & "'" & rCell & "',"
    Next rCell

    'Remove the last comma.
    sWHEREclause = Left(sWHEREclause, Len(sWHEREclause) - 1)

    SQLStr = "SELECT FIELDS FROM TABLES WHERE FIELD IN (" & sWHEREclause & ")"

    Debug.Print SQLStr

End Sub  

Это создаст строку SQLкак (я сократил диапазон ячеек):
SELECT FIELDS FROM TABLES WHERE FIELD IN ('A','B','C','D','E','F')

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