Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 类似于查找作为较长字符串的子字符串的列值的查询_Sql_Ms Access_Vba_Sql Like - Fatal编程技术网

Sql 类似于查找作为较长字符串的子字符串的列值的查询

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运算符遍历字符串值。尝试将

我想使用这段代码在字段PID中查找一个值,该值可能存在于字段MP_PID中的任何位置,但我的SQL无法捕获它们。不会抛出任何错误。我做错了什么

它比较两个记录集中文本字段的值

谢谢

TMA

如果我使用:

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)