设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: 软件下载
打印 上一主题 下一主题

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

[复制链接]
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测试都没通过。
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'"





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不一样啊,一条记录都没有。
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,明白否?

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'就不行,其他字段没一一测试,但应该都能通过。

老大


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这个问题难解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-26 15:56 , Processed in 0.087079 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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