Кратким образом: одна и та же база данных возвращает даты в другом формате на разных серверах, и мне трудно настроить ее для корректировки формата даты.Конфигурирование формата даты, используемого базой данных FoxPro
У меня есть следующая ситуация: Веб-приложение на основе PHP, которое получает данные из баз данных 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. Пока приложение может справиться с форматом США: мм/дд/гггг и голландский формат: дд-мм-гггг. Программа просто предполагает, что, когда дата содержит слэши, используется формат США, и когда используются дефисы, используется формат d-m-y. Это было хорошо в течение длительного времени, но теперь мы недавно развернули программу на сервер в Бразилии, который возвращает даты в бразильском формате dd/mm/yyyy. Очевидно, что программа смущает это в формате США.
Я пытался получить базу данных для отчета в другом формате даты (США) безрезультатно. В двух разных средах, изменяющих региональные настройки окон в другую страну, немедленно изменяется формат даты, используемый базой данных. Эти dev-сред - это все системы Windows 7. Однако это не будет работать на серверах с Windows Server. Я изменил все региональные настройки (форматы, местоположение и локали системы) на нескольких серверах без каких-либо результатов. Даже после перезагрузки или переустановки FoxPro с правильными региональными настройками. Базы данных сохраняют отчетность в формате даты, в котором они, похоже, застряли.
Кто-нибудь знает, как я могу изменить формат даты, используемый FoxPro в среде Windows Server?
Другие варианты, которые я изучил, включают размещение региональной информации в DSN, но я не могу найти какой-либо возможный способ. Также заявление FoxPro SET DATE TO .....
не принимается через OleDB. Изменение приложения для понимания бразильского формата или добавления кучи инструкций if-else не похоже на возможное решение.
Это правда, но когда программа получает данные, они находятся в объекте Recordset 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