
Set rst = db.OpenRecordset("SELECT a.name FROM tableA inner JOIN TABLEB ON [a].name = [b].name where [a].age <> [a].age", dbOpenDynaset)
のようなSQLで、名前は同じで年だけ違うデータを取得して
Do Until rst.EOF = True までデータを書き出す処理をアクセスのモジュールで作成しているのですが、、
なぜか結果が繰り返しでてきてしまいます。
例:
たろう 30歳
はなこ 15歳
いちこ 10歳
たろう 30歳
はなこ 15歳
・・・
のように、たろう~いちこのセットが何度もかかれてしまいます。
EOFとは、あくまでファイルの終わりを意味していて、SELECTの結果が3件の場合でも、
ファイルの30件までは繰り返し処理をしてしまうということでしょうか?
3件だけ出力するにはどうしたらいいのか教えてください。
A 回答 (3件)
- 最新から表示
- 回答順に表示

No.3
- 回答日時:
>EOFとは、あくまでファイルの終わりを意味していて、SELECTの結果が3件の場合でも、
>ファイルの30件までは繰り返し処理をしてしまうということでしょうか?
1件読むごとにMoveNextしていれば、レコード数までの処理で終わるはずです。
質問からはDoループが無限ループになるようなこともなさそうなのでVBA側での問題ではなくSQLが怪しいと感じます。
>オラクルDB上で実際動かしてはいますし、
この場合に返ってくるデータは期待どおり(上の例ですと3件ですね)でしたか?
SQL PlusやAccessのパスクエリーで確認できると思います。(すいませんOracleは詳しくないのでSQLのテスト方法に他の方法があるか知りません。)
テーブル構造や格納されているデータについての情報がないのでSQLが正しいかどうかは正しく回答することはできませんが、例えばテーブルA、Bともに下記の2レコードがあったとして(つまりテーブルABはこの例では同一のデータを持っています)
たろう 30歳
たろう 20歳
SELECT tableA.name FROM tableA inner JOIN tableB ON tableA.name = tableB.name where tableA.age <> tableB.ageのようなSQLを実行すると、次のように2レコード返ってきます。
たろう
たろう
(一方はA30歳-B20歳に対応するレコードで、もう一方はA20歳-B30歳に対応するレコードですね。テーブルAの名前しかSelectでは表示していないので同じデータに見えますが・・・)
今ちょっと予想しているのが、1つのテーブルをもとにした自己結合で、同じ名前で異なる年齢のデータを抜き出したい(上の例では1レコードだけ「たろう」と抜き出したい)のに、上記の例のような感じで複数行返ってきてお困りなのじゃないかと思っています。
No.2
- 回答日時:
DBがAccessVBAと仮定して・・・SQL文を以下のようにしたら希望の結果になりますか?
SELECT TableA.name, TableA.age FROM TableA INNER JOIN TableB ON TableA.name = TableB.name WHERE TableA.age<>TableB.age

No.1
- 回答日時:
私には理解しがたいSQLですが。
まずDBというかプラットフォームはなんでしょう?提示されているのはアクセスVBAでしょうか。
a.name FROM だけで年齢も拾うのでしょうか?
bテーブルにはどのようなデータが入っているのでしょうか?
where [a].age <> [a].age 同じテーブルの年齢が違うレコードという指定も良く判りません
もしアクセスVBAならば、VBA以前に単純なSQL文(クエリ)でデータの抽出を試みた方が良いでしょう。
この回答への補足
すみません・・・。
会社のDB名やテーブル名を使っているので、コピーするわけにはいかず、いろいろと言葉を変更していたらおかしなSQLになってしまっていました。
構文がおかしいわけではないんです。
オラクルDB上で実際動かしてはいますし、
今やろうとしているのはアクセスのVBAでのSQLです。
失礼しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Access(アクセス) アクセス レポートを開いたときにパラメーターの自動入力がしたい 4 2022/11/30 11:21
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Oracle SQL update方法 2 2022/06/22 14:07
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「更新に必要なキー列の情報が...
-
半角スペースの置換でエラーを...
-
Access2003でのテーブルの有無確認
-
【マクロ】列を折りたたみ非表...
-
Excel 2019 のピボットテーブル...
-
変数が選択リストにありません
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
エクセルグラフの凡例スペース
-
FROM の中で CASE を使えるでし...
-
Accessのクエリでデータの入力...
-
accessで重複を防ぎたい
-
Accessでコードを入れると名前...
-
ACCESSで400以上のフィールドが...
-
SQLでの変数の扱いについて
-
access2000:フォームで入力し...
-
Accessファイルを作成者以外は...
-
Access テキスト型に対する指定...
-
エクセルマクロにて最終行まで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
access2000でつまづいてます
-
「更新に必要なキー列の情報が...
-
Accessの更新前処理について。D...
-
access count数を変数に格納
-
[Access]削除時のエラーメッセ...
-
Access2003でのテーブルの有無確認
-
access vbaでクエリデータの中...
-
ACCESSのFindコマンドが遅い
-
AceessVBA 非同期処理について
-
ADOでループすると1レコードず...
-
Set rst = db.OpenRecordset("S...
-
レコードのロックについて
-
Access VBAで自動連番を振るには
-
VB2010のSQLを使ったレコードカ...
-
HerokuのDBへのinsert方法
-
Access VBA
-
テーブルの削除
-
フォーム内で複数のレコードを表示
-
adoのWHERE句 クエリだとフィ...
-
Insertの構文を教えて下さい
おすすめ情報