MS Access日期/时间格式问题?

时间:2017-10-03 16:52:57

标签: ms-access

这可能是重复的,但我对MS Access DB有一个奇怪的问题。

当我为 req_date 列更新日期/时间值时,我遇到了问题。

10-03-2017

正在更新如下

10-03-2017

其中

10-18-2017

正在更新如下

18-10-2017

我在c#中使用以下代码来执行查询:

query = "update gb_jobs set req_delivery=myDate"
myCMD = new OleDbCommand(query, con, trans);
int tempCnt = myCMD.ExecuteNonQuery();

其中myDate已从日期时间转换为字符串,

根据Albert的解决方案,我将 myDate 连接到 #myDate#但是它引发了以下错误:

query = "update gb_jobs set req_delivery=#myDate#"

Error : Data type mismatch in criteria expression.

1 个答案:

答案 0 :(得分:3)

您没有提及更新相关列的位置/时间/方式。

作为一般规则,如果VBA变量类型是实际的DATE类型变量,那么您可以将这些值直接分配给代码中的控件或记录集。

但是,如果您的任何代码使用字符串结果,那么无论计算机的区域设置如何,您都必须将字符串格式化为USA格式。因此,您的区域设置会将日期显示转换为漂浮在船上的任何内容。

因此,您的任何日期格式都必须为mm / dd / yyyy。根据您的示例,您似乎遵循该格式。这表示您将DISPLAY设置为DD / MM / yyyy。所以理论上你到目前为止给出的是正确的行为。

这表明您的结果10-03-2017 ACTUALLY意味着2017年3月3日。事实上它实际上是三月而不是十月。

因此,在VBA代码中更新(或查询)某些数据,你必须去:

dtStart    as date
dtEnd      as date

如果您设置上述两个日期的值,那么要查询数据,您必须:

strWhere = "InvoiceDate >= #" & format(dtStart,'mm/dd/yyyy') & "#" & _
       " and InvoiceDate <= #" & format(dtEnd,"mm/dd/yyyy") & "#"

Docmd.OpenReport "rptInvoice",acViewPreview,,strWhere

因此,任何使用SQL查询或更新值的代码都必须将数据重新格式化为USA格式(mm / dd / yyyy)。控件和表单将显示的内容与Windows区域面板中的内容一样,但所有内部代码必须将字符串格式化为mm / dd / yyyy。

所以不清楚你是如何进行更改的,但是从你到目前为止给出的信息来看,你的信息显示是dd / mm / yyyy,但你输入的数据是mm / dd / yyyy这是正确的。如果您在表单上输入此数据而不使用代码,那么根据您提供的日期格式,由windows设置为dd / mm / yyyy。