【问题标题】:Date format issue with vb6 on windows 7 and MS Sql databaseWindows 7 和 MS Sql 数据库上 vb6 的日期格式问题
【发布时间】:2014-01-07 03:21:01
【问题描述】:

我有一个 vb6 应用程序,它通过 Windows DSN 链接到一个 MS SQL 数据库。该应用程序正在使用 rdo 连接来连接到数据库和表。最近我的用户将他们的操作系统升级到了 Windows 7。现在他们在发布或更新时遇到了日期问题。虽然系统默认的短日期格式设置为dd/MM/yy,但应用程序仍将日期以mm/dd/yyyy 形式发布到数据库中。

奇怪的是,在代码中,日期已经按照下面的格式进行了格式化

rsPO("LAST_UPDATED_DATE") = Format(Now, "DD/MM/YYYY hh:mm:ss")

那么为什么它仍然将日期保存为mm/dd/yyyy

【问题讨论】:

  • 您是否正在查看 SQL Server Management Studio (SSMS) 中的值?如果您选择 DATETIME 值,它将有助于将内部值格式化为有意义的字符串。这 not 是否意味着它被存储为字符串。
  • LAST_UPDATED_DATE 是否定义为 varchar(或类似)或 datetime 字段?
  • 别以为跟select命令有什么关系。它仅在更新或插入新记录时发生。此外,在 Windows XP 上运行时也没有问题。
  • LAST_UPDATED_DATE 定义为日期时间。
  • 如果您的数据列是日期时间,那么您为什么要使用任何格式呢?这仅在您的列存储字符串时才有用。

标签: sql-server date windows-7 vb6


【解决方案1】:

尝试使用 ISO 格式日期。它是一种通用的日期格式,适用于所有数据库

rsPO("LAST_UPDATED_DATE") = Format(Now, "YYYY-MM-DD hh:mm:ss")

日期不会以“dd/mm/yyyy”或任何其他特定格式保存到数据库中。

您应该确保使用应用程序、操作系统和数据库所理解的相同方式来保存它

然后你就可以显示你喜欢的格式了。

ISO 格式在大多数情况下都可以正常工作。

【讨论】:

  • ISO 格式适用于所有情况。不幸的是,您的示例不是 ISO 格式。它应该是 YYYYMMDD hh:mm:ss 或 YYYY-MM-DDThh:mm:ss
  • Vb6 不支持 YYYYMMDDD" YYYY-MM-DDThh:mm:ss 格式,所以我用 App、OS 和 BD 都可以理解的格式写了日期。
  • 我写的时候没有测试我的例子,但我现在才测试,它确实有效。
【解决方案2】:

日期解释是一种语言。它不是由客户端计算机上的语言设置的。它由连接到 SQL 数据库的登录语言设置。您可以通过多种方式进行更改,使其与语言无关。

由于 LAST_UPDATED_DATE 是 DateTime,您应该可以这样做:

rsPO("LAST_UPDATED_DATE").Value = Now

如果不是,那么您应该像这样格式化您的日期:YYYYMMDD。

rsPO("LAST_UPDATED_DATE") = Format(Now, "YYYYMMDD hh:mm:ss")

在此处了解更多信息:Setting a standard DateFormat for SQL Server

【讨论】:

  • Vb6 不支持 YYYYMMDDD" YYYY-MM-DDThh:mm:ss 格式。你测试你的例子了吗?
  • @Gonzalo 我写的时候没有测试我的例子,但我现在才测试,它确实有效。
  • 感谢大家的回复。我希望我可以修改和重新编译遗留应用程序,但不幸的是,分配给 VB6 它是在非常旧版本的 Visual Studio 上编码的,并且使用非常遗留的 Crystal Report dll。由于影响,我尽量避免重新编译代码。奇怪的是它的原始形式在 XP 而不是 7 上运行良好。还有其他人面临这样的问题吗?
猜你喜欢
  • 2014-02-24
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多