• 締切済み

ACCESSの SELECT SUM

SELECT SUMを 計算させると ゼロしか 出てきません。 どこが悪いのでしょうか?  日付         出金       氏名 2012/12/10      540      安田 2012/12/10      1020      斉藤 2012/12/10       970      TOM 2012/12/11      650      池田  2012/12/11     2010      南 2012/12/12      350      林田 2012/12/12     1200      加藤 のようなテーブルがあり Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As Recordset Dim gokei As Long Set Db = CurrentDb SQL = "SELECT Sum(出金) as gokei FROM テーブル  WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) MsgBox gokei End Sub を フォームアルファに 新しく作ったコマンドボタンのクリック時に 書きました。 これを テキストの日付を変えておいて いろいろ試しても ゼロのメッセージしか出ません。 WHERE以下が 間違っていないか 試しに Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As Recordset Dim Count As Long Set Db = CurrentDb SQL = "SELECT (出金)  FROM テーブル  WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) If rs.EOF Then Count = 0 Else rs.MoveLast Count = rs.RecordCount End If MsgBox Count End Sub を 実行すると ちゃんと 正しいレコード数が 表示されます。 「出金」のデータ型は 長整数になっています。 どこが 悪いのでしょうか? 目的は 指定した日付の 出金の合計を取り出したいのです。 . . .

みんなの回答

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

No1です。 少し説明すると、SQL文中のgokeiと、 変数宣言してのgokeiは当然ながら 別物ですから、 MsgBox gokei のgokeiは変数宣言されたgokeiです。 SQL文中のgokeiにアプローチするには この場合ならば、 rs!gokei としてSQL文中のgokeiにレコードセットから アプローチする必要があります。 つまり、変数としてのgokeiにSQL文中の gokeiのデータを伝える手順が抜けている ということです。 ここまで書けば、おそらく気がつかれるとは 思いますが。

knownew
質問者

お礼

ありがとうございました。うまくいきました。 SQL文中に 使うものは 宣言しなくてもよいのですね。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

SQL文には問題は有りません。 VBAの変数 goukei とSQL文中の goukei とはまったく無関係です。 なので、DAOでの処理の様ですので・・、☆は変更・追加点 Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As DAO.Recordset ’☆Recordset オブジェクトはADOにも有るため Dim gokei As Long Set Db = CurrentDb SQL = "SELECT Sum(出金) as gokei FROM テーブル WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) MsgBox Rs!gokei ’☆ Rs.close:set rs = nothing ’☆後始末 Db.close:set Db = nothing ’☆ End Sub のようになります。 でも今回の場合は、レコードセットを開かずともDsum関数で Dsum("出金","そのテーブル名","日付 = #" & [Forms]![フォームアルファ]![テキスト] & "# ") でも良いかもですね。

knownew
質問者

お礼

うまくいきました。 後始末まで 書いて頂き ありがとうございました。

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

>Dim gokei As Long これを削除するかコメントアウトして、 MsgBox rs!gokei とする、でどうでしょうか。 gokeiはrsのフィールド名です。