2013-10-14 77 views
1

我在兩臺不同的Windows 7計算機上運行SAME Delphi 2007代碼並訪問遠程服務器上的SAME SQL Server數據庫。在一臺機器上,數據庫中的日期以2013-01-25 00:00:00.000的格式讀取,導致應用程序在嘗試將此日期轉換爲DateTime時崩潰。在另一臺機器上,以1/25/2013的格式讀取日期,該日期正確地轉換爲日期時間,沒有任何問題。是什麼造成這種差異? (我確認兩臺機器上的控制面板的「區域和語言」設置是相同的)。數據庫中的日期存儲爲datetime2。SQL Server日期格式處理

+0

不知道關於Delphi的任何信息,但您遇到問題的'YYYY-MM-DD hh:mm:ss'是sql server中日期的標準返回格式,您的代碼應該可以修復爲處理它。另外,你可以發佈你從數據庫中提取信息的代碼嗎? – Kevin

+0

是的,我知道Cast和Convert函數,但是我必須在每個日期轉換爲DateTime的時候實現這一點,這將是一個巨大的努力。我想知道是否有一種方法可以在建立與db的連接後運行查詢ONCE來完成此操作。代碼很簡單:aQuery:'從aTable中選擇curr_date'myDate:= aQuery.FieldByName('curr_date')。asDateTime。如果我在執行'myDate'之前檢查aQuery.FieldByName('curr_date')的值,在一臺機器上它是2013年1月25日,而另一臺機器是2013-01-25 00:00:00.000 –

+0

數據庫中的數據類型是curr_date? – Kevin

回答

2

在一臺機器上,數據庫中的日期以格式2013-01-25 00:00:00.000讀取,導致應用程序在嘗試將此日期轉換爲DateTime時崩潰。在其他計算機上的日期被讀取其中正確地轉換爲datetime沒有任何問題

我不知道德爾福,但是,從SQL Server端的任何格式的2013年1月25日:

日期是Date,沒有格式。如果您的列的數據類型爲Date,則轉換爲DateTime時不應出現任何錯誤。

我懷疑你可能會在字符串類型字段中存儲日期,在這種情況下,最好在轉換爲DateTime之前使用文化特定的ISO or ISO8601 format

+0

所有日期都是datetime2 –

+0

您是否試圖在Delphi代碼中將字符串轉換爲日期? – Kaf

+0

不,我只是運行語句myDate:= aQuery.FieldByName('curr_date')。asDateTime和應用程序在某些機器上的這一行崩潰,但不是其他機器。 –