2009-04-21 7 views
1

ODBC経由でMS SQLデータベースに接続するAccess 2007を使用しています。この検索方法はAccess VBAで可能ですか?

Name  ID  Site 
-------------------- 
Home  1  111 
Work  2  111 
Car  3  111 
Castle 4  111 
Store  1  222 
Rest  2  222 

今トリッキーな部分は知っている、このテーブルの一部だけがサイトであるということです: は、私はそれがこのようになります「拠点」と呼ばれるテーブルがあります。
私はDLookupを行い、最初のレコード(Home、1)を取得し、これらを変数に格納することができます。
しかし、私は何とか次のレコード(仕事、2)を取得し、これらを他の変数に格納してから、サイトが111で変数に格納されている間はすべてのレコードを保持するまでテーブルをループします。
アイデア これは、これらの戻り値を文字列として保存し、最終的に複雑なクエリに格納することです。

+1

IMOがセットベースのソリューションを探している必要がある場合は、手順が間違っていると思われます。結果セットをループすることによって、メモリ内の値をソートし、オプティマイザにそのジョブの実行方法を伝えようとしている2番目のクエリに値を差し込みます。 1つの問合せですべての処理を行う方がいいです(ただし複雑なものですが、オプティマイザを信頼してください)。実際には、INNER JOINを再作成しようとしているように思えます:) – onedaywhen

答えて

4

私は少し錆びますが、あなたはのようなクエリを行うことができるはずです。

SELECT * FROM Bases WHERE Site = 111 

戻り、この後、レコードセット、単にループに何が必要に応じて、保存し、将来の使用のための配列に項目を追加するレコードセットによる。

レコードセットに精通していない場合は、at this articleのように見てください。

+2

レコードセットから配列をロードするには、レコードセットのGetRows()メソッドの使用を検討してください。このリンクには、それを行う方法の明確な説明があります。 http://www.apluskb.com/scripts/How_can_I_convert_a_answer391.html – HansUp

+0

@HansUp - 同様に素晴らしい! –

0

私が前に言ったように、は、結果セットをループして2番目のクエリを構築するのが最適な解決策ではありません。

2番目の(複雑な)クエリの様子はわかりませんが、このようなことはできませんか?

select * from OtherTable 
where Name in 
(
    select Name from Bases where Site = 111 
) 
関連する問題