【问题标题】:Date formatting reverting in Access 2016 on Windows 10/IIS/Classic ASP在 Windows 10/IIS/Classic ASP 上的 Access 2016 中恢复日期格式
【发布时间】:2017-11-01 10:14:00
【问题描述】:

希望我可以足够详细地解释这个问题,以便有人让我知道可能的解决方案,或者至少让我知道没有解决方案(除了我在下面提到的那个)。

好的,我正在从以下环境迁移:

Windows XP/Access 2003/经典 ASP/IIS

到:

Windows 10 专业版/Access 2016/经典 ASP/IIS

基本上,我有一个在 IIS 中运行的本地网站,它是用 Classic ASP 编写的。这些页面在 Web 浏览器中运行,并且在 Access DB 中发生了大量的插入和更新。 Win XP 环境设置为位于澳大利亚,但是我将所有格式设置为基于美国的格式,因此所有格式都发生在“mm/dd/yyyy”中。

在 Windows XP 中,我可以在 ASP 中运行查询更新,如下将日期视为字符串:

    theDate = Now()
    SQLStmt =   "UPDATE tTable SET DateField ='" & theDate & "' WHERE DateID=1"

它工作得很好,就像日期是 2017 年 10 月 1 日一样,它将在 Access DB 表中显示为 10/01/2017。日期字段(上例中为 DateField)的日期类型为“日期/时间”类型。

所以,我安装了 Windows 10 Pro,使用 Classic ASP 设置 IIS,创建了一个虚拟目录,从 Win XP 中移动了所有文件,并将 Win 10 中的所有日期设置更改为美国格式。我还在 IIS 中将“为 ASP 应用程序配置属性”下的“区域设置 ID”更改为 1033。正在使用 Access DB,但未转换为 Access 2016(因此如果需要,可以将其移回 Win XP 环境)。

但是,运行上述查询会导致进入 Access DB 的日期为“01/10/2017”。

所以我设置了以下代码来测试日期格式:

    theDate_01 = Now()

    theDateTime = FormatDateTime(theDate_01,3)

    theDate_02 = Year(theDate_01)&"-"&Month(theDate_01)&"-"&Day(theDate_01)&" "&theDateTime

    SQLStmt =   "UPDATE tDateTest SET "
    SQLStmt =   SQLStmt & "theDate='" & theDate_01 & "'"
    SQLStmt =   SQLStmt & " WHERE DateID=1"
    Set RS = conntemp.execute(SQLStmt)

    SQLStmt =   "UPDATE tDateTest SET "
    SQLStmt =   SQLStmt & "theDate='" & theDate_02 & "'"
    SQLStmt =   SQLStmt & " WHERE DateID=2"     
    Set RS = conntemp.execute(SQLStmt)

%>

基本上,我在 Access 中有一个名为 tDateTest 的表,其中包含两列 DateID 和 theDate。

运行上述代码的结果是 theDate_01 插入不正确(即 AU 日期格式),而 theDate_02 因为我首先将其转换为 yyyy-mm-dd 格式,所以插入正确。

现在回想起来,每当我更新/插入日期时,我都会这样做,但是我的情况是,我有许多代码页,其中有许多需要更改的日期更新/插入。

有什么方法可以让 Windows 10 中的环境像 Win XP 中的那样运行,即带有日期字符串的查询只需按照我在整个过程中指定的格式插入/更新到 Access 日期/时间字段中Win 10/IIS,美国格式?

【问题讨论】:

  • FormatDateTime() 函数基于服务器的系统区域设置。
  • 我还应该补充一点,theDate_01 和 theDate_02 都在浏览器中正确呈现,如 10/01/2017。只有在数据库中更新 theDate_01 时,它才会在 Access 中显示为 01/10/2017。
  • 您能否发布 Access DB 使用的连接字符串,其中包含任何特定的服务器名称、用户和密码?

标签: ms-access iis asp-classic windows-10 ms-access-2016


【解决方案1】:

首先,您可以简单地这样做:

SQLStmt = "UPDATE tTable SET DateField = Now() WHERE DateID=1"

如果不是,强制格式化并使用八角:

SQLStmt = "UPDATE tTable SET DateField = #" & Format(theDate, "yyyy\/mm\/dd") & "# WHERE DateID=1"

【讨论】:

  • 您好,谢谢。我绝对知道我可以做你注意到的第二个格式化示例(并且第一个示例没有解决它),但我想看看是否有一种方法不必按照它的工作方式执行此操作Win XP 和保存自己必须更改多个页面/部分中的代码。
  • 当然,第一个会解决它 - 我只是不记得你的环境是否接受 Now()
  • 您不能在 VBScript 字符串中转义正斜杠。
  • 是的,你这样做,否则它将被读取(并转换)为将被本地化的 日期分隔符
  • @Gustav 在哪里谈论 VBScript 字符串,对吗?我从未见过正斜杠逃脱过,而且我已经使用 VBScript 十多年了。 VBScript 也没有Format() 函数,最接近的是FormatDateTime()。见Functions (VBScript)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 2014-05-23
  • 2017-12-11
  • 1970-01-01
相关资源
最近更新 更多