やりたかったことは、
1.Accessのとあるテーブルを、SQL Server 2008にインポートして、複製を作る。
2.上記で作ったテーブルを、AccessからODBCで読め、かつパススルークエリを作れることの確認。
アプリのインストール
SQLEXPRWT_x86_JPN.exeとSQLServer2008SP3-KB2546951-x86-JPN.exeとSQLManagementStudio_x86_JPN.exeをインストールしたら、スタートメニューに「Microsoft SQL Server 2005」と「Microsoft SQL Server 2008」と「Microsoft SQL Server 2008 R2」の3つの項目が出来た。
失敗したかな、と思い、アンインストしてから再インストールしたが、結果は同じ。
まあいいか。
SQL Server Management StudioでAccessのテーブルをインポート
これが便利だと聞いていたので、使ってみた。
左ペインの「システム データベース」の「master」を右クリックして、「タスク」の「データのインポート」を選択し、あとはウィザードの指示通りに進めるとインポートは完了する。
(このコマンドの場所がなかなか分からなかった! しかしその他は簡単)
ODBCの設定
最初、Windowsのコントロールパネルから「データ ソース (ODBC)」を探して起動し、「SQL Server Native Cliant10.0」のドライバで登録して、そのDNSをAccessの外部データ-「ODBC接続」で呼び出したのだが、ウイザード中の「テーブルのリンク」一覧に、目的とするテーブルが出てこない。どうやったかは後述するが、色々やっているうちに、コンパネではなくAccess側から全て操作できることが分かったので、結局、途中からコントロールパネルからの登録はやめた。
注意するところは、
ウイザードで「どちらのSQLServerに接続しますか?」と聞いてきたときに、コンボボックスから選ぶことになっているが、その中のどれを選んでも接続できなかったので、SQL Server Management Studioの最初の接続の時に入っていた文字列「SAITO-HP\SQLEXPRESS」(自分の環境の場合)を入れたことと、
同じくウイザードの最後の方で「規定のデータベースを以下に変更する」のコンボボックスから、インポートの時に使ったデータベース名を選択すること(これを指定しないとシステム関係のテーブルしか出てこない)。
ともかく、苦労しつつも、ココまででAccessの画面上に地球アイコンのリンクテーブルが出現した。
(ここまでで半日かかった・・・)
パススルークエリの作成
Access側で普通にリンクテーブルを使ってクエリを作ることは、直ぐ出来た。
しかし、パススルークエリの作り方が分からない。全部を読み出す単純な選択クエリでも「ODBC–呼び出しが失敗しました」エラーが表示される。
これも正解を見つけるのに時間がかかったが、Accessで作るクエリ「SELECT * FROM dbo_master;」ではダメで、SqlServerのクエリ「SELECT * FROM master」だとOK。SQL Server Management Studioの左ペインには「dbo_master」とあるのだが、dbo_だとダメであった。
これも分かるまでに、相当の時間がかかった。
どうやって分かったかというと、SQL Server Management Studioのツールバーに「新しいクエリ」ボタンがあり、それをクリックするとクエリデザイン画面が表示され、画面上を右クリックすると「エディターでクエリをデザイン」画面が表示される。「テーブルを追加」画面にインポートしたテーブルが見えるので、それを使ってクエリを作る。それを実行すると成功して結果が表示されたので、それをコピーして、アクセスのSQL画面にペーストして実行したらOKだった。
(これも分かるのに3時間ほど・・・)