Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルADOで異なる接続先のテーブル同士を結合するのにODBCを使わない場合
記事No10644
投稿日: 2011/02/18(Fri) 16:35
投稿者
解決済: ON
OS:XP
Access Version:2000

いつもお世話になっております。
ちょっと疑問に思ったのでご存知でしたら教えてください。

SQLサーバーが2台あります。
サーバーAに[注文データ]テーブル、サーバーBに[倉庫マスタ]テーブルがあり
それぞれは[品番]フィールド同士で結合が出来ます。
現状は各々をリンクテーブルやパススルークエリを使ってローカルテーブルに
作成してから加工していますが、
mdb上でADOを使って結合したテーブルを作成したいと考えています。

もしODBC経由しない(DSNを作らない)で、
テーブルを作成する(又は1つのレコードセットとして取得する)としたら
各々のレコードセットを取得して
for i=1 to rsA.RecordCount
for j=1 to rsB.RecordCount
...(検索してローカルのテーブルにレコードを追加)
Next
Next
といった具合にループでグルグルと回す方法しか思いつかなかったのですが、
他に方法はあるのでしょうか?

タイトルRe: ADOで異なる接続先のテーブル同士を結合するのにODBCを使わない場合
記事No10645
投稿日: 2011/02/18(Fri) 16:57
投稿者
解決済: ON
ごめんなさい、机上の考えで書いてしまいました、
2重のFor Nextではありませんでした、、

’Aのレコードを取得(Provider=SQLOLEDB)
rsA.Open sSql, cn, adOpenKeyset, adLockOptimistic
Do Until rsA.EOF
    ’Bのレコードを取得
sSql = "SELECT * FROM 倉庫マスタ WHERE 品番='" & rsA!品番 & "'"
rsB.Open sSql, cn2, adOpenKeyset, adLockOptimistic
If Not rsB.EOF Then
'ローカルのテーブルに追加する処理
End If
rsB.Close: Set rsB = Nothing
rsA.MoveNext
Loop
といった方法しか浮かばなかったのですが
他に方法はありますでしょうか。
どうぞ宜しくお願いいたしますm(_ _)m

タイトルRe^2: ADOで異なる接続先のテーブル同士を結合するのにODBCを使わない場合
記事No10646
投稿日: 2011/02/18(Fri) 18:59
投稿者Dodonpa
解決済: ON
こんにちは。

>もしODBC経由しない(DSNを作らない)で、
ODBC接続はOKでもDSN作成はNG という意味でしたら
Jet-SQLのIN句で対応すればいいのでは?

ODBC自体がだめなら、サーバA、もしくはサーバBに他方の
リンクサーバを立てたり、アドホックなクエリで
ストアド作成したりとかじゃだめですか?

私の知る限り、景さんご提示の方法は最遅の部類に入るかと。

タイトルRe^3: ADOで異なる接続先のテーブル同士を結合するのにODBCを使わない場合
記事No10647
投稿日: 2011/02/19(Sat) 12:07
投稿者
解決済: ON
dodonpaさんありがとうございます。
> 私の知る限り、景さんご提示の方法は最遅の部類に入るかと。
うう、お恥ずかしや、ループの都度接続はなかったですね、、
せめてループの外で接続してFindとか…それでも遅い部類ですよね。

ご指摘頂いたIN句を使って無事SQLサーバーに接続出来ました。
まだ一方のテーブルでしか確認しておりませんが、取り急ぎ解決にいたします。

又IN句から参考になりそうな過去ログも見つけられました。
http://www.accessclub.jp/bbs5/0010/vba2665.html
http://www.accessclub.jp/bbs/0157/beginers50904.html

JETやらODBCやらOLEDBやらを混同していて、
検索ばかりを頼りにしてしまっていたのですが
じっくり解説ページや本でも読んでみようと思います、、

SQLサーバ同士のリンクは、一方が管理者権限が無くて一度試したのですがうまくいきませんでした。
こちらも何分知識が浅いので調べてみます。

ありがとうございました。

タイトルRe: ADOで異なる接続先のテーブル同士を結合するのにODBCを使わない場合
記事No10648
投稿日: 2011/02/19(Sat) 15:22
投稿者
解決済: ON
お陰様で2つのテーブルの結合出来ました。
以下、結合出来たソースです。ありがとうございました。

Dim strSQL As String
Dim rs As New ADODB.Recordset

strSQL = "SELECT 注文データ.品番 , 倉庫マスタ.棚番 " & _
"From (SELECT * FROM 注文データ IN '' " & _
"[ODBC;DRIVER=SQL Server;SERVER=サーバA;DATABASE=DB名;UID=user; PWD=password] ) 注文データ " & _
"LEFT JOIN (SELECT * FROM 倉庫マスタ IN '' " & _
"[ODBC;DRIVER=SQL Server;SERVER=サーバB;DATABASE=DB名; UID=user;PWD=password] ) 倉庫マスタ " & _
"ON 注文データ.品番 = 倉庫マスタ.品番 ;"

rs.Open strSQL, CurrentProject.Connection
If Not rs.EOF Then
rs.MoveFirst
Debug.Print rs(0).Value
End If
rs.Close

タイトルhttp://www.kopi78.com/products_smallBrandId_50.html
記事No10896
投稿日: 2018/07/02(Mon) 11:14
投稿者ルイヴィトンコピー
解決済: ON
参照先http://4822
革新的で優雅な超歓迎店舗超特価!
『激安価格』本物保証!
【正規品】激安専門店.
エルメス新作超特価SALE!
市場!
【最安値開催中】全品無料!
セット組み合わせ!
100%新品!
割引【超特価】信用第一!
【大特価!】100%本物保証!
2018【品質保証書】全国送料無料!
限定SALE手ごろなお値段!
【限定特価】史上最も激安い!
専門店【新入荷】
激安通販,配送のアイテムは返品送料無料

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る