我想使用此代码在字段PID中查找值,它可能存在于字段MP_PID中的任何位置,但我的SQL没有捕获它们。没有错误被抛出。我做错了什么?
它正在比较两个记录集中文本字段的值。
由于
TMA
strPID = "DELETE * FROM tblPID WHERE PID Like '*" & !MP_PID & "*';"
如果我使用:
strPID = "DELETE * FROM tblPID WHERE PID = '" & !MP_PID & "';"
它适用于完全匹配。
Access 2007 DAO
我的声明有什么问题?谢谢!
答案 0 :(得分:1)
LIKE表达式用于标识LIKE运算符左侧的值包含LIKE运算符右侧的通配符字符串表示的字符串(或字符模式)的记录。
在你的情况下
... '0123456A' LIKE '*0000623E 0123456A*'
将返回False,因为左侧不包含右侧的整个字符串。
你真正想要的是
... '0000623E 0123456A' LIKE '*0123456A*'
表示您需要LIKE运算符左侧的MP_PID值。
为了正确地做到这一点(即使用参数化查询),看起来像这样:
Option Compare Database
Option Explicit
Sub LikeTest()
' test data
Dim MP_PID As String
MP_PID = "0000623E 0123456A"
Dim cdb As DAO.Database
Set cdb = CurrentDb
Dim qdf As DAO.QueryDef
Set qdf = cdb.CreateQueryDef("", _
"PARAMETERS [LongerText] TEXT(255);" & _
"DELETE * FROM tblPID WHERE [LongerText] LIKE '*' & PID & '*'")
qdf!LongerText = MP_PID
qdf.Execute dbFailOnError
Debug.Print qdf.RecordsAffected & " record(s) deleted."
Set qdf = Nothing
Set cdb = Nothing
End Sub
答案 1 :(得分:0)
PID很可能是一个数字字段,您使用遍历字符串值的LIKE
运算符。尝试将数值转换为字符串:
strPID = "DELETE * FROM tblPID WHERE CSTR(PID) Like '*" & !MP_PID & "*';"
或者,将空长度字符串值连接到数值(类似于通过连接星号和引号将文本框数值转换为字符串):
strPID = "DELETE * FROM tblPID WHERE PID & '' Like '*" & !MP_PID & "*';"
答案 2 :(得分:0)
Ok Gord和Parfait。你们两个都让我走上正确的道路,是的,我确实得到了回报。这是我用来创建删除查询的内容:
strDelMP = "DELETE tblPID.* FROM tblPID INNER JOIN tblMgtPlan ON tblMgtPlan.MP_PID Like '*' + tblPID.PID + '*';"
db.Execute (strDelMP)
谢谢!