DOBON.NET DOBON.NETプログラミング掲示板過去ログ

二つのmdbファイルからデータの参照

環境/言語:[windows xp]
分類:[.NET]

いつもお世話になっています。

二つの異なる場所に同じmdbファイルがあり、(ファイル1.mdbとファイル2.mdb)ファイル1のテーブル1にしか存在しないデータだけをファイル2のテーブル2の方に書き込みたいのですがSQL文の書き方が分かりません。

イメージ的にはこんな感じなのですが。

Dim Cnn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim strSQL As String

Cnn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyFolder\テーブル2.mdb")


strSQL = ""
strSQL = strSQL & " INSERT INTO テーブル2"
strSQL = strSQL & " SELECT * DISTROW テーブル1.項目1,テーブル1.項目2"
strSQL = strSQL & " FROM テーブル1"
strSQL = strSQL & " LEFT JOIN テーブル2 ON テーブル1.項目1 = テーブル2.項目1"
strSQL = strSQL & " WHERE テーブル2.項目1 IS NULL"
Rs = Cnn.Execute(strSQL)

テーブル1とテーブル2の構造は同じです。

ADODB.Connectionをもう一つ(テーブル1の)作る必要があるのか、それをどうSQL文に組み込むか悩んでいます。
お世話になります。

■No15029に返信(Ashさんの記事)
Connection オブジェクトをもうひとつ作るか、
一方の mdb から、もう一方の mdb のテーブルに対して
リンクを張るかのいずれかの方法になると思われます。
考え方を変えて、DoCmd.TransferDatabaseでファイル2.mdbにファイル1.mdbのテーブル1をテンポラリーテーブルとして読み込み、ファイル2.mdb内でAshさんが示されたSQLを発行するという手もあると思います。
CreateObject("Access.Application")
を使えば、VB.NETからDoCmd.TransferDatabaseができると思います。
> (ファイル1.mdbとファイル2.mdb)ファイル1のテーブル1にしか存在しないデータだけをファイル2のテーブル2の方に書き込みたいのですがSQL文の書き方が分かりません。

ファイル1.mdb に接続しておいた上で、
 FROM [テーブル1] LEFT JOIN [C:\ファイル2.mdb].[テーブル2] ON 〜〜
とか。


> strSQL = strSQL & " SELECT * DISTROW テーブル1.項目1,テーブル1.項目2"
「* DISTROW」って、DISTINCTROW の意味でしょうか?
皆さん、沢山のレスありがとうございます。

> 「* DISTROW」って、DISTINCTROW の意味でしょうか?

そうです。すみません、書き間違えました・・・m(_ _)m
これから一つづつ試したいと思いますのでもうしばらくの間未解決にさせておいて下さい。
>
> ファイル1.mdb に接続しておいた上で、
>  FROM [テーブル1] LEFT JOIN [C:\ファイル2.mdb].[テーブル2] ON 〜〜
> とか。
>
>
上記のとうりだと正常に動いてくれるのですけれど、

TestBox1.Text = "C:\ファイル2.mdb"

Dim strTBL As String

strTBL = TextBox1.Text


FROM [テーブル1] LEFT JOIN [" & strTBL & "].[テーブル2] ON 〜〜


だと、「ファイル名が正しくありません」とエラーになるのは何故でしょうか?
> だと、「ファイル名が正しくありません」とエラーになるのは何故でしょうか?

省略してある部分のソースを見てみないとわかりませんが、もしかしたら、
文字列連結の処理に問題があって、『C:\ファイル2.mdb』ではなく、
『" & strTBL & "』というファイル名が渡されていませんか?

生成した SQL 文を、MessageBox.Show などで確認してみてください。
FROM [テーブル1] LEFT JOIN [" & strTBL.Trim & "].[テーブル2] ON 〜〜
で解決しました。
テキストのどこかに「スペース」が込まれていたと考えてもいいのでしょか???

魔界の仮面弁士さん、trapemiyaさん、なおこ(・∀・)さん、ありがとうございました。勉強になりました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板