
DAOでSQLServerに接続し、LeftJoinで別DBのテーブルを参照したい。
いつもお世話になっております。
標題についてなのですが、
VB6.0、SQLServer2008Expressで開発を行なっております。
接続にはDAOを利用しています。
その際に、AというDBのT1というテーブルとBというDBのT2というテーブルのデータを結合して抽出したいのですが、エラーが出てしまいます。
ソースは以下の通りです。
Dim DBR As Database
Dim T_TEST As Recordset
Set DBR = Workspaces(0).OpenDatabase("", False, False,
"ODBC;Driver={SQL Server};SERVER=hoge;DATABASE=A;UID=sa;PWD=admin")
Set T_TEST = DBR.OpenRecordset("select * from T1 left join B.dbo.T2 on T1.AAA = T2.AAA")
で実行すると、T_TESTをOPENするところで、実行エラー3024が発生します。
エラー内容は「ファイル C:\*******\B.dboが見つかりません」と、ソースが保存されているフォルダにB.dboがありませんといった内容です。
クエリは、ManagementStudioでは問題なく抽出できました。
DBRでAを開いて、Bが開けていないからだとは思うのですが、どのようにすれば複数のDBに存在するテーブルのデータを結合して取得できるでしょうか。
ご教授お願いいたします。
No.3ベストアンサー
- 回答日時:
Aだけで正常終了しましたか。
。。AがよくてBはだめ。ManagementStudioはOKでVB6ではだめ。
構文は間違いなく合っていますので、あとは、B.dboの部分です。
正式な名称は違うと思いますが、正式名に予約語や全角 2 バイト文字や半角カタカナは入ってませんか?
また、Bの所有者はdboですか?でしたらsaで統一してみるとかとか・・・
Bを疑うような部分がでてきましたら、
データベースをもう一個「TestDB」でのような半角英数字だけの名前で作成してそこに同じテーブルを作成し、テーブルAとLeft Joinしてみてください。
これで表示されるのでしたら、Bのデータベース設定に問題ありでしょう・・・
これ以外だと・・・・ごめんなさい。降参です。。。
何度もありがとうございます。
調べていくと、SQL文をDAOが解釈してSQLServerに投げているから
その解釈の部分を飛ばすように以下のように書き換えると良いという
記事を見つけたので試してみたら、うまく行きました。
サブクエリとかも同じ理由でダメだそうです。
うーん。良く分かりません。。。
OpenRecordset(Query, dbOpenDynaset, dbSQLPassThrough)
dbSQLPassThroughで、SQL文をまんまSQLServerに投げかけるみたいです。
No.2
- 回答日時:
ごめんなさい。
エラーが違っていたのは、無駄に[]とAsを付けてしまいました。
Set T_TEST = DBR.OpenRecordSet("Select * From T1 Left Join B.dbo.T2 TEST2 on T1.AAA = TEST2.AAA",dbOpenDynaset, dbSeeChanges)
これでいかないとなると・・・ODBC文ですかね~?
試しにAのT1だけで(Left joinしないで)試してみては?
この回答への補足
再度ありがとうございます。
[ ]をどけて試してみると、質問文と同じエラーに戻ってしまいました。
Left Join無しだと正常にデータが取得できます。
No.1
- 回答日時:
当方の環境では問題ありませんでした。
>BRでAを開いて、Bが開けていないからだとは思うのですが
これはSQLServerにAとBのデータベースがあるのでしたら、問題ないと思います。
セキュリティも同じと思いますので・・・
OpenRecordSetの部分がちょっと違ったので、確認します。
Set T_TEST = DBR.OpenRecordSet("Select * From T1 Left Join [B].[dbo].T2 As TEST2 on T1.AAA = TEST2.AAA",dbOpenDynaset, dbSeeChanges)
でOKだったのです・・・
Bの存在 DBのアクセス権 SQLServer上でのDBの存在などなどそちらのチェックが先なのかな?と思います。
的外れならごめんなさい・・・
この回答への補足
ご回答ありがとうございます。
Bは同じインスタンスに存在しております。
SQL文を以下のように変更し、optionも同じに指定して再度試してみたのですが、ダメでした…。
select * from T1 left join [B].[dbo].T2 AS T_TEST on T1.AAA = T_TEST.AAA
ですが、エラーメッセージが「From句の構文エラーです」に変わりました。
同じくManagementStudioでは正常に取得できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Access(アクセス) Access DAOのExecuteメソッドのオプション(RecordsetOptionEnum)に 1 2022/09/19 07:34
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスで定数を利用したい。
-
データがあれば○○なければのSQL
-
【access】複数のフィールドの...
-
重複した複数のレコードを1レ...
-
VBAからADOを使ってクエリのク...
-
MS ACCESSで
-
Access vbaで重複レコードの削...
-
Access から Excelのシートをイ...
-
Accessで縦と横を入れ替えたい
-
社員名簿から検索する関数
-
SQLServer→Access インポート
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBA エンターキーでイベントに...
-
Excelシート上のマクロを登録し...
-
エクセルVBAで、MsgBox やInput...
-
switch の範囲指定
-
VB.NET Excelを読み込んでDataT...
-
ボタンクリックイベント 重複...
-
EXCEL VBA マクロ 実行する度に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データがあれば○○なければのSQL
-
ACCESS DCOUNTの抽出条件について
-
【access】複数のフィールドの...
-
Access vbaで重複レコードの削...
-
ACCESS VBAでテーブル内の特定...
-
アクセスで定数を利用したい。
-
sql文で削除クエリを書く
-
SQLServer→Access インポート
-
ACCESSで実行時エラー3008
-
VBAでテーブル名とカラム名を動...
-
VB.NETでテーブルを作成
-
アクセスで連続データをテーブ...
-
重複した複数のレコードを1レ...
-
Accessで縦と横を入れ替えたい
-
別のaccessファイルからデータ...
-
アクセスのテキスト型フィール...
-
抽出条件でデータ型が一致しま...
-
Access から Excelのシートをイ...
-
Accessリンクするテーブルが見...
-
ACCESSのクエリ、SQLに変数を使...
おすすめ情報