设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 2982|回复: 15
打印 上一主题 下一主题

[Access本身] sql语句中如何自动判断数据类型

[复制链接]
跳转到指定楼层
1#
发表于 2011-10-14 20:28:15 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我有个窗体fom1
form1.recordsource="select * from 表名 where 字段1=" & 变量
如果我将字段1的数据类型由数字改为文本,按道理这个form1的记录源就是"select * from 表名 where 字段1='" & 变量 & "'"
现在有什么办法,在无论更改字段1为何类型的情况下,form1的记录源这段代码都不用改的。我现在用的就是typename来判断字段1的数据类型,要多写好几行代码。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
16#
 楼主| 发表于 2013-10-30 19:01:13 | 只看该作者
todaynew 发表于 2011-10-18 09:13
"select * from 表 where Cstr(字段3)='" & true & "'"

这会不对吗?

老大,今天在改这个程序,试了你这个用法,运行没有错误,但没有任何结果,用select * from 表 where 字段3=true就是对的。我换成cvar也不行,就是Boolean这个问题难解决
15#
 楼主| 发表于 2011-10-21 18:20:06 | 只看该作者
我在代码里中断测试了一下
窗体.recordsource="select * from 表 where Cstr(字段3)='" & true & "'" 的结果出来就是"select * from 表 where Cstr(字段3)=' true '"啊,不是您这个"select * from 表 where Cstr(字段3)='-1'"

在查询的sql视图中select * from 表 where Cstr(字段3)='" & true & "'"根本无法运行。

我的程序是这样的:
窗体中有个treeview,某个节点的node.tag值就是布尔型,现在我希望点中该节点后在右边子窗体中打开对应的窗体,我用下面这个代码:
子窗体.recordsource="select * from 表 where cstr(字段3)='" & node.tag & "'"

因为node.tag就是true或false,所以上面这段代码就相当于执行下面代码:
="select * from 表 where cstr(字段3)='" & true & "'"
这样就总会提示错误。
解决方法:
1是获取node的布尔值0或-1,可我查了node属性里没有这个,tag返回的都是true或false
2是在加载treeview时将node值直接显示为0和-1,再将上面代码node.tag改为node.text,我能测试通过,只是程序中用0或-1显示节点不是很直观。目前我加载treeview节点时有个判断node的typename,如果是布尔型就将其text显示为node.tag & rec.field(字段)(如false日期)

不知道老大还有什么好的办法,其实说来说去,我认为就是布尔型字段无法用cstr转换,比如字段1=false,cstr(字段1)='false'就不行,其他字段没一一测试,但应该都能通过。

老大


14#
发表于 2011-10-20 20:18:43 | 只看该作者
本帖最后由 todaynew 于 2011-10-20 20:23 编辑
软件下载 发表于 2011-10-19 22:35
大哥,您能不能帮我测试一下您这个代码到底能不能用?

我在家里用access2007用SQL查询测试,用的是SEL ...


呵呵,你怎么回事呀?
不是告诉你不是'True',而是'-1'吗?

因为 SELECT  * FROM 表 WHERE 字段3=True  等价于 SELECT  * FROM 表 WHERE 字段3=-1

又因为 SELECT  * FROM 表 WHERE 字段3=-1      等价于 SELECT  * FROM 表 WHERE Cstr(字段3)="-1 "

所以 SELECT  * FROM 表 WHERE 字段3=True  等价于 SELECT  * FROM 表 WHERE Cstr(字段3)="-1 "

True 和False是Access的保留字,这两个保留字分别代表布尔值-1和0,明白否?

13#
 楼主| 发表于 2011-10-19 22:35:52 | 只看该作者
todaynew 发表于 2011-10-18 09:13
"select * from 表 where Cstr(字段3)='" & true & "'"

这会不对吗?

大哥,您能不能帮我测试一下您这个代码到底能不能用?

我在家里用access2007用SQL查询测试,用的是SELECT * FROM 表 WHERE cstr(字段3)='True',出来的结果和SELECT * FROM 表 WHERE 字段3=True不一样啊,一条记录都没有。
12#
发表于 2011-10-18 20:25:51 | 只看该作者
本帖最后由 todaynew 于 2011-10-18 20:27 编辑
软件下载 发表于 2011-10-18 19:31
老大,我在ACCESS的查询里测试了,不行啊。

select * from 表 where Cstr(字段3)=‘true'出不来结果, ...


你没搞错吧?呵呵。在好好看看我的写法。

"select * from 表 where Cstr(字段3)='" & true & "'" 的结果不是"select * from 表 where Cstr(字段3)=' true '",而是
"select * from 表 where Cstr(字段3)='-1'"





11#
 楼主| 发表于 2011-10-18 19:31:06 | 只看该作者
todaynew 发表于 2011-10-18 09:13
"select * from 表 where Cstr(字段3)='" & true & "'"

这会不对吗?

老大,我在ACCESS的查询里测试了,不行啊。

select * from 表 where Cstr(字段3)=‘true'出不来结果,空记录。

select * from 表 where Cstr(字段3)=true或select * from 表 where 字段3=true都正常显示

是不是B类型字段无法用Cstr转换成文本?我的access2003和2007测试都没通过。
10#
发表于 2011-10-18 09:13:05 | 只看该作者
"select * from 表 where Cstr(字段3)='" & true & "'"

这会不对吗?
9#
 楼主| 发表于 2011-10-17 22:09:19 | 只看该作者
本帖最后由 软件下载 于 2011-10-17 22:09 编辑
todaynew 发表于 2011-10-17 20:56
那不一样吗?
转换以后就是"-1"和"0"


我测试过了,比如当前窗体记录源="select * from 表 where 字段3=true"
在窗体中获取字段3的值时则为-1
不转换时记录源为"select * from 表 where 字段3=-1",这个是能正常运行的
转换后记录源为"select * from 表 where 字段3='-1'",这个就不能正常运行了。
因为B类型的字段-1和true同等的,但"-1"就不同了。
印象中好像哪里可以设置窗体中B字段的值为"true“或"false”,而不是“0”和"-1",目前还没有搜索到。


8#
发表于 2011-10-17 20:56:54 | 只看该作者
软件下载 发表于 2011-10-17 20:20
刚才测试了一下,还有一个问题:我其中一个字段是Boolean类型,用上面这个代码后,由于窗体中B型字段值都是0 ...

那不一样吗?
转换以后就是"-1"和"0"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-1-10 02:33 , Processed in 0.093646 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表