求助:这个sql语句该怎么写?

fzx4936 2011-03-12 06:07:20
1.'这是个15位身份证转18位的模块 代码省略
function perNo15to18(s as string) as string
end function

2.'这是个18位身份证转15位的模块 代码省略
function perNo18to15(s as string) as string
end function

3.access中有2个表 tbTarget,tbTmp,结构完全相同,其中一个字段为perNo(证件号码).
注意:在2个表中
1)在tbTmp.perNo 和 tbTarget.perNo的长度有可能是15位的,也可能是18位的,也可能<15位(非身份证).
例如 tbTmp.perNo ='222102870525051' tbTarget.perNo='22210219870525051x",也有可能相反或相同
2)如果是飞身份证号(len(tbTarget.perNo)<15),那么,perNo在2个表中一定是相同的.

4.要在出tmp中筛选tmp.与tbTarget.perNo不同的记录,我写的:
sql="select * from tbTmp,tbTarget where tbTarget.PerNO<>tmp.perno and tbTarget.PerNO<> iif(len(tbtmp.perno)=15,perNo15to18(tmp.perno), iif(len(tbtmp.persno)=18,perNo18to15(tbtmp.perno),tbtmp.perno))"
sql.open sql,ocn_tmp,1,1
报错:表达式perNo15to18未定义

这个sql查询该怎么写?

谢谢!
...全文
150 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinaboyzyq 2011-03-12
  • 打赏
  • 举报
回复
tbtmp.perno这个字段还要处理.....

看看怎么先出库……
chinaboyzyq 2011-03-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 fzx4936 的回复:]
4.要在出tmp中筛选tmp.与tbTarget.perNo不同的记录,我写的:
sql="select * from tbTmp,tbTarget where tbTarget.PerNO<>tmp.perno and tbTarget.PerNO<> iif(len(tbtmp.perno)=15,perNo15to18(tmp.perno), iif(len(tbtmp.persno)=18,perNo18to15(tbtmp.perno),tbtmp.perno))"
sql.open sql,ocn_tmp,1,1
报错:表达式perNo15to18未定义

这个sql查询该怎么写?
[/Quote]
你把函数全引在双引号内,它就变成函数名的字符串了,这时它已经不是函数了,你要把你的函数全部从串中分离出来与字符串前后加&进行连接来构成SQL语句,例如:

SQL = "select * from tbTmp,tbTarget where tbTarget.PerNO<>tmp.perno and tbTarget.PerNO<> iif(len(tbtmp.perno)=15,perNo15to18(tmp.perno), iif(len(tbtmp.persno)=18," & perNo18to15(tbtmp.perno) & ",tbtmp.perno))"


chinaboyzyq 2011-03-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 fzx4936 的回复:]
4.要在出tmp中筛选tmp.与tbTarget.perNo不同的记录,我写的:
sql="select * from tbTmp,tbTarget where tbTarget.PerNO<>tmp.perno and tbTarget.PerNO<> iif(len(tbtmp.perno)=15,perNo15to18(tmp.perno), iif(len(tbtmp.persno)=18,perNo18to15(tbtmp.perno),tbtmp.perno))"
sql.open sql,ocn_tmp,1,1
报错:表达式perNo15to18未定义

这个sql查询该怎么写?
[/Quote]
你把函数全引在双引号内,它就变成函数名的字符串了,这时它已经不是函数了,你要把你的数据全部从串中分离出来与字符串前后加&进行连接来构成SQL语句,例如:

SQL = "select * from tbTmp,tbTarget where tbTarget.PerNO<>tmp.perno and tbTarget.PerNO<> iif(len(tbtmp.perno)=15,perNo15to18(tmp.perno), iif(len(tbtmp.persno)=18," & perNo18to15(tbtmp.perno) & ",tbtmp.perno))"

lxq19851204 2011-03-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 clear_zero 的回复:]
这样写肯定是不可以的,因为都编译成string了。你可以先做一遍你的表格,添加一个列统一成15位或者18位,然后再sql
[/Quote]
agree
clear_zero 2011-03-12
  • 打赏
  • 举报
回复
这样写肯定是不可以的,因为都编译成string了。你可以先做一遍你的表格,添加一个列统一成15位或者18位,然后再sql
fzx4936 2011-03-12
  • 打赏
  • 举报
回复
是不是在sql语句中真的不能使用自定义函数?
如果必须使用 该怎么做?

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