【问题标题】:Display SQL time field on Access form as Access medium time hh:mm am/pm将 Access 表单上的 SQL 时间字段显示为 Access medium time hh:mm am/pm
【发布时间】:2013-11-26 16:48:09
【问题描述】:

我正在使用链接到 SQL Server 2008 R2 的 Access 2010。我的问题 - 如何在 Access 表单上将时间显示为 hh:mm am/pm 而不是 SQL Server 的 time(7) 格式 hh:mm:ss.nnnnnnn

更复杂的是,我确实有一个半小时时间范围内的所有时间的查找表?前任。在 SQL 中,查找字段显示 07:30:00.0000000 - 我想从 Access 表单中显示为上午 7:30 的下拉列表中选择一个时间,然后在 Access 表单上显示为上午 7:30。如果我选择它,我希望它在 SQL Server 中存储为07:30:00:0000000(因为我别无选择)。

我在这方面找不到任何东西。

【问题讨论】:

  • 欢迎来到 SO!你能提供一个你现在用来提取日期的代码示例吗?如果我们知道您已经在尝试做什么,我们可以更好地帮助您。

标签: sql time sql-server-2008-r2 ms-access-2010


【解决方案1】:

Access 没有 Time 数据类型,因此当它链接到 SQL Server time 列时,它会将该列映射为 Text。这就是为什么您尝试应用于链接表值的任何 Date/Time 格式说明符都无效:就 Access 而言,它是一个字符串。

如果我们有一个 SQL Server 表 [约会]:

我们在 Access 中创建了一个链接表

如果我们为该链接表创建一个 Access 表单并使用普通的旧绑定控件,我们会得到这个

[apptStart] 的文本框确实有效,但看起来不太好。解决方法是将该文本框保留在表单上,​​但将其隐藏(将其.Visible 属性设置为No),然后将另一个未绑定的文本框添加到表单中。 (在这种情况下,我将其称为 [txtStartTime]。)将新文本框的 .Format 设置为 Medium Time 并根据需要调整任何其他格式(例如,我将 Text Align 设置为 Left)。

On Current 表单事件中,计算与SQL Server 表中的开始时间对应的Access Date/time 值,并将该值填充到[txtStartTime] 文本框中。现在我们得到了一些看起来更好的东西:

如果用户想要编辑该值怎么办?在 [txtStartTime] 文本框的 After Update 事件中,我们创建相应的 SQL Server time 字符串并将该值填充到(不可见,绑定)[apptStart] 文本框中。保存记录时,新的时间值会在 SQL Server 表中更新。

表单后面的代码如下:

Option Compare Database
Option Explicit

Const accessDate0 = "1899-12-30 " ' <- note trailing space
Dim startTimeAsDateTime As Date

Private Sub Form_AfterUpdate()
    Me.Requery
End Sub

Private Sub Form_Current()
    Me.txtStartTime.Value = CDate(accessDate0 & Left(Me.apptStart, 8))
End Sub

Private Sub txtStartTime_AfterUpdate()
    Me.apptStart.Value = Format(startTimeAsDateTime, "hh:nn:ss")
End Sub

Private Sub txtStartTime_BeforeUpdate(Cancel As Integer)
    On Error GoTo txtStartTime_BeforeUpdate_Error
    startTimeAsDateTime = CDate(accessDate0 & Me.txtStartTime.Value)
    Exit Sub

txtStartTime_BeforeUpdate_Error:
        MsgBox "Start Time appears to be invalid."
        Cancel = True
End Sub

【讨论】:

  • 谢谢!有用。现在我正在尝试使用日期。
  • 惊人的详细解释。非常感谢这个带有屏幕截图的代码。
【解决方案2】:

抱歉,我没有开发环境设置,但您可以将您的 SQL 查询更改为:

SELECT Convert(varchar(5), getdate(), 108) 

给出 HH:MM 并截断其余部分以便正确显示。

然后,您可以在返回的路上投射日期。

【讨论】:

  • 我没有任何代码。我有访问表链接到我的 SQL 数据库。在我的 Access 表单上,我在 SQL 中查找到一个表,而数据进入另一个表。在这两个 SQL 表中,时间字段的数据类型都是 Time(7)。我是 SQL 新手,熟悉 Access 和 vb。即使我理解代码,我也看不到在哪里放置 Select 语句。在 Access 表单中,如果我转到字段属性,我从那里去哪里?还是我应该做一些完全不同的事情?提前感谢您的帮助!
猜你喜欢
  • 2015-05-20
  • 2017-04-08
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多