执行 it685的专案时出现的一个奇怪问题,因为还有其他项目需处理所以有一搭没一搭的花了三天傍晚进行除错

这是帮浩宇的一个客户开发客制化CRM系统。

 

在处理使用者登入LOG档时出现了错误,

会出现这样的错误讯息:
Microsoft VBScript 执行阶段错误 错误 '800a000d'
型态不符合: 'formatedatetime' 

 

if  rTimeEnd="" then rTimeEnd=Now()
  ........

sql= sql & " olstarttime <= #" & rTimeEnd & "# "
 

一开始以为问题的原因出再型别转换,试过 FormatDateTime(), chgstr ()

formatdatetime(date,vbshortdate)转化为短日期格式.
formatdatetime(date,vblongdate)转化为长日期格式.
formatdatetime(time,vbshorttime)转化为短时间格式
formatdatetime(time,vblongtime)转化为长时间格式
 
sql=sql&chgstr( rTimeEnd )&","
>>
sql=sql& "getdate(),"
 
结果都会另外一个错误。

错误类型:
ADODB.Recordset (0x800A0E79)
当物件开启时,不允许操作。
/itcrm/loginlog.asp, line 65

大部分的说明是因为物件处于Open状态
而又再次下Open指令或试图去更改其属性等动作都会出现此错误
例如:
rs.Open之后接著又去更改rs.dtcnn就会发生此错误讯息

大部分的建议是如果rs.open用完后就马上把他rs.close掉,这样的话后面如果有要再重新开启的话比较不会出错。

不过反复检查过,rs.close是有确实执行的......

窘....

后来看到这一段:

rs.Open sql,conn,3,1
rs.Open "Select * From [userlog] Order By Id asc",conn,3,1

 

恍然大悟........我为什么要开两次呀?其实是忘了把下面那一段测试用的recordset注解掉

BTW最开始的日期型别问题,其实有一个更快更简单的作法:

if  rTimeEnd="" then rTimeEnd=Now()  >>   if  rTimeEnd="" then rTimeEnd=Date()

搞定!

相关文章