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を使用しています。
他に良いデーターベースがあれば教えてください。
よろしくお願いします。
> 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 を実行するとか。
>魔界の仮面弁士 様
レスありがとうございます。
うまくいきませんので、追加質問させてください。
上記コードの一部を
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は、どういう意味でしょうか?
すみません。
上記レスの
dbNAME = "Data.mdb" 'MDB名
dbNAME = "User.mdb" 'MDB名
は、
dbNAME_Data = "Data.mdb" 'MDB名
dbNAME_User = "User.mdb" 'MDB名
の間違いです。
なんだか、質問内容が変わってしまっているような。
使用するテーブルは、2 つだけだったはずでは?
> かっこの使い方が正しくありませんというエラーが発生します。
括弧の対応が正しいかどうか、チェックしましょう。
> どこがいけないのでしょうか?
最終結果の strSQL の内容を見せてください。
> の、AとBは、どういう意味でしょうか?
テーブル名のエイリアスです。
>魔界の仮面弁士様
レスありがとうございます。
>なんだか、質問内容が変わってしまっているような。
>使用するテーブルは、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の中にクエリーを作ってそれを参照しようかとか、
弱気になったりもしましたが、無事テーブルのみでリンクをさせることが出来ました。
ありがとうございました。
たびたびすみません。
解決チェックを忘れていました。
ツイート | ![]() |