标题:在vb环境下访问access,怎么在join语句中使用like进行模糊匹配
只看楼主
ssource
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-11-7
结帖率:0
已结贴  问题点数:20 回复次数:5 
在vb环境下访问access,怎么在join语句中使用like进行模糊匹配
论坛各位大神,我在Access下直接运行以下的SQL语句,能够顺利执行,可以得到预期结果。
select * into TableTemp2 from (select B.RowID,A.BeforeRevise, A.AfterRevise,A.BackUp from TableReviseAuthor1 as A inner join TableTemp AS B on B.Author like '*' & A.BeforeRevise & '*')
但在VB环境下,要对Access执行上述SQL语句相同的操作,将其中like后的*必须使用%来替代,执行以下语句:
Public PuChaDataBase As ADODB.Connection
Set PuChaDataBase = New ADODB.Connection
PuChaDataBase.ConnectionString = "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" & App.path & "\PuChaDataBase.mdb" & ";Persist Security Info=True"
PuChaDataBase.Open
strSQL = "select * into TableTemp2 from (select B.RowID,A.BeforeRevise, A.AfterRevise,A.BackUp from TableReviseAuthor1 as A inner join TableTemp AS B on B.Author like '%' & A.BeforeRevise & '%')"
PuChaDataBase.Execute strSQL
总是报“无效的模式字符串”的错,如果把strSQL字符串中like后两个%之间字段A.BeforeRevise改为固定字符串(比如:"李白"),就可以运行。
Access中选项页中的SQL SERVER兼容语法下的两个选项也打上勾了,见下图。
请教各位大神,究竟是哪个地方出问题了。


[此贴子已经被作者于2020-11-7 11:57编辑过]

搜索更多相关主题的帖子: like select 语句 join access 
2020-11-07 11:56
marie521
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2012-7-9
得分:10 
'%" & A.BeforeRevise & "%'换个这个试试。。我用的是这个格式的,%后是双引号
2020-11-07 14:10
ssource
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-11-7
得分:0 
回复 2楼 marie521
你的意思是换成这样吗?
strSQL = "select * into TableTemp2 from (select B.RowID,A.BeforeRevise,A.AfterRevise,A.BackUp from TableReviseAuthor1 as A inner join TableTemp AS B on B.Author  like '%"" + A.BeforeRevise + ""%')"
报以下错误
2020-11-07 14:41
cwa9958
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:247
专家分:1228
注 册:2006-6-25
得分:10 

A.BeforeRevise是个变量吧

strSQL = "select * into TableTemp2 from (select B.RowID,A.BeforeRevise, A.AfterRevise,A.BackUp from TableReviseAuthor1 as A inner join TableTemp AS B on B.Author like '%" & A.BeforeRevise & "%')"
2020-11-09 08:01
ssource
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-11-7
得分:0 
回复 4楼 cwa9958
A.BeforeRevise是表TableTemp中的字段,不是变量。
2020-11-09 19:35
ssource
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-11-7
得分:0 
不再纠结于like了,改用instr解决了问题,SQL语句如下:
strSQL = "select B.RowID,A.BeforeRevise, A.AfterRevise,A.BackUp into TableTemp2 from TableReviseAuthor1 as A inner join TableTemp AS B on instr(B.Author,A.BeforeRevise)>0"
2020-11-26 21:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503801-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.077010 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved