0

最近、クライアント用の単純な Access 2010 データベースを開発しました。VBA を使用せずにマクロを使用して設計されているため、セキュリティ警告は発生しません。唯一の問題は、SQL Server Express データベースに接続された ODBC リンク テーブルを使用することであり、クライアントのコンピューターにインストールされたテーブルの接続文字列をリセットする方法が必要でした。

リンクされたテーブルを通過し、それらの名前を辞書にコピーしてから、新しいデータ ソースを使用してテーブルを再作成する単純な VBscript を開発しました。

For Each key In tcmw.Keys
    Set td = db.CreateTableDef(key)
    td.Connect = "ODBC;Description=xxx;DRIVER=SQL Server;SERVER=xxx\SQLEXPRESS;DATABASE=TCM;User=xxx;Password=xxx;"
    td.SourceTableName = key
    db.TableDefs.Append td
Next

スクリプトは機能しているように見えますが、リンクされたテーブルにカーソルを合わせると、次のデータ ソースが表示されます。Trusted_Connection=Yes指定されたユーザー名とパスワードの代わりに次のものがあります。

ODBC;Description=xxx;DRIVER=SQL Server;SERVER=xxx\SQLEXPRESS;Trusted_Connection=Yes

それは私がデータ ソースに設定したものではなく、なぜそうなるのかわかりません。リンクされたテーブルの定義に保存されたユーザー名とパスワードを取得するために欠けている手順はありますか?

4

1 に答える 1

1

はっきりとはわかりませんが、Access が資格情報を接続情報に保存するとは思いません。Access 2010 フロントエンドで SQL Server 2008 を使用しています。カーソルを合わせたときに表示される接続情報は次のとおりです。

ODBC;Driver=SQL Server Native Client 10.0;SERVER=localhost\SSE2008;APP=Microsoft Office 2010;Database=MyDatabaseName;;TABLE=dbo.SQLTableName

これは非常に大規模なプロジェクトではうまくいかないかもしれませんが、ユーザーがフロント エンドを開いたときに実際にコードを実行して、SQL Server リンク テーブルをすべて削除し、ローカル テーブルに保存した情報を使用してそれらを再作成します。この仕組みにはとても満足していますが、このプロジェクトには 22 個のテーブルしかありません。

プロジェクトでマクロのみを使用し、VBA を使用しないとおっしゃいました。少なくともリンクされたテーブルを処理するために、コードを使用せずにプロジェクトを確実に機能させることができるかどうか、私は懐疑的です。私が覚えている方法は、リンクされたテーブルが接続情報を維持することに多くの不満があったためです。私の場合、信頼できる接続 (または Windows 認証) を使用していませんでした。代わりに、ユーザーの介入なしに接続情報を維持することに関しては、回復力が低いと思われる SQL Server 認証を使用していました。

于 2013-06-21T03:06:31.817 に答える