Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

ACCESS2003中关于日期的请教

ytoooper  发表于:2012-07-20 15:23:28  
复制

Private Sub Command3_Click()
'查询生日提醒

Dim rst As New ADODB.Recordset
Dim strsql As String
Dim strsqll As String

strsql = "select * from tblhr where nz([离职时间])='' and month(cdate([出生日期]))=" & Me.txtm

rst.Open strsql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

 

。。。省略。。。

 

End Sub

 

运行到rst.open... ...错误提示:标准表达式中数据类型不匹配。

 

[出生日期]字段是文本型,我想取月份,使用month(cdare([出生日期]))去匹配文本框me.txtm的值

 

请老师指点。。。感激涕零

 

Top
lili 发表于:2012-07-20 16:04:59
将month(cdare([出生日期]))=me.txtm 更改为 Format$(cdare([出生日期]), "yyyy-mm") 再试下看。我的代码都是这样写的,没出现问题的。

ytoooper 发表于:2012-07-20 16:12:27

我只想取到月,不需要年的。

关键是=前后的问题,提示“标准表达式中数据类型不匹配”



lili 发表于:2012-07-20 16:19:13
那你就将month(cdare([出生日期]))=me.txtm 更改为 Format$(cdare([出生日期]), "mm") =me.txtm 试下

煮江品茶 发表于:2012-07-20 16:47:09
where子句错误,nz([离职时间])=后面缺少值。

ytoooper 发表于:2012-07-20 16:53:50

那个不是双引号,是2个单引号。



叶海峰 发表于:2012-07-20 17:24:11
nz([离职时间])='' 改成 isnull([离职时间])

煮江品茶 发表于:2012-07-20 17:32:50
isnull可能不行,需要写成([离职时间] is null) and ......

ytoooper 发表于:2012-07-20 23:15:13

我这段程序是用在 从MS SQL的表A中导出数据集到ACCESS中的表B中,A中的出生日期是nvarchar型的,B表在设计时也做成了文本型,从而有了需要cdate([出生日期])的转化,进而利用mouth取月份的需求。上述代码运行时显示了“标准表达式中数据类型不匹配”的错误。

 

实际上如果利用ADO从MSSQL的A表(出生日期为nvarchar型)导数据时,ACCESS的B表[出生日期]字段设置为日期型,也是可以成功导入的。可直接mouth([出生日期])=me.txtm,并执行成功的。

 

但很疑惑:如果B表的[出生日期]设计成文本型,在经过cdate转化month取月后,表达式为何会数据类型不匹配??



殷小宝 发表于:2012-07-22 23:12:37
日期型应这样写:"#" & [出生日期] & "#",所以试一下:month( "#" & [出生日期] & "#")

总记录:9篇  页次:1/1 9 1 :