Access 2003 - VBA - 加入两种类型(字符串 = 日期)

Posted

技术标签:

【中文标题】Access 2003 - VBA - 加入两种类型(字符串 = 日期)【英文标题】:Access 2003 - VBA - Joining on two types (string = date) 【发布时间】:2013-06-08 11:59:47 【问题描述】:

背景:我正忙于一项研究,我在其中接收存储在 oracle 数据库中的数据。我自己使用 Access 数据库来存储来自 oracle 数据库的数据(以及来自其他来源的数据,与此问题无关)

oracle 数据库中的数据以访问格式提供给我。然后我运行以下查询以检索“oracle 数据”并将(或更新,如果该行已经存在)插入到我自己的访问数据库中。

oracle 数据库导出以文本格式保存它的日期,我自己的数据库中有日期格式,所以我使用 VBA 函数将文本转换为日期。


我的问题:如果字符串转换为日期,我可以加入字符串和日期吗?我应该如何进行?

UPDATE [TABLE1] INNER JOIN [URI_to_oracle_export.mdb].[TABLE2] 
ON ([TABLE1].PT=[TABLE2].PT) 
AND  ([TABLE1].DCMDATE=toDateFunction([TABLE2].DCMDATE)) 
AND ([TABLE1].CPEVENT=[TABLE2].CPEVENT) SET ...the rest of the SQL..

我的 toDateFunction:

Function toDateFunction(input As String)

toDateFunction= CDate(Right(input , 2) & "/" & Mid(input , 5, 2) & "/" & Left(input , 4))

End Function

【问题讨论】:

【参考方案1】:

因此,根据您的转换函数,您收到的 Oracle 文本格式似乎是 YYYYMMDD,对于在这种情况下使用类型转换进行连接,我更愿意反过来工作将我的访问值转换为文本,例如:

WHERE OracleTable.Date = Format(AccessTable.Date, "YYYYMMDD")

或者

INNER JOIN OracleTable ON OracleTable.Date = Format(AccessTable.Date, "YYYYMMDD")

如果您愿意,您仍然可以反向执行并将您的 Oracle 值转换为日期,这更像:

WHERE DateSerial(Left(OT.Date,4),Mid(OT.Date,5,2),Right(OT.Date,2)) = AT.Date

从字面上构建您的日期值时,我更喜欢使用 DateSerial 而不是 CDate

【讨论】:

以上是关于Access 2003 - VBA - 加入两种类型(字符串 = 日期)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Access 2003 和 VBA 中使用控件集合

Access 2003 VBA SQL“参数太少”错误

关于 MS Access 2003 和 VBA 编程

MS Access 2003 - 创建 MDE 文件失败:错误 VBA 已损坏?

有没有办法在 VBA(MS Access 2002 或 2003)中调用任何控件的更新前事件过程?

Access 2003 FORMS:当我在运行时使用 VBA 设置时,即使我关闭然后打开,ListBox 的“RowSource”仍然存在