2009-05-12 8 views
7

私のシナリオ:コンピュータAには、リンクテーブルを含むAccessデータベースがあります。これらのリンクされたテーブルは、実際にコンピュータBの別のAccessデータベースに存在します。Accessでリンクテーブルを "チェーン"するにはどうすればよいですか?

ここでSQL Serverデータベースを作成し、コンピュータBのAccessデータベースにこれらのテーブルへのリンクを確立します。コンピュータDSNを構成して、コンピュータBに必要なODBC接続を定義します。アクセスデータベースBには、ローカルテーブルとリンクされたSQLテーブルの両方が含まれるようになりました。

アクセスデータベースAは、AccessデータベースBの新しいテーブルにリンクしようとしましたが、ローカルテーブルのみがダイアログボックスに表示され、リンクテーブルを追加します。 Accessでリンクテーブルにリンクすることはできません...

これは実際には本当ですか?私たちがしたいのは、データベースBのSQLテーブルのリンクがデータベースA のローカルテーブルのように存在することです。;すなわち、データベースAは、データベースB内の新しいテーブルが実際にローカルではないことを認識しない。

もちろん、私たちはコンピュータにDSNを設定することでSQLテーブルをデータベースAに直接リンクすることができますが、これは望ましくありません。ネットワーク上の他のAccessクライアントアプリケーションにシームレスにローカルテーブルとSQLテーブルの両方を提示するネクサスまたは「ゲートウェイ」としてコンピュータ/データベースBを使用したいと考えています。これは、多くのコードを変更することなく、すべてのAccessクライアントアプリケーションを徐々にSQL Serverベースのテーブルに移行できるようにする一時的な設定です。

これはできますか?私たちが考えていない別の実行可能な解決策やシナリオがありますか?

+1

どちらのマシンでもDSNは必要ありません。代わりにDSNレス接続文字列を使用してください。 –

答えて

5

はいや - あなたはSQLサーバーのデータがあまり変化しない場合は、データベース

のデータベースBに行ったSQLサーバーへのリンクを再作成する必要があり、あなただけのためにそれを使用している - あなたは唯一の本当のテーブルにリンクすることができますルックアップを使用すると、リンク可能な実際のAccessテーブルにデータをインポートできます。あなたは、各コンピュータに手動でDSNを追加する必要はありませんそのように -

EDIT

別の解決策は、動的にテーブルをリンクすることです。接続文字列にこのような何かを使用します。これは、テーブル、クエリの提案に関しては

Dim db As Database 
Dim TD As TableDef 
Dim sTableName As String ''MS Access name (can be same as SQL Server name) 
Dim sServerTableName As String ''SQL Server Name 

sTable = "Table1" 
sServerTableName = "dbo.Table1" 
sServerConnect = "ODBC;Driver={SQL Server};Server=Localhost;Database=DB1;" 

Set TD = db.CreateTableDef(sTableName) 
TD.Connect = sServerConnect 
TD.SourceTableName = sServerTableName 

db.TableDefs.Append TD 
db.TableDefs.Refresh 
0

B上のクエリ/ビューを作成できますか?AはB上のクエリ/ビュー(実際にはCのテーブル)にアクセスできるように、Cのリンクテーブルのビューです。

のような:コメントの後

 

Linked Query on A  ->  Query on B 
           : 
         Linked table on B  -> Real table on C 

編集:OK、どうやらあなたはそれは、動作しませんので、クエリにリンクすることはできません。

もう1つのアイデア:CのテーブルがすべてAにアクセスできるBに複製されるように、BとCの間でレプリケーションを設定できますか?

+0

クエリにリンクすることはできません... –

+0

"複製"とはどういう意味ですか? Jetのレプリケーションを意味する場合、no、それはそのようには動作せず、ODBCリンクテーブルはレプリケートされたMDBにいくつかの問題を提示します。 –

+0

はい私はJetの複製を意味しました。 OKはそのアイデアがどちらかを助けるつもりはないように見える。 – codeulike

0

をリンク

ODBC;Driver={SQL Server};Server=<server name/IP>;Database=<database>;UID=<user>;PWD=<password> 

を、それがFROM句でIN 'C:\OtherDatabase.mdb'句を使用することが可能です:

SELECT qryMyTable.* 
FROM qryMyTable IN 'c:\OtherDatabase.mdb'; 

これは、クエリの内容が他のデータベースに格納されているデータベースに表示されます。他のデータベースへのそのパスが変更されない場合、このメソッドを使用して、他のデータベースのリンクされたテーブルにピギーバックすることができます。

+0

これは、2つのデータベースが同じワークグループファイルを共有していることを前提としています。 – onedaywhen

+0

適切な認証情報と適切なワークグループファイルの場所を含む完全な接続文字列を提供できない場合。 –

+0

ワークグループファイル(mdw)へのパスをどのように指定しますか?私はAccessのMVPがJetのアーキテクチャーによって可能にならないと私に確信させてから何年も前に諦めました。しかし、あなたがそれをやる方法を知っていれば、私は喜んで学ぶでしょう。あなたに教えてください:私はあなたに新しい質問を始めるでしょう、そしてあなたはそれに答えることによっていくつかの担当者を得ることができます:)このスペースを見る... – onedaywhen