訪問沒有Time
數據類型,因此當它鏈接到SQL Server time
列時,它會將該列映射爲Text
。這就是爲什麼您嘗試應用於鏈接表值的任何Date/Time
格式說明符都不起作用:就Access而言,它是一個字符串。
因此,如果我們有一個SQL Server表[預約]:
,我們創建一個鏈接表在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
歡迎SO!你能提供一個你現在使用的代碼示例嗎?如果我們知道您已經在嘗試做什麼,我們可以更好地爲您提供幫助。 – Derek