こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

を 実行すると ちゃんと 正しいレコード数が 表示されます。

「出金」のデータ型は 長整数になっています。

どこが 悪いのでしょうか? 目的は 指定した日付の 出金の合計を取り出したいのです。
.
.
.

投稿日時 - 2012-12-30 23:39:34

QNo.7869021

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

No1です。

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

ここまで書けば、おそらく気がつかれるとは
思いますが。

投稿日時 - 2012-12-31 00:22:24

お礼

ありがとうございました。うまくいきました。

SQL文中に 使うものは 宣言しなくてもよいのですね。

投稿日時 - 2012-12-31 10:46:16

ANo.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]![フォームアルファ]![テキスト] & "# ")
でも良いかもですね。

投稿日時 - 2012-12-31 00:19:26

お礼

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

投稿日時 - 2012-12-31 10:50:30

ANo.1

>Dim gokei As Long

これを削除するかコメントアウトして、

MsgBox rs!gokei

とする、でどうでしょうか。
gokeiはrsのフィールド名です。

投稿日時 - 2012-12-31 00:10:38

あなたにオススメの質問