• 締切済み

レコードを上から順に読み込みたい

SQLを初めたばかりです。ACCESS2010を使っています。 テーブルを上から順番に読み込んで、とあるフィールドの数値に 1を足してから該当レコードを更新する単純なことがしたいのですが 上手く行きません。 現在は次のようになっています。 rs.Open "uriage", cn, , adLockOptimistic Do Until rs.EOF sql = "" sql = "UPDATE uriage SET 売上額 = 売上額 + 1" cn.Execute sql rs.MoveNext Loop これを実行すると、売上額フィールドに入っている数値に レコードの件数分の数値が足された結果となります。 例えばレコード件数が10で、売上額が1なら11、となります。 多分初歩的な事が理解できていないのだと思いますが 何故なのかがわかりません。

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No2です。クエリだけで表示するならば、 UPDATE uriage SET uriage.売上額 = [売上額]+1 WHERE uriage.ID=[IDの特定]; >とあるフィールドの数値に >1を足してから該当レコードを更新する とは、 特定のレコードの数値に1を足してから 該当のレコードを更新する と解釈しましたが、No2も含めて勘違いしていなければ、ですが。

noname#207570
質問者

お礼

有難うございます。 大変遅くなりまして申し訳ありません。 あれから色々と調べてみたのですが、piroin654さんの仰るようにWHEREを使用して更新するレコードを限定すれば(しなければ)求める結果は得られないのでは? との結論に至りました。 今だにSELECTされたレコード郡に対してMoveNextしても何故一件一件読んでくれないのか理解できていません。 その辺りのことが解説されているサイトをご存知ないですか?

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

以下のようなことですか? 以下は、カレントレコードの数値を一つ繰り上げます。 なお、フォームは表形式ですので、Me.CurrentRecord としていますが、サブフォームならば、 Me!サブフォーム表示コントロール名.CurrentRecord のようになります。 Private Sub コマンド0_Click() Dim strSQL As String strSQL = "UPDATE uriage SET uriage.売上額 = [売上額]+1 WHERE uriage.ID = " & Me.CurrentRecord & "" DoCmd.RunSQL strSQL End Sub ただ、この場合 WHERE uriage.ID の部分を WHERE uriage.売上額 としても 動かないので、レコードごとに他のたとえばオートナンバー(主キーの必要はありませんが) のような他のフィールドが必要となります。

回答No.1

単純にこの2行だけですべてのレコードの売上額に 1 加算されます。 sql = "UPDATE uriage SET c" cn.Execute sql Do ... Loop でレコード数分それを繰り返しているので、レコード件数が加算されてしまっているのです。 Do ... Loop ですべてのレコードに1加算したいのなら、下記のコードになります。 rs.Open "uriage", cn, , adLockOptimistic Do Until rs.EOF   rs.edit   rs!売上額 = rs!売上額 + 1   rs.update   rs.MoveNext Loop

noname#207570
質問者

お礼

有難うございます。 実はADOでの方法は存じておりました。 SQLでの方法が知りたかったのです。 言葉足らずで申し訳ありません。

関連するQ&A