【发布时间】:2021-12-30 19:38:13
【问题描述】:
我正在尝试将 CASE 函数放入一些 SQL 代码中,但无法使其运行。在 CASE 函数之前,一切都运行良好,每当插入该函数时,都会出现调试错误。我在制作这个程序时得到了帮助,所以我希望这只是一个我不知道的简单错误。这是根据满足条件从 2 个大型 Excel 表中提取选择内容。 CASE 函数确定一个值是 > 还是
见下面的代码:
Dim fPath As String
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset
Dim sPath As String, rng1 As Range, rng2 As Range, SQL As String
fPath = ThisWorkbook.FullName 'workbook must be saved somewhere...
'connect to the workbook on disk
oConn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
"DBQ=" & fPath & ";"
'select some records which match between lists (zipccode and subdivision)
' and with the entered criteria (price, SQFT)
SQL = " select n.*, o.* from [OldList$] o, [NewList$] n " & _
" where n.zipcode = o.zipcode and left(n.Subdivision, 6) = left(o.Subdivision, 6)" & _
" and (n.listprice - o.listprice) between " & shtCriteria.Range("C4").Value & " and " & shtCriteria.Range("D4").Value & _
" and (n.sqft - o.sqft) between " & shtCriteria.Range("C6").Value & " and " & shtCriteria.Range("D6").Value & _
" and CASE " & _
" WHEN n.lot > 12000 " & _
" THEN o.lot between n.lot + n.lot* " & shtCriteria.Range("C8").Value & " and n.lot + n.lot* " & shtCriteria.Range("D8").Value & " " & _
" ELSE (n.lot - o.lot) between " & shtCriteria.Range("C9").Value & " and " & shtCriteria.Range("D9").Value & _
" END "
Set oRS = oConn.Execute(SQL) 'run the query
【问题讨论】:
-
Case 不是一个函数,它是一个表达式。您的案例表达式格式不正确,您需要查看特定 RDBMS 的文档。理想情况下,编辑您的问题以包含 actual SQL 语句,而不是动态构造它的代码。并查看Bad habbits to kick
-
改用括号和 AND/OR 逻辑运算符?
-
还考虑使用参数(以及 SQL 中的
?占位符)而不是连接未经验证的输入(如果单元格包含意外值、错误或..一些 SQL 语句怎么办?);您将调用ADODB.Command实例的Execute方法,而不是直接关闭连接。 -
谢谢大家,我试试看。仍在尝试在这里学习基础知识。欣赏它