2011-01-09 11 views
0

ODBCリンクテーブルを使用してMS Access 2007データベース用にthis Performance tipを実装してテストしようとしています。Access 2007でリンクされたODBCテーブルへの持続的な接続

基本的に、リンクされたデータベースへの永続的な接続が作成されます。この例では、別のAccessファイル(.mdb)を使用しています。

私の場合、SQL Serverのリンクテーブルをファイルdsnで使用しています。私はUser/System DSNを使いたいのですが、今のところDSNファイルで作業する必要があります。私はファイルDSNとopenDatabaseメソッドに基づいて接続を取得することに問題があります。

質問:レコードセットを使用してテーブルの1つを開いてそのままにしておくと、同じ利点が見られますか?

例におけるコード:

Static dbsOpen As DAO.Database 
Set dbsOpen(x) = OpenDatabase("H:\folder\Backend1.mdb") 

CurrentDBに基づいてレコードセット:

Static rs As DAO.Recordset 
Set rs = CurrentDb.OpenRecordset("tablename") 

答えて

1

Accessでの永続的な接続から得られるためにパフォーマンス上の利点のみジェット/ ACEバックエンドに適用され、すなわち、MDB/ACCDBを使用してください。なぜなら、パフォーマンスが向上するのは、接続が開かれたときにロックファイルが作成され、接続が開いている間はロックファイルが保持されるからです。 LDBファイルを作成/ロックするオーバーヘッドは非常に高く、データにアクセスするたびにそのデータをやり直すのではなく、避けることです。

したがって、データベースエンジン固有の最適化であるため、データベースではロックファイル(Jet/ACEなど)も使用されていない限り、ODBCデータソースにはまったく影響しません。

+0

ODBC接続では、これは悪影響または中立性を持つと思いますか?接続プーリングに影響はありますか? –

+0

これは非常に肯定的ではなく、SQLサーバーがその接続を開いたままにして、その最後にリソースを使い果たしてしまうため、有害な可能性があります。一般的なアドバイスは、近い将来(1秒未満で)同じ接続を使用する場合を除き、それを閉じなければなりません。 –

+0

私はそれが問題だとは思わない、ケビン。 Jet/ACEが接続をプールするかどうかは実際には異なります。私はまた、あなたのアプリケーションが閉じているかどうかにかかわらず、ほとんどのサーバが非アクティブの後に接続を閉じると思うので、コードで行う必要なしに接続を閉じるというメリットが得られます。あなたのAccessアプリケーションが数百台のデスクトップで動作している場合を除いて、接続の数が問題になるとは思いません。ほとんどのアップサイズされたアプリはそのような状況にはありません。確かに、私は本当にそのカテゴリの多くのアクセスアプリが最初にあるとは思わない。 –

関連する問題