- 締切済み
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 を 実行すると ちゃんと 正しいレコード数が 表示されます。 「出金」のデータ型は 長整数になっています。 どこが 悪いのでしょうか? 目的は 指定した日付の 出金の合計を取り出したいのです。 . . .
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- piroin654
- ベストアンサー率75% (692/917)
No1です。 少し説明すると、SQL文中のgokeiと、 変数宣言してのgokeiは当然ながら 別物ですから、 MsgBox gokei のgokeiは変数宣言されたgokeiです。 SQL文中のgokeiにアプローチするには この場合ならば、 rs!gokei としてSQL文中のgokeiにレコードセットから アプローチする必要があります。 つまり、変数としてのgokeiにSQL文中の gokeiのデータを伝える手順が抜けている ということです。 ここまで書けば、おそらく気がつかれるとは 思いますが。
- nicotinism
- ベストアンサー率70% (1019/1452)
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]![フォームアルファ]![テキスト] & "# ") でも良いかもですね。
お礼
うまくいきました。 後始末まで 書いて頂き ありがとうございました。
- piroin654
- ベストアンサー率75% (692/917)
>Dim gokei As Long これを削除するかコメントアウトして、 MsgBox rs!gokei とする、でどうでしょうか。 gokeiはrsのフィールド名です。
お礼
ありがとうございました。うまくいきました。 SQL文中に 使うものは 宣言しなくてもよいのですね。