• 締切済み

クエリ表示と、ADOで抽出したレコードセットが違う

imogasiの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

クエリのデザイングリッドのところでSQLビューを表示すると、SQL文がどういうようになっているか分かるのではないですか。 <--ここがミソ そのSQL文を間違いなく写して Sub test15() Dim dbs As DAO.Database Dim rs As DAO.Recordset Set dbs = CurrentDb Set rs = dbs.OpenRecordset("select 氏名,住所 from 社員3") rs.MoveFirst Do Until rs.EOF MsgBox rs!住所 rs.MoveNext Loop rs.Close: Set rs = Nothing dbs.Close: Set dbs = Nothing End Sub でselect 氏名,住所 from 社員3の部分を変えて そのSQL文で実行して何かヒントが得られないですか。 (ちなみに上記は私のテストデータでは動きます。) ADOでやるならSQL文で開くコードでやってみるとか。

関連するQ&A

  • 削除クエリをすると、必要なレコードが消えてしまう

    店のサンプル商品を発注し、返却される一連の作業をAccessで作っています。 T顧客名‥‥フィールド:「ID」「顧客」 Tサンプル品‥‥フィールド:「CD」「商品」 T発注‥‥フィールド:「ID」「CD」「発注日」「数量」←規定値1 T返却‥‥フィールド:「ID」「CD」「返却日」「数量」←規定値1 テーブルは以上です。 クエリは、 Q発注伝票‥‥フィールド 「T顧客:ID」「T顧客:顧客」「Tサンプル品:商品」「T発注:日付」「T発注:数量」 Q返却伝票‥‥フィールドは「T発注」の部分が「T返却」に変わります。 発注されたサンプル商品が返却されたら、 クエリの発注と返却を照合し、「T顧客:ID」と「Tサンプル品:商品のサンプル商品が一致した場合、 Q発注伝票のレコードだけ削除したいと思っています。 数量は規定1で、2以上発注しないので、無視でOKなのです。 削除クエリを用いましたが、なぜか、発注伝票だけでなく、返却伝票のレコードごと無くなってしまいました。 式を変えればエラーになり、また変えれば明後日の場所が消えたり‥‥。 何度やってもうまくいきません。 どのような解決策をすればよいか、煮詰まっています。 なお、クエリの更新が自動で出来れば良いとも思っていますが、出来ますでしょうか?

  • アクセス2000でクエリを組んだのですが。。。

    こんにちわ。アクセス初心者です。まず順に追って説明します。 (1)15000件ある顧客名簿と1500件ある担当会社のテーブルをリレーションで結び、クエリを組みました。「Q_顧客名簿」と名づけました。その時点で15000件データが存在します。 (2)フォーム「Q_顧客名簿」を元にフォームを作成しました。そして氏名の曖昧検索をしたいのでまずフォームのテキストボックスに「氏名検索」と名づけて、クエリの画面に戻り「Q_顧客名簿」を元に新たなクエリを組み、「氏名」のフィールドの抽出方法に以下のような文を入れました。 『Like "*" & [forms]![集合フォーム_1]![氏名検索] & "*"』 このクエリを「Q_氏名検索」と名づけました。 (3)フォームの左端をに「Q_氏名検索」が生きるよう設定をし、「氏名検索」のテキストボックスに「再クエリ」を組んだのですが、顧客データ数が15000あるはずなのが11000まで減ってしまいました。 おそらく検索式に何かが足りないのだと思うのですが、SQLやVBAがわからないのでどうすればいいかわかりません。 アクセスの詳しい方、教えていただけませんでしょうか?よろしくお願いいたします。

  • Access クエリでレコードセット作成

    Access2010でVBAを勉強しています。クエリオブジェクトからレコードセットを作れるかお教えください。 クエリのデザイン作成で3つのテーブルからデータを抽出するクエリを作りました。 このクエリオブジェクトからレコードセットを作りたいと思っていますが、作り方がわかりません。 よってクエリオブジェクトのSQLビューでSQLを確認し、VBAの中で下記のようにSQLを作ってレコードセットを作っています。 これだと効率が悪いので、クエリオブジェクトから直接レコードセットがつくれないかと思っています。 方法がありましたらお教え下さい。よろしくお願いします。 strSQL = "SELECT master.[サイズ], master.単価," strSQL = strSQL & "Nz([入庫数量の合計])-Nz([出庫数量の合計]) AS 在庫数" strSQL = strSQL & " FROM (master LEFT JOIN Q_出庫 ON master.[サイズ] = Q_出庫.[サイズ])" strSQL = strSQL & " LEFT JOIN Q_入庫 ON master.[サイズ] = Q_入庫.[サイズ]" objADORS.Open "T_出庫", objADOCON, adOpenDynamic, adLockOptimistic

  • レコードセット クエリの数と一致しない

    アクセスvbaです。 rs.Open "Q_test", cn, adOpenStatic, adLockPessimistic intCnt = rs.RecordCount のようなコードをvbaで作ったのですが、 rs.RecordCountで取得されれる数が 実際のQ_testの数と一致しません。 Q_testの数は30レコードなのに、 rs.RecordCountは50が返ります。 Q_testは抽出条件に Not Like "*あ*" としているのですが VBAでは抽出されてないようです。 なぜ数が一致しないのでしょうか?

  • 条件を満たした次のレコードから

    初めまして(^^ ACCESSのクエリでの質問をさせて頂きます。(^^;; テーブルA  ID,重量 と2つのフィールドを持ったテーブルAがあるとします。 テーブルB (金額テーブル kg/円) 10t以下,10t以上 と2つのフィールドを持ったテーブルBがあるとします。 (内容は 10t以下: 11円 10t以上:10円) 上記のテーブルAとテーブルBのデータを使用してクエリAを作成します。 クエリA(テーブルBはテーブル表示にてクエリA内に表示させてあります。) 既存のフィールド: ID,重量 新に作成するフィールド:累計重量,金額  ID ←そのまま表示 重量 ←そのまま表示 累計重量: DSum("重量","テーブルA","ID<=" & [ID] & "") ←累計の重量を算出 金額: IIf(DSum("重量","テーブルA","ID<=" & [ID] & "")<=10000,Int([テーブルB]![10t以下]*[重量]),([テーブルB]![10t以上]*[重量]))  ↑ 累計重量で10t以下と10t以上の金額の割合を変更して算出させる。 テーブルAのデータとして↓ ID 重量 1 1000.6 2 2150.7 3 1821.2 4 5578.3 5 650.5 上記内容にてクエリAを実行すると多分下記の様に表示されます。 ID 重量   累計重量    金額 1 1000.6  1000.6   11006 2 2150.7   3151.3   23657 3 1821.2   4972.5   20033 4 5578.3  10550.8   55783  5  650.5   11201.3   6505 でも本当は下記の様な結果を得たいのです。 ID 重量   累計重量  金額 1 1000.6  1000.6  11006 2 2150.7  3151.3  23657 3 1821.2   4972.5  20033 4 5578.3   10550.8  61361 ←累計で10tを超えたレコードまでは1kg/11円で計算させたい。 5  650.5  11201.3  6505 ←ここから 1kg/10円の計算にしたい。 望む結果を得るためには下記の文にて条件を付け足していくと思いますが 金額: IIf(DSum("重量","テーブルA","ID<=" & [ID] & "")<=10000,Int([テーブルB]![10t以下]*[重量]),([テーブルB]![10t以上]*[重量])) どのような条件の付け方をすれば良いか、困ってしまいました。そのものズバリの答えをお聞きするには余りにずうずうしいと思いますので、 ヒントや似たような感じの例などをご教示頂けたらと思います。 何卒、宜しく御願い致します。

  • アクセスVBA 追加クエリ

    下記クエリが一つあります。 [Q_商品] ID 商品名 価格 色 サイズ 重さ 送料 備考 [Q_商品]から、[T_テスト]をテーブルの作成から作りました。 [T_テスト]は、毎回利用する時に、すべてデリートして、[Q_商品]のデータを追加したいです。 [T_テスト]のデータの、すべてデリートは下記VBAでできました。 Private Sub コマンド40_Click() 'システムメッセージの非表示 DoCmd.SetWarnings False DoCmd.RunSQL "DELETE FROM T_テスト" 'システムメッセージの表示 DoCmd.SetWarnings True End Sub [Q_商品]のデータを追加するVBAを教えて下さい。 よろしくお願い致します。

  • ACCESS初心者です。クエリの抽出条件の記述でお尋ねします。

    ACCESS初心者です。クエリの抽出条件の記述でお尋ねします。 更新クエリの定義で悩んでいます。どうしたら思い通りになるかご指導願います。 ★aaaフォーム a1 txt ★bbbテーブル b1 txt key b2 txt b3 txt ★ccc更新クエリ(bbbテーブル) b1 b2 b3 ★CCCクエリで抽出条件を色々試しますが結果は以下の○×の通りです。 遣りたい事は、aaaフォーム="1"でクエリ[ccc][b2]が"10"以上の場合に、[ccc][b3]を定数で更新させたいのですが、勉強不足で記述がどうしても分かりません。下記のiifはクエリ画面の[ccc][b2]列の抽出条件の記述です。 ○ iif([aaa][a1]="1","10") × iif([aaa][a1]="1",>="10") × iif([aaa][a1]="1",">=10") × iif([aaa][a1]="1","10"or"11"or"12"or"13") win xp pro ACCESS2003 です。 以上

  • 【Access】2つのクエリを1つにまとめる方法

    下記のT_Subテーブルでmain_idフィールド毎のdayフィールドの最大値のレコードを取得し、 取得したレコードの中でT_Mainのidフィールドに存在するもののみを表示したいと思い、 下記のQ_T_Sub_SelectクエリとQ_Ansクエリを作成し、 Q_Ansクエリを実行する事で意図した動作になったと思います。 その後、この2つのクエリを1つのクエリにまとめようと思ったのですが、 どのように記述すれば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、 ご教示の程よろしくお願いします。 【Q_T_Sub_Selectクエリ】 SELECT T_Sub.* FROM T_Sub WHERE (((T_Sub.id)=(SELECT TOP 1 id FROM T_Sub Q WHERE Q.main_id = T_Sub.main_id ORDER BY day DESC, id DESC ))); 【Q_Ansクエリ】 SELECT T_Main.id, T_Main.field1, Q_T_Sub_Select.id, Q_T_Sub_Select.day, Q_T_Sub_Select.field2 FROM T_Main LEFT JOIN Q_T_Sub_Select ON T_Main.id = Q_T_Sub_Select.main_id; 【Q_Ansクエリの実行結果】 T_Main.id|field1|Q_T_Sub_Select.id|day|field2 1|A|2|     |2000 3|C|6|2011/03/10|200 【テーブル(T_Main)】 id|field1 1|A 3|C 【テーブル(T_Sub)】 id|main_id|day|field2 1|1|     |100 2|1|     |2000 3|2|2011/03/04|400 4|2|2011/03/03|500 5|3|2011/03/10|300 6|3|2011/03/10|200 なお、1つのクエリにまとめたい理由ですが、最終的にはクエリではなく、 Visual Basic上に記述を移植したいと思っているためです。 ちなみに、1つのクエリをVisual Basic上に移植して SQLの実行結果を利用するイメージは何となく分かるため、 2つのクエリを1つにまとめる方法を希望しましたが、 2つのSQL文があってもクエリなどを使用せず、 Visual Basic上への記述のみで動作する方法があれば、そのような方法でも大丈夫です。 以上、よろしくお願いします。

  • アクセスのクエリでパラメータを表示させない方法は?

    超初心者の質問ですみません。。 アクセスのクエリで、ある数字の全体に対して占める割合を求めるため、以下のような式をいれています。 フィールドC: [フィールドA]/[フィールドB] このクエリを開いたときに毎回パラメータが表示されるのですが、これを表示させないためにはどのようにすればよいのでしょうか?OKを2回押せばきちんと計算された値が入ってくるのですが、毎回OKを押さずに開けるようにしたいです。 ちなみに、フィールドAとフィールドBは、あるテーブルに入っている値をクエリ側で 集計 を「合計」に設定して求めた値が入っていて、フィールドA~Cは同じクエリの中にあります。 VBAやSQLはまったく理解できません。 よろしくお願いします。

  • クエリ式でDcount の代わりは?

    クエリでわからないことがあります。 添付図のように、商品IDに対する部門IDの個数(または有無)を調べたいと思って、 部門1: DCount("[部門ID]","[T_部門]","[商品ID]=" & [T_商品情報].[商品ID] & "and [部門ID]=1") 部門2: DCount("[部門ID]","[T_部門]","[商品ID]=" & [T_商品情報].[商品ID] & "and [部門ID]=2") と、[Q_発注管理]のクエリ式に入れてカウントはできたのですが、重くなってしましました。 このような場合、簡単に下記のような結果を得られるような方法はないでしょうか? ※ 今のところ、[Q_発注管理]は、選択クエリです。、 ※ [T_商品情報]と[Q_発注管理]のレコード数(6万くらい)は同じになります。 ※ 部門1(部門2)は、個数でなく、有無(True,False)でもいいです。