3

以下の提案でコードを更新しました。これはテスト済みで、将来のユーザーが簡単に参照できるようにうまく機能します。


以下のコードを使用して、ユーザーごとに DSN を設定せずにリンク テーブルを作成しています。手動で接続する場合に尋ねられるように、主キーを指定するにはどうすればよいですか。

Dim sConnect    As String
Dim db          As DAO.Database
Dim tdf         As DAO.TableDef

Set db = CurrentDb

Set tdf = db.CreateTableDef
tdf.Name = "dbo_vwFeedback" ' - -- --- This is the Label that you see in Access...
tdf.Connect = "ODBC;DRIVER=SQL Server;SERVER=server01\serverinstance;DATABASE=db_name;Trusted_Connection=Yes"
tdf.SourceTableName = "vwFeedback" ' - -- --- This is the actual name in SQL Server, minus the owner.
db.TableDefs.Append tdf
CurrentDb.Execute "CREATE UNIQUE INDEX PK_dbo_vwFeedback_PrimaryKey ON dbo_vwFeedback (DataSetID, FeedbackRef) WITH PRIMARY"

注: 上記は SQL Server VIEW の場合です。SQL Server TABLE の場合も同じですが、この行は必要ありませんCurrentDB.Execute(主キーがサーバーで正しく設定されている場合)。

このコードは、テーブルをリンクし、主キーを手動で指定する場所にあります。

手動または上記の方法で SQL Server ビューのインデックスの作成を指定しない場合、読み取り専用ビューのみが取得され、誤ったデータが返される場合があります。例については、以下のコメントを参照してください。

4

1 に答える 1

6

質問のコードでテーブルをリンクした後、これを行う必要があります。

CurrentDb.Execute "CREATE UNIQUE INDEX SomeIndex ON SomeTable (PrimaryKeyColumn) WITH PRIMARY"

完全な例については、「主キーを使用してリンク テーブルを追加する VBA コード」を参照してください。

テーブルをリンクする場合は、これを行う必要がないことに注意してください。Access は主キーを自動的に検出します (以下のコメントで Remou が明らかにしたように)。

ただし、Access で SQL Serverビューをリンクするときは、Access でビューの適切な主キーを指定することが非常に重要です。
間違ったキーを指定した場合 (= 一意のレコードを識別しない列を選択した場合)、またはキーをまったく指定しなかった場合、Access はビューを読み取り専用テーブルとしてリンクします (既にお気付きのとおり)。

さらに、表示される行が台無しになります -リンクされたビューが MS Access と SQL Manager で異なる結果をもたらすのはなぜですか?を参照してください。詳細については。(私の答えと、他の答えの下にある私のコメントを
読んでください)

于 2012-07-17T18:59:04.370 に答える