Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


427 / 2272 ツリー ←次へ | 前へ→

【11740】レコードセットの追加と編集 あおぎん 10/7/27(火) 17:01 質問[未読]
【11742】Re:レコードセットの追加と編集 10/7/28(水) 13:33 回答[未読]
【11744】Re:レコードセットの追加と編集 あおぎん 10/7/29(木) 15:51 質問[未読]
【11746】Re:レコードセットの追加と編集 10/7/29(木) 16:03 回答[未読]
【11747】Re:レコードセットの追加と編集 あおぎん 10/8/6(金) 16:55 質問[未読]
【11748】Re:レコードセットの追加と編集 10/8/6(金) 17:20 回答[未読]
【11749】Re:レコードセットの追加と編集 あおぎん 10/8/13(金) 14:21 お礼[未読]

【11740】レコードセットの追加と編集
質問  あおぎん  - 10/7/27(火) 17:01 -

引用なし
パスワード
   いつもお世話になります。
自力で調べたのですが、解決できなかったので、こちらに投稿します。
よろしくお願いします。


計算期間起:2008/4/1
計算期間至:2009/3/31
番号:1
年度:20

フォーム上のこのデータをもとに、ワークテーブルにデータを書込むようにしたいのですが・・・。

データを書き込むワークテーブルは 年度、番号、月4、月5、・・・、月3のフィールドで構成されています。
計算期間起の月の末日が計算期間至の1日後より前ならば月4に1を書込む。
1ずつ月を足していき、n月の末日が計算期間内であれば、フィールド『月n』に1を書き込む。n月が計算期間至の翌日の月と同月であれば終了。

上の条件だと次のようなデータができあがる予定です。
年度 番号 月4 月5 月6 〜 月3
20   1   1  1  1 〜  1 


で、次のようなコードを書いてみました。
データを追加するワークテーブル(rs1)にはもともとデータがないので、i=1のときはレコードを追加し、それ以外のときはレコードを編集するとしているのですが、i=2のときに、データがないとエラーになります。このコードではi=1のときにレコードは追加されてないのでしょうか??見た目は追加されたようになっているのですが。。

解決方法があればご教示ください。

どうぞよろしくお願いします。

 
  tuki_ki = Val(Format(Me!計算期間起, "m"))
  tuki_si = Val(Format(Me!計算期間至 + 1, "m"))
  nendo= Me!年度
  bangou = Me!番号

  For i = 1 To 12
  tuki = "月" & tuki_ki
 
  Dim myLooP As Long
  For myLooP = 0 To rs1.Fields.Count - 1
   If rs1(myLooP).Name = tuki Then
    If i = 1 Then
    rs1.AddNew
    rs1(myLooP) = 1
    rs1!年度 = nendo
    rs1!番号 = bangou
    rs1.Update
    Else
    rs1.Edit ←ここで、カレントレコードがないとエラーが出る。
    rs1(myLooP) = 1
    rs1.Update
    End If
   Exit For
   End If
  Next myLooP
 
 
  tuki_ki = tuki_ki + 1

  If tuki_ki > 12 Then
   tuki_ki = tuki_ki - 12
  End If

  If tuki_ki = tuki_si Then
   Exit For 
  End If
 Next i

【11742】Re:レコードセットの追加と編集
回答    - 10/7/28(水) 13:33 -

引用なし
パスワード
   雅です。

rs1.AddNew - rs1.Updateをループの外に出しましょう。
rs1.Edit - rs1.Updateは不要です。

【11744】Re:レコードセットの追加と編集
質問  あおぎん  - 10/7/29(木) 15:51 -

引用なし
パスワード
   ▼雅 さん:
>雅です。
>
>rs1.AddNew - rs1.Updateをループの外に出しましょう。
>rs1.Edit - rs1.Updateは不要です。

こんにちは。
回答ありがとうございます。

ご提示の方法でやってみたところ、

年度 番号 月4 月5 月6 〜 月3
20   1   1     
20   1      1
20   1         1
20   1            1


というデータができあがります。
これをグループ化して集計すれば、希望のデータは取得できるのですが、データがないときは追加、データがある場合は編集として、1レコードに書込むことは可能なのでしょうか??
もし方法があれば今後のために教えていただけたらと思います。

どうかよろしくお願いします。

【11746】Re:レコードセットの追加と編集
回答    - 10/7/29(木) 16:03 -

