要するに、同じデータベースが異なるサーバーでは異なる形式で日付を返すため、正しい日付形式に設定するのに問題があります。
次の状況があります: Microsoft FoxPro 9 データベースからデータを取得する PHP ベースの Web アプリケーション。データベース接続は OleDB で行われます。PHP では、これは COM オブジェクトを介して ADODB を利用します。
$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 に対応しています。プログラムは、日付にスラッシュが含まれている場合は US 形式が使用され、ハイフンが含まれている場合は dmy 形式が使用されると想定しています。これは長い間順調に進んでいますが、最近、プログラムをブラジルのサーバーに展開しました。このプログラムは、ブラジルの形式 dd/mm/yyyy で日付を返します。プログラムは明らかにこれを米国の形式と混同しています。
データベースに別の日付形式(米国)で報告させようとしましたが、役に立ちませんでした。2 つの異なる開発環境で、Windows の地域設定を別の国に変更すると、データベースが使用する日付形式がすぐに変更されます。これらの開発環境はすべて Windows 7 システムです。ただし、これは Windows Server を使用するサーバーでは機能しません。複数のサーバーですべての地域設定 (形式、場所、システム ロケール) を変更しましたが、結果はありません。正しい地域設定で FoxPro を再起動または再インストールした後でも。データベースは、スタックしているように見える日付形式で報告し続けます。
Windows Server 環境で FoxPro が使用する日付形式を変更する方法を知っている人はいますか?
私が調査した他のオプションには、地域情報を DSN に入れることが含まれますが、可能な方法を見つけることができませんでした。また、FoxPro ステートメントSET DATE TO .....
は OleDB では受け入れられません。ブラジルの形式を理解するようにアプリケーションを変更したり、多数の if-else ステートメントを追加したりすることは、実行可能な解決策とは思えません。