我有一个 VB6 遗留程序,它一直在悄悄地将 Now() 日期转换为美国格式,即 2013 年 8 月 4 日作为 2013 年 8 月 4 日插入 Access 数据库,但 23/3/2013 很好。这种情况自 2002 年以来一直在发生,但直到现在还没有人注意到。大多数更新是在月底完成的。
如果我提取过程并在虚拟程序中运行它,它工作正常。但是在应用程序代码的某个地方,某些东西正在说服 ADO 尝试转换日期。
它在 ADO 命令中完成,日期设置为 DateTimeStamp 参数
eg
strSQL = "Insert into TSCDATA " _
& " ( FID, FNAME, FPID, FCREATEDATE, FLNKEDTDATE, FSIZE)" _
& " values ( ? , ? , ? , ? , ? , ? ) "
with mADOCmdInsert
.Name = CMD_INSERT
.CommandText = strSQL
.CommandType = adCmdText
.ActiveConnection = m_conn
.Prepared = False
.Parameters.Append .CreateParameter(prID, adInteger, adParamInput)
.Parameters.Append .CreateParameter(prNAME, adChar, adParamInput, 16)
.Parameters.Append .CreateParameter(prFPID, adInteger, adParamInput)
.Parameters.Append .CreateParameter(prFCREATEDATE, adDBTimeStamp, adParamInput)
.Parameters.Append .CreateParameter(prFLNKEDTDATE, adChar, adParamInput, 8)
.Parameters.Append .CreateParameter(prFSIZE, adChar, adParamInput, 8)
End With
模块的其他地方:
dteNow = Now
With mADOCmdInsertScorpat
.Parameters(prID).Value = lngId
.Parameters(prNAME).Value = txtName
.Parameters(prFPID).Value = VersionId
.Parameters(prFCREATEDATE).Value = dteNow
.Parameters(prFLNKEDTDATE).Value = ""
.Parameters(prFSIZE).Value = txtSize
.Execute lngRecsAffected
End With
以前有没有人遇到过这种情况,现在为什么会这样?
谢谢