我正在尝试编写一个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。而是说“没有记录返回”。
答案 0 :(得分:0)
只需修复-
设置rs = conn.Execute(“从REALMAST中选择REM_ACCT_NUM,其中,强制转换(文本为REM_ACCT_NUM)为'“&PID1&”'“)