Sql 类似于查找作为较长字符串的子字符串的列值的查询
我想使用这段代码在字段PID中查找一个值,该值可能存在于字段MP_PID中的任何位置,但我的SQL无法捕获它们。不会抛出任何错误。我做错了什么 它比较两个记录集中文本字段的值 谢谢 TMA 如果我使用:Sql 类似于查找作为较长字符串的子字符串的列值的查询,sql,ms-access,vba,sql-like,Sql,Ms Access,Vba,Sql Like,我想使用这段代码在字段PID中查找一个值,该值可能存在于字段MP_PID中的任何位置,但我的SQL无法捕获它们。不会抛出任何错误。我做错了什么 它比较两个记录集中文本字段的值 谢谢 TMA 如果我使用: strPID = "DELETE * FROM tblPID WHERE PID = '" & !MP_PID & "';" 它适用于精确匹配 Access 2007 DAO 我喜欢的说法有什么不对?谢谢 PID很可能是一个数字字段,您可以使用LIKE运算符遍历字符串值。尝试将
strPID = "DELETE * FROM tblPID WHERE PID = '" & !MP_PID & "';"
它适用于精确匹配
Access 2007 DAO
我喜欢的说法有什么不对?谢谢 PID很可能是一个数字字段,您可以使用
LIKE
运算符遍历字符串值。尝试将数值转换为字符串:
strPID = "DELETE * FROM tblPID WHERE CSTR(PID) Like '*" & !MP_PID & "*';"
或者,将空长度字符串值连接为数值(类似于通过连接星号和引号将文本框数值转换为字符串):
LIKE表达式用于标识LIKE运算符左侧的值包含LIKE运算符右侧的通配符字符串表示的字符串(或字符模式)的记录 就你而言
…'0123456A“类似”*0000623E 0123456A*'
将返回False,因为左侧不包含右侧的整个字符串
你真正想要的是
…'0000623E 0123456A“类似”*0123456A*'
这意味着您需要在LIKE运算符的左侧使用MP_PID值
要正确地做到这一点(即,使用参数化查询),如下所示:
选项比较数据库
选项显式
次相似测试()
"测试数据,
作为字符串的Dim MP_PID
MP_PID=“0000623E 0123456A”
Dim cdb作为DAO.Database
设置cdb=CurrentDb
将qdf设置为DAO.QueryDef
设置qdf=cdb.CreateQueryDef(“”_
“参数[LongerText]TEXT(255);”和_
“从tblPID中删除*,其中[LongerText]类似于'*'&PID&'*'”)
qdf!LongerText=MP\U PID
qdf.executedbfailonerror
调试。打印qdf.RecordsAffected&“已删除记录。”
设置qdf=无
设置cdb=无
端接头
好的,果冻和冻糕。你们两个都让我走上了正确的道路,是的,我确实把它带回来了。下面是我用来创建删除查询的内容:
strDelMP = "DELETE tblPID.* FROM tblPID INNER JOIN tblMgtPlan ON tblMgtPlan.MP_PID Like '*' + tblPID.PID + '*';"
db.Execute (strDelMP)
谢谢 两者都是弦。我尝试了两种格式副本,并且在匹配的地方使用了完全相同的语句。所以我还是不知所措。其中PID=0123456A和!MP_PID='0123456A'它可以工作。如果PID='0123456A'和!MP_PID='0000623E 0123456A'它不工作。中的值之间有一个空格!如果那样的话matters@Darwind-如果要在MP_PID值中搜索PID值,则需要颠倒它们在类似表达式中的显示顺序。
strPID = "DELETE * FROM tblPID WHERE PID & '' Like '*" & !MP_PID & "*';"
strDelMP = "DELETE tblPID.* FROM tblPID INNER JOIN tblMgtPlan ON tblMgtPlan.MP_PID Like '*' + tblPID.PID + '*';"
db.Execute (strDelMP)