我在分割表单上有一个文本框[ScanItem],它带有两个不同的条形码值,Works真的很光滑!
字母数字,Len 11
数字,Len 12
我的更新查询有效,但仅适用于一个WHERE条件。我希望使用Len功能来组合WHERE功能,但无法使其工作。
更新字母数字Len 11的查询(例如:019-WMD-001):
strSQL = "UPDATE [Location Table]" & _
"SET [Location]='" & Me.Location1.Value & "'" & _
"WHERE [Location Table].[Custom Label] = [ScanItem]"
更新数字Len 12的查询
"WHERE [Location Table].[Item ID] = [ScanItem]"
我理解表格空间是禁止的,但我无法控制。如果这不起作用,任何其他解决方案都会受到欢迎。
答案 0 :(得分:0)
对于第一个WHERE
条件,您已使用字符串连接处理它。
然而,对于第二个,你只是指这个领域。
使用字符串连接的解决方案(存在SQL注入的风险):
strSQL = "UPDATE [Location Table]" & _
" SET [Location]='" & Me.Location1.Value & "'" & _
" WHERE [Location Table].[Custom Label] = '" & Me.ScanItem.Value & "'"
使用参数的更合适的解决方案:
strSQL = "UPDATE [Location Table]" & _
" SET [Location]= paramLocation" & _
" WHERE [Location Table].[Custom Label] = paramLabel"
Set qdf = CurrentDb.CreateQueryDef("", strSQL)
qdf.Parameters("paramLocation").Value = Me.Location1.Value
qdf.Parameters("paramLabel").Value = Me.ScanItem.Value
qdf.Execute
答案 1 :(得分:0)
如果我正确理解了您的问题,您想要在[ScanItem]的长度= 11(在这种情况下使用[自定义标签]进行比较)时应用一个WHERE子句评估,如果[ScanItem]的长度= 12则另一个WHERE子句评估(在这种情况下使用[项目ID]进行比较)。有多种方法可以做到这一点。我不是解决SQL注入问题 - 只是查询逻辑,但你总是可以使用参数重写它(推荐的最佳实践)。您可以编写查询以使用条件逻辑,或者您的vba可以使用条件逻辑(假设只有可能的长度条件为11和12)。我是情景2的粉丝。
场景1(查询使用条件逻辑):
strSQL = "UPDATE [Location Table] " & _
"SET [Location]='" & Me.Location1.Value & "' " & _
"WHERE ([Location Table].[Custom Label] = '" & Me.ScanItem.Value & "' AND LEN('" & Me.ScanItem.Value & "') = 11) " & _
" OR ([Location Table].[Item ID] = '" & Me.ScanItem.Value & "' AND LEN('" & Me.ScanItem.Value & "') = 12)"
场景2(vba使用条件逻辑 - 假设只有2个可能的长度为11而不是11):
strSQL = "UPDATE [Location Table] " & _
"SET [Location]='" & Me.Location1.Value & "' " & _
"WHERE ([Location Table]." & IIF(Len(Me.ScanItem.Value)=11,"[Custom Label]","[Item ID]") & " = '" & Me.ScanItem.Value & "'"