VB6からのMDBテーブル参照について

解決


VBパダワン  2007-03-07 18:34:37  No: 135668

VB6からACCESSのMDBに接続してSQLを使い、データの読み書きをしています。
あるシステムで、2つのMDBを使用しており、1つ目のMDB(Data.mdb)にはシステムデータが格納され、
2つ目のMDB(User.mdb)には、ユーザーのデータが格納されています。
Data.mdbは、後から追加されたテーブルやレコードがあった場合、このMDBを入替えることによって、
対応しようと思っています。このシステムのオペレータからデータが書き換えられることはありません。
User.mdbは、このシステムのオペレータによりデータが書き換えられ、データのバックアップを取る際には、
このMDBを退避しておけばOKというようにしています。

さて、ここからが質問ですが、以下のコードでMDBからテーブルを参照していますが、

    ' ADOのオブジェクト変数を宣言する
    Global DataMDB As New ADODB.Connection
    Global UserMDB As New ADODB.Connection
    Global Record  As New ADODB.Recordset
    ' MDB を定義する
    Global dbNAME  As String
    Global dbPath  As String
    Global Table1  As String
    Global Table2  As String
    Global Table3  As String
    'SQL用
    Global strSQL  As String
    Global strData As String

    ' 変数の定義
    Table1 = "Data1"
    Table2 = "Data2"
    Table3 = "User1"

    ' MDB との接続を確立する
    dbPath = App.Path & "\Data\"
    dbNAME = "Data.mdb" 'MDB名
    DataMDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & dbPath & dbNAME & ";"
    dbNAME = "User.mdb" 'MDB名
    UserMDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & dbPath & dbNAME & ";"

    strSQL = "Select * from " & Table1
    strSQL = strSQL & " where  Data_Name = '" & strData & "'"
    Set Record = DataMDB.Execute(strSQL)  ・・・・・・・・・・・・・・・・・・・・・・・①

①でData.mdbにあるData1というテーブルを参照していますが、もし仮に、
Data.mdbのData2
User.mdbのUser1
この2つのテーブルをリンクさせて参照したい場合、どうコーディングすればいいでしょうか?
Data.mdbの、Data1とData2という同じMDBであればリンクの仕方はわかりますが、
異なるMDBであった場合、どうリンクするのでしょうか?

また、別質問になりますが、VB6でデーターベースを扱う場合は、通常どういったデーターベースを使うのでしょうか?
Oracleとか、SQL SERVER等は、ユーザーの環境にそれ自体が入っていないと動かないと思います。
(SQL SERVERは動いたかもしれない・・・?)
よって、ACCESSがインストールされていなくても参照できるMDBを使用しています。
他に良いデーターベースがあれば教えてください。
よろしくお願いします。


魔界の仮面弁士  2007-03-07 21:57:27  No: 135669

> Data.mdbのData2
> User.mdbのUser1

C:\User.mdb へのコネクションから、
    SELECT A.Field1, B.Field2
     FROM [C:\Data.mdb].[Data2] A
     INNER JOIN User1 B ON A.ID = B.ID
のような SQL を実行するとか。


VBパダワン  2007-03-08 03:06:58  No: 135670

>魔界の仮面弁士 様
レスありがとうございます。
うまくいきませんので、追加質問させてください。
上記コードの一部を

    dbNAME = "Data.mdb" 'MDB名
    dbNAME = "User.mdb" 'MDB名

と変更し、
>C:\User.mdb へのコネクションから、
とは逆に、Data.mdbコネクションから、以下のSQLを実行しました。

    strSQL = "Select * "
    strSQL = strSQL & " from " & Table1 & " INNER JOIN (" & Table2 & " INNER JOIN ["
    strSQL = strSQL & dbPath & dbNAME_User & "].[" & Table3 & "] ON "                                     ・・・②
    strSQL = strSQL & Table2 & ".User_ID = [" & dbPath & dbNAME_User & "].[" & Table3 & "].User_ID) ON "  ・・・③
    strSQL = strSQL & Table1 & ".Data_ID = " & Table2 & ".Data_ID "

そうすると、③の部分で、かっこの使い方が正しくありませんというエラーが発生します。
[" & dbPath & dbNAME_User & "].[" & Table3 & "].User_ID  の部分は、
[C:\User.mdb].User_ID
という文字列になっています。
②の部分は通っている感じです。
どこがいけないのでしょうか?

また、
>    SELECT A.Field1, B.Field2
>     FROM [C:\Data.mdb].[Data2] A
>     INNER JOIN User1 B ON A.ID = B.ID
の、AとBは、どういう意味でしょうか?


VBパダワン  2007-03-08 03:08:22  No: 135671

すみません。
上記レスの
    dbNAME = "Data.mdb" 'MDB名
    dbNAME = "User.mdb" 'MDB名

は、
    dbNAME_Data = "Data.mdb" 'MDB名
    dbNAME_User = "User.mdb" 'MDB名

の間違いです。


魔界の仮面弁士  2007-03-08 04:47:46  No: 135672

なんだか、質問内容が変わってしまっているような。
使用するテーブルは、2 つだけだったはずでは?

> かっこの使い方が正しくありませんというエラーが発生します。
括弧の対応が正しいかどうか、チェックしましょう。

> どこがいけないのでしょうか?
最終結果の strSQL の内容を見せてください。

> の、AとBは、どういう意味でしょうか?
テーブル名のエイリアスです。


VBパダワン  2007-03-08 20:10:01  No: 135673

>魔界の仮面弁士様
レスありがとうございます。

>なんだか、質問内容が変わってしまっているような。
>使用するテーブルは、2 つだけだったはずでは?
本当のところは、1つのMDBにつき2つのテーブルを参照し、
2つのMDBから合計4つのテーブルをリンクさせたかったのですが、
其の一歩手前の、「2つのMDBをリンクさせる」というところからつまずいていましたので、
最初のような質問にしました。それがわかれば後は応用でいけると思ってましたので。

で、結果として、合計4つのテーブルをリンクさせることが出来ました。
コードは、

    'テーブル
    Table1 = "Data1"
    Table2 = "Data2"
    Table3 = "User1"
    Table4 = "User2"

    strSQL = "Select * "
    strSQL = strSQL & " from " & Table3
    strSQL = strSQL & " INNER JOIN (" & Table4
    strSQL = strSQL & " INNER JOIN ([" & dbPath & dbNAME_Data & "].[" & Table1 & "] A "
    strSQL = strSQL & " INNER JOIN [" & dbPath & dbNAME_Data & "].[" & Table2 & "] B ON "
    strSQL = strSQL & "A.DataID = B.DataID) ON "
    strSQL = strSQL & Table4 & ".ItemID = A.ItemID) ON "
    strSQL = strSQL & Table3 & ".UserID = " & Table4 & ".UserID"

です。
エイリアスの意味もわかり、かなり勉強になりました。
一時期は、MDBを一つにしようかとか、MDBの中にクエリーを作ってそれを参照しようかとか、
弱気になったりもしましたが、無事テーブルのみでリンクをさせることが出来ました。
ありがとうございました。


VBパダワン  2007-03-08 20:38:41  No: 135674

たびたびすみません。
解決チェックを忘れていました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加