引用なし
パスワード
   雅です。

2つループがあるうちのループの一番外です。

▼あおぎん さん:
>▼雅 さん:
>>雅です。
>>
>>rs1.AddNew - rs1.Updateをループの外に出しましょう。
>>rs1.Edit - rs1.Updateは不要です。
>
>こんにちは。
>回答ありがとうございます。
>
>ご提示の方法でやってみたところ、
>
>年度 番号 月4 月5 月6 〜 月3
>20   1   1     
>20   1      1
>20   1         1
>20   1            1
>
>
>というデータができあがります。
>これをグループ化して集計すれば、希望のデータは取得できるのですが、データがないときは追加、データがある場合は編集として、1レコードに書込むことは可能なのでしょうか??
>もし方法があれば今後のために教えていただけたらと思います。
>
>どうかよろしくお願いします。

【11747】Re:レコードセットの追加と編集
質問  あおぎん  - 10/8/6(金) 16:55 -

引用なし
パスワード
   ▼雅 さん:

お返事ありがとうございます。
遅くなって申し訳ありません。

最初ループの外に出すということで下記のようにやったところ

 For i = 1 To 12
  tuki = "月" & tuki_ki
 
  Dim myLooP As Long
  For myLooP = 0 To rs1.Fields.Count - 1
   If rs1(myLooP).Name = tuki Then
      
   Exit For
   End If
  Next myLooP
   rs1.AddNew
   rs1(myLooP) = 1
   rs1!年度 = nendo
   rs1!番号 = bangou
   rs1.Update
  
  tuki_ki = tuki_ki + 1
  If tuki_ki > 12 Then
  tuki_ki = tuki_ki - 12
  End If
  If tuki_ki = tuki_si Then
 
  
  Exit For
  End If
  Next i

●結果
年度 番号 月4 月5 月6 〜 月3
20   1   1     
20   1      1
20   1         1
20   1            1


こういう結果になったので前回ご質問させていただき
今回、ご提示のとおり二つのループの外ということで

  For i = 1 To 12
  tuki = "月" & tuki_ki
 
  Dim myLooP As Long
  For myLooP = 0 To rs1.Fields.Count - 1
   If rs1(myLooP).Name = tuki Then
   
   Exit For
   End If
  Next myLooP
  
  tuki_ki = tuki_ki + 1
  If tuki_ki > 12 Then
  tuki_ki = tuki_ki - 12
  End If
  If tuki_ki = tuki_si Then
 
  
  Exit For
  End If
  Next I

  rs1.AddNew
  rs1(myLooP) = 1
  rs1!年度 = nendo
  rs1!番号 = bangou
  rs1.Update

としたのですが、

こちらでも希望のデータは取得できずに

月3 のみ 1が入力されたデータができあがりました。


書く場所がまったくの見当違いなんでしょうか???

理解が悪くて申し訳ないですが、もう少しおつきあいいただけるとありがたいです。
よろしくお願いします。

【11748】Re:レコードセットの追加と編集
回答    - 10/8/6(金) 17:20 -

引用なし
パスワード
   雅です。

>  For i = 1 To 12
>  tuki = "月" & tuki_ki
> 
>  Dim myLooP As Long
>  For myLooP = 0 To rs1.Fields.Count - 1
>   If rs1(myLooP).Name = tuki Then
>   
>   Exit For
>   End If
>  Next myLooP
>  
>  tuki_ki = tuki_ki + 1
>  If tuki_ki > 12 Then
>  tuki_ki = tuki_ki - 12
>  End If
>  If tuki_ki = tuki_si Then
> 
>  
>  Exit For
>  End If
>  Next I
>
>  rs1.AddNew
>  rs1(myLooP) = 1
>  rs1!年度 = nendo
>  rs1!番号 = bangou
>  rs1.Update

rs1.AddNew

(ループ処理)

rs1.Update

としてください。

【11749】Re:レコードセットの追加と編集
お礼  あおぎん  - 10/8/13(金) 14:21 -

引用なし
パスワード
   ▼雅 さん:

なかなか理解できずに、途中で考えるのを放棄してましたが、やっとできました!

できてみたら確かにご提示いただいたとおりだなあと。

何度もありがとうございました。


>rs1.AddNew
>
>(ループ処理)
>
>rs1.Update
>
>としてください。

427 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078193
(SS)C-BOARD v3.8 is Free