设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 2711|回复: 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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-10-14 20:42:50 | 只看该作者
本帖最后由 todaynew 于 2011-10-14 20:47 编辑

任尔东西南北风,一个函数收囊中。
莫管类型八九种,转成文本皆能用。

form1.recordsource="select * from 表名 where Cstr(字段1)='" & 变量 & "'"

点击这里给我发消息

3#
发表于 2011-10-15 10:07:13 | 只看该作者
高招!
4#
 楼主| 发表于 2011-10-17 20:06:10 | 只看该作者
todaynew 发表于 2011-10-14 20:42
任尔东西南北风,一个函数收囊中。
莫管类型八九种,转成文本皆能用。

谢谢,我的窗体中字段1也是用的变量,以前用这个方法总是提示错误,刚才仔细研究了一下,发现是代码的问题:
我以前写的是:
form1.recordsource="select * from 表名 where " & CStr(字段变量) & " ='" & 变量 & "'"
实际上应该写成:
form1.recordsource="select * from 表名 where CStr(" & 字段变量 & ") ='" & 变量 & "'"
这下要少写很多代码了.
5#
 楼主| 发表于 2011-10-17 20:20:24 | 只看该作者
刚才测试了一下,还有一个问题:我其中一个字段是Boolean类型,用上面这个代码后,由于窗体中B型字段值都是0或-1而不是true或false,所以cstr后就提示类型不符,这个怎么解决?

6#
发表于 2011-10-17 20:28:14 | 只看该作者
也可以用这个函数(我一直用的,相对要麻烦一点)
Function ColType(ByVal TabelName As String, ByVal ColName As String)
  'TabelName---表名称
  'ColName---字段名称
  '由于动态查询、筛选需要过滤某些内容,但是不知道某字段是文本、日期、数字类型,会导致代码错误,本函数返回某表某字段的数据类型的那个符号(对应"'"、"#"、"")
  '
  Dim str
  Dim B
  Dim A
  Dim C
  Dim st
  Dim Conn As ADODB.Connection
  Set Conn = CurrentProject.Connection
  Dim rc As ADODB.Recordset
  Set rc = New ADODB.Recordset
  rc.Open "select top 1 * from " & TabelName, Conn, adOpenStatic, adLockReadOnly
  For i = 0 To rc.Fields.Count - 1
    B = rc.Fields(i).Type
    A = rc.Fields(i).Name
    If A = ColName Then
      C = B
      Exit For
    End If
  Next i
  
  Select Case C
  Case 3, 131, 6
    st = ""
  Case 7
    st = "#"
  Case Else
    st = "'"
  End Select
  Debug.Print st
  ColType = st
End Function
7#
 楼主| 发表于 2011-10-17 20:53:21 | 只看该作者
aslxt 发表于 2011-10-17 20:28
也可以用这个函数(我一直用的,相对要麻烦一点)
Function ColType(ByVal TabelName As String, ByVal Co ...

我那个程序有近百个表,窗体中左边是树按类别加载各表,右边是树中对应的表,树中可实现按表任意字段分级显示的功能.

在点击树中任一级时,右边的窗体就会按照该级各对应的字段打开记录,中间有好多循环和嵌套,很麻烦,你这个代码我不知道放到哪里合适,不过还是谢谢了.

如下:
窗体左边是树,结构可能如下
表1
--表1.字段1(文本)
----表1.字段2(日期)
表2
--表2.字段2(文本)
表3
--表3.字段1(是否)
----表3.字段3(文本)
------表3.字段4(数字)
现在点击最下面那个表3.字段4,在窗体右边的子窗体就要加载一个记录源为"select * from 表3 where 表3.字段1=" & 是否变量 & " and 表3.字段3='" & 文本变量 & "' and 表3.字段4=" & 数字变量的窗体.
程序写了大半年,在边用边完善基本上已基本能稳定运行,确实提高了很多工作效率,只是有些问题至今还没有解决,比如如何保持前一个窗体打开时的状态,我现在用的笨办法,就是每打开一个窗体就把其当前记录和状态记录下来,显示在下面的组合框中.
8#
发表于 2011-10-17 20:56:54 | 只看该作者
软件下载 发表于 2011-10-17 20:20
刚才测试了一下,还有一个问题:我其中一个字段是Boolean类型,用上面这个代码后,由于窗体中B型字段值都是0 ...

那不一样吗?
转换以后就是"-1"和"0"
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",目前还没有搜索到。


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

这会不对吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-23 19:44 , Processed in 0.088054 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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