6

私は数日間インターネットを掘り下げ、非常に古い情報を読んで、非常に古くて存在しないサイトにつながりましたが、私の目標を達成するために何が必要かを理解しました.

  1. WindowsXP を実行しているサーバーに file.mdb があるので、ODBC データ ソースに追加する必要があります。その.mdbファイルへのアクセスを許可する「システムDSN」で終わる簡単な手順でそれを行います
  2. この同じサーバーにある種の ODBC ブリッジをインストールする必要があります。これにより、このサーバーへのリモート接続を作成し、そのブリッジをサーバーの ODBC DSN に接続し、自分のものを照会できます (無料の ODBC ブリッジが見つかりませんでした)。
  3. UNIX (FreeBSD) マシンでは、unixODBC および php5-odbc パッケージをインストールして、ODBC への接続を有効にする必要があります (インストール済み)。
  4. リモートODBCに接続してMS Access dbドライバーを使用するには、UNIXマシン内にある.soファイルにunixODBC用のドライバーが必要です(無料のMS Accessドライバーが見つかりませんでした)
  5. PHP odbc_connect(DSN,user,password) を使用してそのサーバーに接続し、DSN で、使用する必要がある接続情報とドライバー (MS Access ドライバー) を提供する必要があります。

私が間違っている場合は訂正してください。そのような接続を実現する方法について、さらにアドバイスをお願いします。

4

5 に答える 5

4

最後に、解決策を見つけました。

  1. Win サーバーFreeSSHdでセットアップし、接続アカウントを構成し、ディレクトリを 1 つに設定する必要があります。
  2. UNIX サーバーsshfsでのセットアップ
  3. .mdb ファイルを使用して Win サーバー ディレクトリをマウントする

    sshfs {user}@:/ {unix マウント ポイント} -o workaround=rename,allow_other

  4. UNIXサーバーmdbtoolsでセットアップする

そこで、ドキュメントのデフォルトの PHP コードを使用して、次の PHP スクリプトを作成しました。

$rows = $cols = array();
if (($handle = popen('/usr/bin/mdb-export {unix mount point}/{file}.mdb {table} 2>&1', 'r')) !== FALSE) {
    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
        $num = count($data);
        if ($row == 1) { for ($c=0; $c < $num; $c++) { $cols[] = $data[$c]; } }
        else { for ($c=0; $c < $num; $c++) { $rows[$row][$cols[$c]] = $data[$c]; } }
        $row++;
    }
    pclose($handle);
}
print_r($rows);
  • /usr/bin/mdb-exportへのパスは、mdb-export ファイルへのパスである必要があります (自分のファイルfind / -name "mdb-export"が見つからない場合は、を使用してください)。
  • マウント ポイント{unix マウント ポイント}は空のファイル フォルダーにする必要があります (私は/usr/home/remotemdbを使用しました)
  • テーブル{table}は、mdb ファイル内のテーブル名である必要があります。コマンドでmdbファイル内のすべての可能なテーブルを照会しますmdb-tables {unix mount point}/<file>.mdb

ドライバー、構成、またはその他のものは必要ありません。プレーンな mdbtools とファイルへのアクセスだけです。この場合、ssh を介したリモート接続で実現されます。必要に応じて、ヒューズパッケージをインストールして、リモートディレクトリを自動的にマウントできますが、それは別の問題です。

これが誰かに役立つことを願っています。

于 2011-06-10T10:40:39.490 に答える
1

ODBC から ODBC へのブリッジが必要であるという点で、あなたは正しいです。

OpenLINKでは、多層 ODBC から ODBC へのブリッジを参照しています...

これは、次のようなクライアント/サーバー アーキテクチャを備えているという意味で、多層です。

Linux クライアント -- ODBC アプリケーション OpenLink 汎用 ODBC ドライバー

Windows Server -- 32 ビット OpenLink リクエスト ブローカー 32 ビット OpenLink ODBC エージェント 32 ビット Microsoft Access ODBC ドライバー (事前に構成された DSN を使用) Microsoft Access データベース ファイル。

于 2011-05-23T15:17:04.107 に答える
1

「サーバー dsn」に接続しません。DSN はローカルのものだけです。それらはリモート接続に対してまったく公開されていません。マシンをデータベースに接続する場合は、そのマシンで DSN を構成する必要があります。別の場所で指定された DSN を使用することはできません。

PHP ODBC の場合は、

$connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=/network/path/to/your/access/database.mdb", $user, $password);
于 2011-05-20T14:37:08.397 に答える
0

MDBTools で PDO を使用します。

インストール:

apt-get インストール libodbc1

apt-get インストール libmdbodbc1

apt-get インストール php5-odbc

(アパッチを再起動)

サンプル:

$query = 'SELECT * FROM Table';
$mdb_file = 'file.mdb';
$driver = 'MDBTools';
$dataSourceName = "odbc:Driver=$driver;DBQ=$mdb_file;Uid=user;Pwd=pass;";
$connection = new \PDO($dataSourceName);
$result = $connection->query($query)->fetchAll(\PDO::FETCH_ASSOC);
print_r($result);
于 2015-09-29T00:03:02.050 に答える
0

これは商用なので、おそらく興味はありませんが、Easysoft には Access 用の ODBC ドライバがあり、ほとんどの *nix で利用できます。ブリッジは必要ありません。現時点では FreeBSD でのビルドはありませんが、興味があれば月曜日にビルドしてもらうことができます。

必要なものを十分に備えているオープン ソースの MDB ツールがありますが、かなり多くの機能が不足しています。

Easysoft Access ODBC ドライバー

MDB ツール

于 2011-06-11T16:41:15.293 に答える