- PR -

DB2に対してリンクテーブルを”1発で”自動生成したい(AccessVBA)

1
投稿者投稿内容
NVL
常連さん
会議室デビュー日: 2006/04/03
投稿数: 45
投稿日時: 2006-06-01 19:59
いつもお世話になっております。

AccessMDBからDB2に対してDAOを使ってリンクテーブルを生成しようとしています。
なんとかリンク生成までこぎつけたのですが、1つ問題が残っています。それは「”MDBを開くたび”に、”手動でリンクテーブル作成ウィザードを起動”し、”最後のテーブル選択の画面を表示”させないといけない」という点です。その手順を踏まないと、リンク生成ロジックを実行しても、「接続に失敗しました」というエラーが表示されます。

他のMDBやSQLServerに対しては調べたサンプルで事足りたのですが、DB2に関しては情報が少なく(?)、困っております。Connect文字列あたりが怪しいのかな、とは思うの見当がつきません。何かもれている点がございましたら、ご指摘いただきたいと存じます。宜しくお願い致します。

----------------------------以下ソースコード------------------------------
Dim objTDef As DAO.TableDef
Dim strConnect As String

'接続文字列の生成
strConnect = "ODBC;Driver={IBM DB2 ODBC DRIVER};" & _
"SERVER=192.168.1.1;" & _
"DSN=MYDB2;" & _
"UID=user;" & _
"PWD=pass;" & _
"MODE=SHARE"

'リンクテーブル生成
Set objTDef = CurrentDb.CreateTableDef("table1", dbAttachSavePWD, "table1", strConnect)
CurrentDb.TableDefs.Append objTDef
ゴングラッチェ
常連さん
会議室デビュー日: 2006/03/03
投稿数: 36
投稿日時: 2006-06-01 20:34
ども。やったことがないので正解かどうかわかりませんが"もしや・・・"と思うので投稿します。

リンク先に指定するDB2上のテーブル名にはスキーマ(この表現が適切かどうか・・・)をつけてあげないといけないのかもしれません。
AccessMDBのリンクテーブル作成ウィザード使ってリンクテーブル作ると、テーブル名の前にスキーマ名がつきませんか?例えば、データベース名が"HOGE"で、テーブル名が"UHO"だとすると、"HOGE_UHO"って名前でリンクテーブル名が作られませんか?ここのところが気になります。

DAOでリンクテーブルを作成する技術があれば、逆をやってみるとわかるかもしれませんね。Accessで手動でリンクテーブルを作っておいて、DAOでリンクテーブルのTableDefがどうなっているのか見てみると。
デバッグ実行でもしてリンクテーブルのTableDefのプロパティの値をCheckなんて。いかがでしょ?

私もDB2とAccessの環境があるにはあるのですが、あえて実験してみる気力が・・・裏を取らない情報で申し訳ないですがご容赦くだされ。
NVL
常連さん
会議室デビュー日: 2006/04/03
投稿数: 45
投稿日時: 2006-06-01 21:51
コングラッチェ様、夜分遅くに早速のレス、ありがとうございます。
私は既に帰宅して自棄酒をあおっているというのに・・・・。有難いです。

スキーマの件、試してみます。SQLServerの場合はテーブル指定だけで行けたので、意識してませんでした。

あと、TableDefからのConnectプロパティの逆引き(?)ですね。一応、DB2に対して手動でリンクテーブルを作成して、MDB内のMSYSOBJECTSテーブルからConnectフィールドの値をセットしてみたんですけど、こちらは「ISAMドライバが〜」というエラーが出ました。ただ、今度はTableDefオブジェクトからConnectプロパティを調べてみます。

それにしても・・・、接続文字列ぐらい業界標準を作っておけよなぁ。もう!!
NVL
常連さん
会議室デビュー日: 2006/04/03
投稿数: 45
投稿日時: 2006-06-03 13:10
自己レスです。

教えていただいたとおり、手動で作成したリンクテーブルのConnectプロパティを放り込んでやったら、一発でリンク作成ができました。

私の今の段階での認識では、要は、ODBCデータソースありきでないと実現できないという風になっております。SQLServerの場合は、ドライバとサーバーIPアドレス、DB名などを指定すれば、ODBCのDSNがなくてもリンクできると思っていたのですが・・・。

DB2のクライアントアプリケーションからスキーマへの接続は他人にやってもらったので、そのあたり、SQLServerとは勝手が違うのかな?と勝手に解釈しております。

できればODBC DSNなしでリンクできるのが理想なんですが・・・。もし、私の解釈に誤りがございましたら遠慮なく突っ込んでやってください。
1

スキルアップ/キャリアアップ(JOB@IT)