ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: kookkey

access sql 数据类型问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-12-18 17:26 | 显示全部楼层
4楼附件中SQL语句在Access查询中出错,但在ExcelVBA中使用正常:
  1. Sub CreateQuery() 'Excel中使用
  2.     Dim cnn As New ADODB.Connection
  3.     Dim rst As New ADODB.Recordset
  4.     Dim myPath As String
  5.     Dim SQL As String
  6.     Dim i As Integer
  7.     myPath = ThisWorkbook.Path & "\工作记录 - 副本.accdb"
  8.     cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & myPath
  9.     SQL = "SELECT 姓名, cdate(开通日期) AS 开通日期, cdate(截止日期) AS 截止日期, MAC地址 FROM 工作记录 WHERE DateDiff('d',cdate(截止日期),date()) >0 and 姓名<>'/' and 截止日期<> '∞'"
  10.     rst.Open SQL, cnn, adOpenKeyset, adLockOptimistic
  11.     Cells.ClearContents
  12.     For i = 0 To rst.Fields.Count - 1
  13.         Cells(1, i + 1) = rst.Fields(i).Name
  14.     Next
  15.     Range("A2").CopyFromRecordset rst
  16.     rst.Close
  17.     cnn.Close
  18.     Set rst = Nothing
  19.     Set cnn = Nothing
  20. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-18 18:54 | 显示全部楼层
zhaogang1960 发表于 2014-12-18 17:09
创建一个查询,"/"修改"-"即可:

这样的话,那不是每次有数据进去后都要进行一次这个查询操作么?没有直接修改日期选取的输出格式么?

TA的精华主题

TA的得分主题

发表于 2014-12-18 19:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 zhaogang1960 于 2014-12-18 19:35 编辑
kookkey 发表于 2014-12-18 18:54
这样的话,那不是每次有数据进去后都要进行一次这个查询操作么?没有直接修改日期选取的输出格式么?

不懂datepicker是什么,是否可以修改它的日期输出格式,是否受电脑日期格式的影响,如果是请修改电脑日期格式

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-18 20:12 | 显示全部楼层
zhaogang1960 发表于 2014-12-18 19:33
不懂datepicker是什么,是否可以修改它的日期输出格式,是否受电脑日期格式的影响,如果是请修改电脑日期 ...

感谢回复,找到问题了,其实不是日期格式的问题。
而是我的有些“截止日期”字段的数据是其他中文之类的字符
现在我在思考怎么避开DateDiff函数会处理到非日期类数据的情况
我将sql语句修改成
select 姓名,开通日期,截止日期,MAC地址,日期差
from (SELECT 姓名, 开通日期, 截止日期, MAC地址,CInt( CDate(截止日期)-Date()) AS 日期差 FROM 工作记录 WHERE 姓名<>'/' AND 截止日期<>'∞')
where 日期差 < 0;
还是提示“标准表达式中数据类型不匹配”
伤脑筋啊

TA的精华主题

TA的得分主题

发表于 2014-12-18 23:17 | 显示全部楼层
kookkey 发表于 2014-12-18 20:12
感谢回复,找到问题了,其实不是日期格式的问题。
而是我的有些“截止日期”字段的数据是其他中文之类的 ...
  1. SELECT 姓名, 开通日期, 截止日期, MAC地址 FROM 工作记录 WHERE 姓名<>'/' AND IIF(ISDATE(截止日期),cdate(截止日期)<date())
复制代码
附件打不开,看不到具体情况。

TA的精华主题

TA的得分主题

发表于 2014-12-19 00:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wuxiang_123 发表于 2014-12-18 23:17
附件打不开,看不到具体情况。

吴版威武,用第一个附件测试正确
IIF函数与VBA中的似乎不一样,后者是如果——则——否则——
请吴版介绍一下IIF函数在SQL中的使用方法

TA的精华主题

TA的得分主题

发表于 2014-12-19 00:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhaogang1960 发表于 2014-12-19 00:12
吴版威武,用第一个附件测试正确
IIF函数与VBA中的似乎不一样,后者是如果——则——否则——
请吴版介 ...

IIF(表达式,TRUE返回值,FLASE返回值)
第三参数可省,若缺省,则返回NULL。

TA的精华主题

TA的得分主题

发表于 2014-12-19 00:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wuxiang_123 发表于 2014-12-19 00:18
IIF(表达式,TRUE返回值,FLASE返回值)
第三参数可省,若缺省,则返回NULL。

与VBA的用法相似,但我看你用它过滤掉了非日期记录,即第三参数省略返回NULL,就能过滤掉了非日期?

点评

参考:http://club.excelhome.net/thread-833489-1-1.html  发表于 2014-12-22 22:26

TA的精华主题

TA的得分主题

发表于 2014-12-24 16:18 | 显示全部楼层
本帖最后由 roych 于 2014-12-24 16:20 编辑

依老衲看来,应该是日期选择器匹配的文本框设置有问题。把对应的文本框字段类型改为短日期格式,此外,还跟电脑系统日期的配置有关。有些用户使用了中文日期,那么录入数据时就有问题了。这种查找替换的方式只是治标不治本。关键还是要统一系统日期格式,例如在输入框的有效性里设置禁用中文
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-26 11:55 , Processed in 0.035383 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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