2

我在MSSQL2k8R2服務器上的日期時間字段中有一個表。我已將Access 2007中的錶鏈接起來。該表是使用Microsoft的遷移助理遷移的。按時訪問過濾器

即Managemantstudio會給SELECT TOP 3 [AbZeit], [AbBrP] FROM [dbo].[tSollFahrten]的結果

AbZeit     AbBrP 
1899-12-30 12:53:00.000 LOR 
1899-12-30 09:27:00.000 BAT 
1899-12-30 10:54:00.000 LOR 

當我要打開一個ADO記錄集,並設置過濾器,它工作得很好(但慢)。

Dim rs As New ADODB.Recordset 
rs.Open "Select * from tSollFahrten;", CurrentProject.Connection, adOpenKeyset, adLockOptimistic 
rs.Filter = "AbZeit=#12:53#" 
Debug.Print rs.RecordCount 
rs.Close 

結果是一個記錄集。但是打開已經過濾的記錄集根本不起作用。我沒有結果。

Dim rs As New ADODB.Recordset 
rs.Open "Select * from tSollFahrten where AbZeit = #12:53#;", CurrentProject.Connection, adOpenKeyset, adLockOptimistic 
Debug.Print rs.RecordCount 
rs.Close 

有沒有人知道那裏發生了什麼?

+0

它會以'=#1899-12-30 12:53#'運行嗎? – Gustav

+0

還沒有結果。 – Stefan

+0

使用ADO 6.1,我嘗試在Access 2013中運行類似的代碼,並且兩個版本都運行了預期的結果(相同的記錄數)。因此,其他事情正在發生 – Gustav

回答

1

的問題是,該時間是在存儲爲datetime SQL服務器。所以鏈接表中的字段是datetime。當時間存儲爲SQL服務器中的time(7)時,鏈接表中的字段將得到一個text。然後,按照預期,選擇將與AbZeit='12:53'一起工作。

+0

有趣。所以你的解決方案是將字段類型從'datetime'改爲'time(7)'?你仍然用#12:53#查詢? –

+1

是和不是。 @SQLPolice現在必須是'12:53',因爲現在它是訪問的文本。 – Stefan

0

由於它是一個Date/Time類型,我建議你尋找完整的日期和時間。喜歡的東西,

Dim rs As New ADODB.Recordset 

rs.Open "SELECT * FROM tSollFahrten " & _ 
     "WHERE AbZeit >= #1899-12-30 12:53:00# AND AbZeit <= #1899-12-30 12:54:00#;" , _ 
     CurrentProject.Connection, adOpenKeyset, adLockOptimistic 

Debug.Print rs.RecordCount 

rs.Close 
+0

對不起 - 仍然沒有結果。 – Stefan

1

有兩種說法之間的一個重要區別:

rs.Open "Select * from tSollFahrten;", CurrentProject.Connection, adOpenKeyset, adLockOptimistic 
rs.Filter = "AbZeit=#12:53#" 

==>在這種情況下,你首先從SQL服務器的數據,與SQL Server語法,然後你過濾它們LOCALTYACCESS SYNTAX

rs.Open "Select * from tSollFahrten where AbZeit = #12:53#;", CurrentProject.Connection, adOpenKeyset, adLockOptimistic 

==>在這種情況下,你做SQL Server語法一切。但是,Hashtag ##特定於Access,並且SQL Server不理解它。

編輯:在SQL Server中,你可以查詢小時和分鐘這樣的:

rs.Open "Select * from tSollFahrten where datepart(hh, AbZeit)=12 and datepart(mi, abZeit)=53", CurrentProject.Connection, adOpenKeyset, adLockOptimistic 
+0

啊!這是一個很好的結果。投票。 :) – PaulFrancis

+0

我同意,這是非常有趣的。 – Newd

+1

你忘記了這是一個鏈接表。然後它是Access SQL,而不是T-SQL。如果是T-SQL,「AbZeit =#12:53#'會出錯。 – Gustav