jet/ado升级带来的问题?(100分)

  • 主题发起人 主题发起人 一个过客
  • 开始时间 开始时间

一个过客

Unregistered / Unconfirmed
GUEST, unregistred user!
用delphi+ado+access写了一个软件,本来系统好好的,非常正常,前几天出了点错,
我鬼使神差的以为access的jet驱动该升级了,就到M$网站下载了jet35sp3,升级
后发现不对劲,日期型字段不能再用单引号表示了,比如
select * from table1 where mydatetime>'2002-09-01 12:00:00'
不能通过,错误信息“Data type mismatch in criterai expression”
必须写成
select * from table1 where mydatetime>#2002-09-01 12:00:00#
才可,但是没升级前是可以一视同仁用单引号的。

我以为是升级jet的问题,于是到Cakk网站下载了几乎所有的数据库驱动一一
安装,可最后结果依旧。

大家有高招吗?
 
和和,Access中大多是那样用的,两边加#号
没什么,你就那么用吧
 
在Access中我还从来不知道说不加#号也可以用的,而且时间部分还要两个冒号,如你那句要这样改:
select * from table1 where mydatetime>#2002-09-01 12::00::00#
 
不对啊! 我用单引号操作access几年了,从来没遇到这个问题啊!
况且,adoquery1.parameters.parambyname('datefield').value:=now
这样的语句也不行了,同样的出错信息,看起来ado也是用的单引号

更奇怪的是,如果我用
adoquery1.parameters.parambyname('datefield').value:=now
的形式操作,有的记录没问题,有的就出错,我可以保证格式绝对没问题

另外,为了证明单引号和#同样有效,摘抄Access帮助文件一段话:

日期/时间值
表达式元素两边的数字符号 (#)(或 ANSI-92 中的单引号 ('))表示该元素
是日期/时间值。Microsoft Access 自动将数字符号(或单引号)所包围的值
作为日期/时间值来对待,并允许用任何常用的日期或时间格式来键入此值。

其实不用证明,因为我用单引号操作access几年了
 
我在sql server下使用datetime字段,也是用'',呵呵,不过通常都是用的between、and,
不用>、<来比较
 
其实关键是
adoquery1.parameters.parambyname('datefield').value=now
出错。我认为ado的这种用法应该可以自动分析数据库类型添加合适的分界符,
比如如果是字符型字段,我们用parambyname('aaa').value='sss'就会自动为
参数添加单引号,同理,日期型也一样。因为ado就是为了给各种不同数据库一个
统一的访问方法而设计的,如果access必须用#,sqlserver必须用',那么ado
就不是一个通用的接口了。
奇怪的是以前一直是可以的,昨天突然不行了。
 
解决了一半。parambyname().value可以了,原因是我把参数顺序搞错了。

不过mydatetime>'2002-09-01 12:00:00'还是不行,而我以前确实一直这么做的。

算了,只要parambyname.value能解决就行了。

分银子!
 
后退
顶部