Office中国论坛/Access中国论坛

标题: [求助]标准表达式中数据类型不匹配? [打印本页]

作者: asdf26    时间: 2005-9-17 17:55
标题: [求助]标准表达式中数据类型不匹配?
我在编写access程序时,遇到如下问题:

    Dim con As Object

    Dim rs As New ADODB.Recordset

    Set con = Application.CurrentProject.Connection

    strSQL = "select * from 水电记录表 where 水电记录表.抄表日期 = " & "'" & Forms!增加年月!请输入年月 & "'"

    rs.Open strSQL, con, adOpenKeyset, adLockBatchOptimistic

程序执行到最后有下划线的这句话报错,信息为:“标准表达式中数据类型不匹配”

水电记录表中的“抄表日期”为日期型字段,窗体中“Forms!增加年月!请输入年月”也是日期型,strSQL = "select * from 水电记录表 where 水电记录表.抄表日期 = '2005年09月' "

我认为是条件语句where的问题,可是不知道怎样改写才能让程序通过,请前辈给予指点,谢谢啦!
作者: LucasLynn    时间: 2005-9-17 18:34
日期型数据不是用引号,而是#,比方说:



抄表日期=#2005-01-02#
作者: asdf26    时间: 2005-9-17 19:40
我也知道日期格式#2005-09-01#,可是在strSQL字符串中怎样组织呢?

我把"'" 改成了"#",还是不行啊!

到底怎样写呢?
作者: asdf26    时间: 2005-9-18 00:47
具体语法怎么写呀?
作者: sgrshh29    时间: 2005-9-18 01:18
如果你能确认窗体上的日期是日期型的,可以这样写了试试:strSQL = "select * from 水电记录表 where" & "水电记录表.抄表日期 = " & Forms!增加年月!请输入年月不过从你的strsql中的Forms!增加年月!请输入年月来看,不像是日期型的,导致与水电记录表.抄表日期类型不匹配.


作者: LucasLynn    时间: 2005-9-18 01:34
以下是引用asdf26在2005-9-17 16:47:00的发言:



具体语法怎么写呀?



strSQL = BuildCriteria("select * from 水电记录表 where 水电记录表.抄表日期",dbDate,Forms!增加年月!请输入年月)

从语法上来说这样就正确了,但是从程序上来说,前面sgrshh29提出的很有道理,虽然没有看过你的窗体控件怎么命名,但是感觉你的Forms!增加年月!请输入年月确实不象是日期型的,好好检查一下。
作者: asdf26    时间: 2005-9-18 21:53
谢谢!我的窗体上的控件是文本框,我在格式和有效性上做了限制:“9999\年99\月”,另外,我在水电记录表的日期型字段上也做了格式限制:“yyyy年mm月”。根据您的启发,我在程序中加了一个日期型变量"dateLS"来记载"Forms!增加年月!请输入年月"的值,并且将strSQL替换成如下格式:dim dateLS as datedateLS = Forms!增加年月!请输入年月strSQL = "select * from 水电记录表 where 水电记录表.抄表日期=" & dateLSrs.SQL=strSQL......程序通过了,但是结果却错了!因为rs(注:recordset)永远为空,即:rs.recordcount=0,我很郁闷!请教大虾指点迷津!
作者: asdf26    时间: 2005-9-18 22:42
版主:你好!BuildCriteria是什么函数?我没见过。帮助上面也查不到。
作者: 五拱柳林生    时间: 2005-9-24 07:39
strSQL = "select * from 水电记录表 where 水电记录表.抄表日期 = #" & cstr(cdate(Forms!增加年月!请输入年月)) & "#"



我想是可行的。
作者: LucasLynn    时间: 2005-9-24 07:53
以下是引用asdf26在2005-9-18 14:42:00的发言:



版主:你好!

BuildCriteria是什么函数?我没见过。帮助上面也查不到。



Application类的一个方法。
作者: LucasLynn    时间: 2005-9-24 07:56
以下是引用asdf26在2005-9-18 13:53:00的发言:

谢谢!我的窗体上的控件是文本框,我在格式和有效性上做了限制:“9999\年99\月”,另外,我在水电记录表的日期型字段上也做了格式限制:“yyyy年mm月”。根据您的启发,我在程序中加了一个日期型变量"dateLS"来记载"Forms!增加年月!请输入年月"的值,并且将strSQL替换成如下格式:

dim dateLS as date

strSQL = BuildCriteria("select * from 水电记录表 where 水电记录表.抄表日期", dbDate, CStr(Forms!增加年月!请输入年月))

Debug.Print strSQL

rs.SQL=strSQL

......

程序通过了,但是结果却错了!因为rs(注:recordset)永远为空,即:rs.recordcount=0,我很郁闷!

请教大虾指点迷津!



这样试试看,如果还是不对,把你Debug出来的内容贴上来,一看就知道什么问题了。

[此贴子已经被作者于2005-9-23 23:57:09编辑过]


作者: asdf26    时间: 2005-11-26 09:44
标题: 不一定
该死的access语法上总是捉摸不定,一会行,一会不行。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3