web-dev-qa-db-ja.com

AccessはODBCを介してリモートPostgresqlデータベースに接続できますか?

現在、ODBCを介してPostgreSQLデータベースに接続するMSAccessアプリケーションがあります。これは、20人のユーザーがいるLAN上で正常に実行されます(それぞれが独自のバージョンのAccessを実行しています)。現在、いくつかの災害復旧シナリオについて考えています。データを保護するための迅速で簡単な方法は、ログ配布を使用してウォームスタンバイを作成することであるようです。

これにより、このウォームスタンバイを離れた場所に置くことを考えるようになりましたが、質問があります。

AccessはODBC使用可能を介してリモートデータベースに接続していますか?つまり、リモートデータベースは同じ国にあり、ping時間が正常で、1メガビットのSDSL回線があります。

1
Guy C

簡単な答え:はい。

長い答え:小さいデータセットを返す場合は、はい。 Accessはサーバーからフィードバックされたものからバーフするため、pgodbcドライバーで特定のフラグと設定を有効にする必要もあります。

KSQO(キーセットクエリ最適化)をオンにする必要があります。はい、私はドキュメントがそれが必要でないと言っていることを知っています、しかし何が起こっているのかはMSAccessがサーバーにかなりひどい見た目のSQLを渡しているということです。これにより、SQLステートメントが少し整理されます。私を信じないの? ODBCのロギングをオンにし、単一のクエリを送信し、ログをオフにし、数メガバイトの籾殻を耕すと、90%のところで、生成されて渡された厄介なSQLステートメントが表示されます。いいえ、それはnotODBCドライバー、それを行うのはAccessです。

大規模なデータセットをインタラクティブに表示する場合は、[宣言/フェッチを使用]をオンにする必要があります。これにより、ドライバーは、モンスターのロードを1つダンプする代わりに、結果セットのより小さなチャンクをフェッチします。

LongVarCharとしてのテキスト-これをテストすることをお勧めします。私はあなたがそれを「オン」にしたいのではないかと思います。

不明なサイズは最大に設定する必要があります。

Max Varcharは、254以下にすることをお勧めしますが、それ以上にすることもできます。

Extra Opts-0x6に設定(偽のMS SQL Server + UnicodeではなくANSIでの応答)。

(これらはすべて http://psqlodbc.projects.postgresql.org/config.html にあります)

サーバーから返されるデータは一般にコンパクトなバイナリ形式であるにもかかわらず、大きなデータセットは苦痛を引き起こすことに注意してください。

4
Avery Payne

MSAとWANデータベースに関する私の経験はこれほど素晴らしいものではありませんでした。Accessがデータベースから大量のデータを取得することを決定する瞬間が常にありました。私が成功した2つの方法は、次のいずれかです。 Accessフロントエンドをリモートサーバーにも配置してターミナルサーバーを使用するか、SQLパススルークエリを使用して、データベースサーバーとの間でやり取りする内容を明示的に制御します。

1
John McC

このシナリオでAccessアプリが適切に機能するには、最小データを取得するように設計する必要があります。Access/ Jet/ACEはデータを更新するためにリモートデータベースに毎秒pingを送信する必要があるため、バインドされていないフォームで最適に機能する可能性があります。バインドされた形式で表示されます。 ODBC更新間隔はAccessで設定できるため、完全にバインド解除されるという抜本的なルートに進む前に、それを試してみる必要があります。これは、メリットの90%を逃していることを意味します。 Accessをフロントエンドとして使用する方法。

一般的に、私は説明されたシナリオが特に実行可能であるとは思いません。これは、通常のアプリの設計を推進する災害フォールオーバー計画で、尻尾が犬を振ることを意味します。 Accessアプリに大幅な変更を加える必要がないため、リモートデータベースサーバーの近くにアプリをWindowsターミナルサーバーでホストする方がはるかに優れたソリューションになると思います。

0
David W. Fenton