Как создать строку запроса SQL, используя объект ячейки в качестве критерия? - PullRequest
0 голосов
/ 21 января 2020

Код ниже:

If Total_rows_NMRDTRSummary > 1 Then
Dim objConnection As Variant
Dim objRecordset As Variant
Dim connectionString As String
        Const adOpenStatic = 3
        Const adLockOptimistic = 3
        Const adCmdText = &H1

        Set objConnection = CreateObject("ADODB.Connection")
        Set objRecordset = CreateObject("ADODB.Recordset")

        connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Sun-Lap\Desktop\Payroll Computations (Template).xlsm; Extended Properties=""Excel 8.0; HDR=YES"";"
        objConnection.Open connectionString

    For i = 2 To Total_rows_NMRDTRSummary
        objRecordset.Open "Select * FROM [N-MR Data$] WHERE Person = " & ThisWorkbook.Worksheets("N-MR DTR Summary").Cells(i, 1) & " AND Date = " & ThisWorkbook.Worksheets("N-MR DTR Summary").Cells(i, 2), objConnection, adOpenStatic, adLockOptimistic, adCmdText

        Do Until objRecordset.EOF
            Debug.Print objRecordset.Fields.Item("Date"), _
                objRecordset.Fields.Item("Person")
            objRecordset.MoveNext
        Loop
    Next i
End If

Проблема связана со строкой SQL в objRecordset.Open "Select * FROM [N-MR Data$] WHERE Person = " & ThisWorkbook.Worksheets("N-MR DTR Summary").Cells(i, 1) & " AND Date = " & ThisWorkbook.Worksheets("N-MR DTR Summary").Cells(i, 2), objConnection, adOpenStatic, adLockOptimistic, adCmdText

Строка работает, если я жестко закодирую строку, такую ​​как: objRecordset.Open "Select * FROM [N-MR Data$] WHERE Person = 'JOHN'"

Но если сделать это таким образом, чтобы я мог включить все oop, он выдаст ошибку: objRecordset.Open "Select * FROM [N-MR Data$] WHERE Person = " & ThisWorkbook.Worksheets("N-MR DTR Summary").Cells(i,1)

Сообщение об ошибке:

enter image description here

Я думаю, что объединение строк обычным способом в VBA не выполняется в строке запроса SQL? Как правильно сделать это так, чтобы я мог кормить всех oop в запросах?

1 Ответ

1 голос
/ 21 января 2020

Похоже, вы забыли о одинарных кавычках для параметра

Person = '" & ThisWorkbook.Worksheets("N-MR DTR Summary").Cells(i, 1) & "' AND...

Для параметра даты вы должны сделать то же самое

...