2009-04-16 1 views
0

を変更する今1を除いて、アクセス2003更新アクセスリンク表基盤となるSQL Serverテーブルの列は、我々はいくつかのユーザが接続SQL Serverデータベースを持っている作品で

これは大丈夫だったを使用して(読み取り専用)彼らが見ているテーブルのかなりの部分がかなり頻繁に再作成され、このプロセスの一部にはクロス集計クエリが含まれます。

これは、データに応じて、テーブルが再生成されるたびに列の数と名前が変更される可能性があることを意味します。

ただし、Accessから再作成されたテーブルを見ると、テーブルが最初にリンクされたときにそこにあった列見出しが表示されます。

Accessデータベースを開くたびにテーブルをプログラムで再リンクする方法はありますか?

答えて

3

(エラー処理を必要としています!)

Public Function ReConnectToLinkTable() 

Dim db As Dao.Database 
Dim tdf As Dao.TableDef 

Set db = CurrentDb 
Set tdf = db.CreateTableDef("local_table_name") 

tdf.Connect = "ODBC;DRIVER=SQL Server;SERVER=server_name;UID=user_name;" & _ 
       "PWD=password;APP=Microsoft Data Access Conponents;" & _ 
       "DATABASE=database_name" 
tdf.Attributes = TableDefAttributeEnum.dbAttachSavePWD 
tdf.SourceTableName = "server_table_name"  

db.TableDefs.Delete ("local_table_name") 
db.TableDefs.Append tdf 

End Function 

それから私はのAutoExecというマクロを作成した(名前は、それが時にAccessファイルと呼ばれる保証が開かれている)、RunCodeのアクションは、ReconnectToLinkTable()関数を呼び出します。

+0

アプリを起動するたびになぜそれを実行しますか?リンクテーブルでレコードセットを開こうとしないでください。失敗した場合は、テーブルを再リンクしてください。 –

+0

@David - Accessデータベースは、技術的ではないユーザーのために、一部のデータの「フロントアプリケーション」ではありません。 通常、データをExcelにエクスポートしてさまざまなレポートを生成し、Accessデータベースを開くたびにテーブル構造が変更される確率は90%です。 (データに依存するため、ユーザーはデータが変更された場合にのみAccessファイルを再度開くことになります) – Argos

0

通常、this snippetのようなものが使用されます。 Googleで「ms access refresh link table」を検索すると、これに類似したさまざまなソリューションが見つかります。

1

サーバー上のテーブルまたはビューが変更されると、ODBCリンクテーブルが破損します。一部の変更により、それらは単に読み込み専用になり、他の変更はすべての列を単に含むことはありません。

私は、接続文字列を更新しても問題は解決しないことがわかりました。通常、欠落しているフィールドは修正されますが、読み取り専用にすることはできます。これを行う信頼できる唯一の方法は、リンクされたテーブルを即座に再作成することです。

また、リンクテーブルを使用せず、適切な接続文字列を持つ保存されたQueryDefを使用することもできます。これは更新する必要はありませんが、テーブルリンクに格納されているメタデータがAccessがデータを取得する方法を理解するのに役立ち、パフォーマンス上の問題になる可能性があります。そのメタデータがテーブルリンクに格納されていなければ、クエリが実行されるたびにその情報をサーバーから取得する必要があります。以下のようになりますVBA関数を作成していた私は何をやってしまった

+0

ありがとうございました。私の解決策に結びつく検索のためのいくつかのものをくれました – Argos

関連する問題