問題簡而言之:相同的數據庫在不同的服務器上以不同的格式返回日期,並且我很難將其配置爲更正日期格式。配置FoxPro數據庫使用的日期格式
我有以下情況: 一個基於PHP的Web應用程序,它從Microsoft FoxPro 9數據庫獲取數據。 數據庫連接使用OleDB進行。在PHP中,這利用ADODB通過COM對象:
$this->connection = new COM("ADODB.Connection");
$this->connection->Open($this->connectionString);
連接字符串看起來是這樣的:
Provider=VFPOLEDB.1; Mode=Share Deny None; Window Handle=0;
Locale Identifier=1033; Prompt=4; Extended Properties=0;
User ID=; Password=; Mask Password=False; Cache Authentication=False;
Encrypt Password=False; OLE DB Services=0; Collating Sequence=MACHINE; DSN=;
DELETED=True; ENGINEBEHAVIOR=80; TABLEVALIDATE=0;
Data Source=\\path\to\file.DBC
程序部署在不同的服務器遍佈世界各地,在不同版本的Windows Server上運行(2003 -2008 R2)。查詢的執行方式如下:
$this->connection->Execute($query);
這將返回一個結果集,其中包含明文中的所有值。這是問題出現的地方。這些數據庫不會使用相同的日期格式,這使得以後在PHP中處理日期變得困難。 到目前爲止,該應用程序可以應付美國格式:mm/dd/yyyy和荷蘭文格式:dd-mm-yyyy。該程序只是假定當日期包含斜槓時使用美國格式,並且在有連字符時使用d-m-y格式。 這已經很長時間了,但現在我們最近將程序部署到了巴西的服務器,該服務器以巴西格式dd/mm/yyyy返回日期。顯然現在這個計劃與美國格式混淆了。
我一直在試圖讓數據庫以不同的日期格式(美國)報告無濟於事。 在兩個不同的開發環境中,將窗口的區域設置更改爲不同的國家會立即改變數據庫使用的日期格式。這些開發環境都是Windows 7系統。 但是,這不適用於使用Windows Server的服務器。 我已在多臺服務器上對所有區域設置(格式,位置和系統區域設置)進行了更改,但沒有任何結果。即使使用正確的區域設置重新啓動或重新安裝FoxPro之後。數據庫保持報告日期格式,他們似乎卡住了。
有誰知道如何在Windows Server環境中更改FoxPro使用的日期格式?
我已經探索過的其他選項包括將區域信息放入DSN,但找不到任何可能的方法。此外FoxPro語句SET DATE TO .....
不被OleDB接受。 改變應用程序以理解巴西格式或添加一堆if-else語句似乎不是一個可行的解決方案。
確實如此,但是當程序接收到數據時,它位於ADO記錄集對象中。 這些是我必須使用的功能:http://msdn.microsoft.com/en-us/library/windows/desktop/ms675841%28v=vs.85%29.aspx 我還沒有找到方式來獲得除了它之外的其他任何東西。 – Valk6
Field對象有一個Type屬性。我還沒有和ADO合作知道如何指定它,但我相信你可以。 –
使用ADO API我並沒有真正找到解決方案。也許我應該切換到ADO PHP庫:http://phplens.com/lens/adodb/docs-adodb.htm。它具有日期格式化功能。 – Valk6