注册 登录
编程论坛 VB6论坛

在vb环境下访问access,怎么在join语句中使用like进行模糊匹配

ssource 发布于 2020-11-07 11:56, 2172 次点击
论坛各位大神,我在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编辑过]

5 回复
#2
marie5212020-11-07 14:10
'%" & A.BeforeRevise & "%'换个这个试试。。我用的是这个格式的,%后是双引号
#3
ssource2020-11-07 14:41
回复 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 + ""%')"
报以下错误
只有本站会员才能查看附件,请 登录
#4
cwa99582020-11-09 08:01

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 & "%')"
#5
ssource2020-11-09 19:35
回复 4楼 cwa9958
A.BeforeRevise是表TableTemp中的字段,不是变量。
#6
ssource2020-11-26 21:06
不再纠结于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"
1