アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、ランニングの記録を集計したいのですが

・記録テーブル(秒)

回数  1km走タイム 3km走タイム 5km走タイム
------------------------------------------------------
1     345     855     1411 
2    355     844     1378
3    350     881     1380


・タイム差クエリ

回数    1km    3km   5km   
-------------------------------------------------------
2     +10      -11       -33
3     -5      +37       +2


上記のように1つ上のレコードに対して数字の増減を
表示したいのですがこのようにするには
どうしたらよいのでしょうか?

A 回答 (3件)

VBAを使用してよいならば、ADOなどで接続してデータを1件ずつ読み込み、前回のデータと比べそれを該当フィールドに書き込めばよいわけですけれど。



クエリだけで考えると
まずクエリを一つ作ります。
項目は
[回数]のかわりに [前回回数]:[回数]-1 とでもしておいてください。
このクエリを実行させると、

前回回数 1km走タイム 3km走タイム 5km走タイム
---------------------------------------------------
0     345     855     1411 
1     355     844     1378
2     350     881     1380

となるはずです。

あとは、もう一つクエリを作成し、
最初のテーブルとこのクエリの[回数]と[前回回数]をリレーションシップで結び、
1km:[クエリ名]![1km走タイム]-[テーブル名]![1km走タイム] 
3km:[クエリ名]![3km走タイム]-[テーブル名]![3km走タイム]
・・・・・・・・・
としていけば、できると思います。 
    • good
    • 0
この回答へのお礼

教えていただいたクエリを2つ作って
集計したら希望通りの結果が出ました。
ありがとうございます。
もしよろしければ後学のため
VBAを使って作成する場合の方法を
教えていただけないでしょうか?

お礼日時:2006/01/24 19:28

No2です。

 変数の誤りがありました。

Lastdata1 = Rst!1km走タイム
Lastdata2 = Rst!3km走タイム
Lastdata3 = Rst!5km走タイム
正(loop前とloop内に2箇所あります。)
Lastdata1 = Rst!1km走タイム
Lastdata3 = Rst!3km走タイム
Lastdata5 = Rst!5km走タイム

VBAですので、宣言をしなくても動きますが、とりあえずこのようなつもりでした。 すみませんでした。
    • good
    • 0
この回答へのお礼

VBAだとこのようになるのですね。
クエリしか作ったことないので
このような文ははじめて見ます。
複数回に渡って回答していただき
ありがとうございました。

お礼日時:2006/01/25 23:02

VBAを使った際は、テーブルは一つだけでよいですが、フィールドに [1km],[3km],[5km] (前回比を入れる場所を用意しておいてください。



あとはどこでも良いですが、フォーム上にボタンでも作ってそのクリックイベントに

Dim Conn As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim Lastdata1 as Integer
Dim Lastdata3 as Integer
Dim Lastdata5 as Integer

Set Conn = CurrentProject.Connection
Set Rst = New ADODB.Recordset
Rst.Open "テーブル名", Conn, adOpenkeyset, adLockOptimistic
Rst.movefirst
Lastdata1 = Rst!1km走タイム
Lastdata2 = Rst!3km走タイム
Lastdata3 = Rst!5km走タイム
Rst.movenext
do while not Rst.eof
Rst!1km = Rst!1km走タイム-Lastdata1
Rst!1km = Rst!3km走タイム-Lastdata3
Rst!1km = Rst!5km走タイム-Lastdata5
Lastdata1 = Rst!1km走タイム
Lastdata2 = Rst!3km走タイム
Lastdata3 = Rst!5km走タイム
Rst.update
Rst.movenext
Loop
Rst.Close: Set Rst = Nothing
Conn.Close: Set Conn = Nothing

のように書いておいて実行させればデータが入ってくると思います。 (実際にテストはしていませんので、動かなかったらごめんなさい。)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!