EXcel宏不返回SQL

时间:2018-12-27 14:40:51

标签: sql excel vba

我正在尝试编写一个Excel宏,该宏将从SQL数据库返回结果。该宏要求用户输入,对其进行格式化,然后将其插入查询中。问题出在某处-我收到一条错误消息,指出未找到任何行,但是当我使用SQL(带有格式化数字)运行查询时,它可以正确执行。有人可以告诉我哪里出了问题吗?

我猜我的语法是错误的,并且SQL将'&PID1'解释为文本而不是变量。

Sub SQLExcelCon()

    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sConnString As String
    Dim PID_Raw As String
    Create the connection string.
    sConnString = "Provider=SQLNCLI11;" & _
    "server=pasql1\internal;database=Vision;Integrated Security=SSPI;"

    ' Create the Connection and Recordset objects.'
    Set conn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    ' Open the connection and execute.'
    conn.Open sConnString

    ' Ask for user input and fromat it for SQL '
    PID_Raw = InputBox(prompt:="enter parcel id")
    PID1 = Left(PID_Raw, 2) & "-" & Mid(PID_Raw, 3, 2) & "-" & Mid(PID_Raw, 5, 2) & "-" & Mid(PID_Raw, 7, 4) & "-" & Mid(PID_Raw, 11, 5) & "-" & Mid(PID_Raw, 16, 4)

    ' Execute query '
    Set rs = conn.Execute("select REM_ACCT_NUM from REALMAST where REM_ACCT_NUM like ' " & PID1 & "'")
    MsgBox ("select REM_ACCT_NUM from REALMAST where REM_ACCT_NUM like " & PID1)

    ' Check we have data. '
    If Not rs.EOF Then
        ' Transfer result. '
        Sheets(1).Range("B3").Value = "PARCEL ID"
        Sheets(1).Range("B4").CopyFromRecordset rs

        ' Close the recordset '
        rs.Close

    Else
        MsgBox "Error: No records returned.", vbCritical
    End If

    Sheets(1).Range("C20").Value = PID1

    ' Clean up '
    If CBool(conn.State And adStateOpen) Then conn.Close
    Set conn = Nothing
    Set rs = Nothing
End Sub

用户想要写一个数字,例如1125200020000000170。如果查询在数据库中,则查询应返回11-25-20-0020-00000-0170。而是说“没有记录返回”。

1 个答案:

答案 0 :(得分:0)

只需修复-

设置rs = conn.Execute(“从REALMAST中选择REM_ACCT_NUM,其中,强制转换(文本为REM_ACCT_NUM)为'“&PID1&”'“)