2013-11-25 25 views
1

我正在使用鏈接到SQL Server 2008 R2的Access 2010。我的問題 - 我如何在Access窗體上顯示時間爲hh:mm am/pm而不是SQL Server的時間(7)格式爲hh:mm:ss.nnnnnnn在Access窗體上顯示SQL時間字段爲訪問媒體時間hh:mm am/pm

讓事情變得複雜,我在半個小時的時間範圍內有一個所有時間的查找表?防爆。在SQL中,查找字段顯示爲07:30:00.0000000 - 我想從Access窗體中的下拉列表中選擇一個時間,該窗體顯示上午7:30,然後在上午7:30顯示在Access窗體中。如果我選擇它,我希望它作爲07:30:00:0000000存儲在SQL Server中(因爲我沒有其他選擇)。

我在這找不到任何東西。

+0

歡迎SO!你能提供一個你現在使用的代碼示例嗎?如果我們知道您已經在嘗試做什麼,我們可以更好地爲您提供幫助。 – Derek

回答

0

對不起,我沒有一個開發環境設置,但你可以改變你的SQL查詢:

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

給HH:MM並截斷其餘因此它顯示正確。

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

+0

我沒有任何代碼。我有Access錶鏈接到我的SQL數據庫。在我的Access表單上,我查找了SQL中的一個表,並將數據放入另一個表中。在這兩個SQL表中,時間字段的數據類型都是時間(7)。我是SQL新手,熟悉Access和VB。儘管我理解代碼,但我並沒有看到Select語句的位置。在Access窗體中,如果我轉到字段屬性,我該從哪裏去?或者我應該做一些完全不同的事情?感謝您的幫助! – user3033348

2

訪問沒有Time數據類型,因此當它鏈接到SQL Server time列時,它會將該列映射爲Text。這就是爲什麼您嘗試應用於鏈接表值的任何Date/Time格式說明符都不起作用:就Access而言,它是一個字符串。

因此,如果我們有一個SQL Server表[預約]:

sqlTable.png

,我們創建一個鏈接表在Access中,我們得到

accessTable.png

如果我們創建一個訪問形式對於該鏈接表並使用普通的舊界限控件,我們得到這個

form1.png

[apptStart]的文本框確實有效,但看起來並不太好。解決方法是將該文本框留在窗體上,但將其隱藏(將其.Visible屬性設置爲No),然後將另一個未綁定的文本框添加到窗體。 (在這種情況下,我稱它爲[txtStartTime]。)將新文本框的.Format設置爲Medium Time,並根據需要調整任何其他格式(例如,我將Text Align設置爲Left)。

On Current表單事件中,計算對應於SQL Server表中開始時間的Access Date/time值以及將值填入[txtStartTime]文本框中的值。現在我們得到的東西看起來好一點:

form2.png

現在,如果有什麼用戶想編輯的價值?在[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 
+1

謝謝!有用。現在我試着用日期。 – user3033348

+0

令人驚歎的詳細解釋。非常感謝這個帶有屏幕截圖的代碼。 –