Access VBA質問箱 IV

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

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


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

【8063】EOFの入れ子について Satsuki 06/6/27(火) 11:50 質問[未読]
【8064】Re:EOFの入れ子について Gin_II 06/6/27(火) 11:56 回答[未読]
【8068】Re:EOFの入れ子について Satsuki 06/6/27(火) 13:27 質問[未読]
【8078】Re:EOFの入れ子について Gin_II 06/6/28(水) 12:49 回答[未読]
【8083】Re:EOFの入れ子について Satsuki 06/6/29(木) 9:39 お礼[未読]

【8063】EOFの入れ子について
質問  Satsuki  - 06/6/27(火) 11:50 -

引用なし
パスワード
   Satsukiと申します。いろいろ探してみましたが、わかりませんでしたので、どなたかお教え頂けますでしょうか?よろしくお願いいたします。

下記のようなコードを作り、「データ」テーブルと「位置」テーブルのすべてのデータについて計算しようと思いました。動かしてみると、
「BOFとEOFのいずれかがTrueになっているか、または現在のレコードが削除されています。要求された操作には現在のレコードが必要です。」
と表示され、「データ」テーブルの件数分だけ一巡して計算された後、
rs3![kyoriX] = rs2![X1] - rs1![X]
のところが黄色くなります。
どこを直したらよいでしょうか?お手数ですがお願いいたします。

Public Sub keisan()
Dim cn As ADODB.Connection
Dim rs1 As ADODB.Recordset
Dim rs2 As ADODB.Recordset
Dim rs3 As ADODB.Recordset

Set cn = CurrentProject.Connection
Set rs1 = New ADODB.Recordset
Set rs2 = New ADODB.Recordset
Set rs3 = New ADODB.Recordset

rs1.Open "データ", cn, adOpenStatic, adLockReadOnly
rs2.Open "位置", cn, adOpenStatic, adLockReadOnly
rs3.Open "距離", cn, adOpenKeyset, adLockOptimistic

rs1.MoveFirst

Do Until rs1.EOF
  Do Until rs2.EOF
    rs3.AddNew
      rs3![kyotenmei] = rs2![拠点名]
      rs3![kyoriX] = rs2![X1] - rs1![X]
      rs3![kyoriY] = rs2![Y1] - rs1![Y]
    rs3.Update
  rs2.MoveNext
rs1.MoveNext
Loop
Loop

rs1.Close
rs2.Close
rs3.Close

cn.Close

End Sub

【8064】Re:EOFの入れ子について
回答  Gin_II  - 06/6/27(火) 11:56 -

引用なし
パスワード
   > 「データ」テーブルと「位置」テーブルのすべてのデータについて計算しようと
> 思いました。

Do Until rs1.EOF
  rs2.MoveFirst
  Do Until rs2.EOF
    rs3.AddNew
      rs3![kyotenmei] = rs2![拠点名]
      rs3![kyoriX] = rs2![X1] - rs1![X]
      rs3![kyoriY] = rs2![Y1] - rs1![Y]
    rs3.Update
  rs2.MoveNext
  Loop
  rs1.MoveNext
Loop

では?

【8068】Re:EOFの入れ子について
質問  Satsuki  - 06/6/27(火) 13:27 -

引用なし
パスワード
   >Do Until rs1.EOF
>  rs2.MoveFirst
>  Do Until rs2.EOF
>    rs3.AddNew
>      rs3![kyotenmei] = rs2![拠点名]
>      rs3![kyoriX] = rs2![X1] - rs1![X]
>      rs3![kyoriY] = rs2![Y1] - rs1![Y]
>    rs3.Update
>  rs2.MoveNext
>  Loop
>  rs1.MoveNext
>Loop
>
>では?


Gin_II さん、早速のお答えありがとうございました。
無事動いたのですが、今度は、「位置」テーブルの件数分だけ計算して終わってしまいました。
作業としては、「データ」テーブル1572件×「位置」テーブル4512件で7092864件分のデータが必要なのですが、このコードではできないのでしょうか?

【8078】Re:EOFの入れ子について
回答  Gin_II  - 06/6/28(水) 12:49 -

引用なし
パスワード
   > 作業としては、「データ」テーブル1572件×「位置」テーブル4512件で
> 7092864件分のデータが必要なのですが、このコードではできないのでしょうか?

レコード番号だけ書くと、
【変更前】
rs1    rs2
1    1
2    2
3    3
4    4
5    5

【変更後】
rs1    rs2    
1    1
1    2
1    3
1    4
1    5
2    1
2    2
2    3
2    4
2    5
3    1
  :

のようになりませんか?

【8083】Re:EOFの入れ子について
お礼  Satsuki  - 06/6/29(木) 9:39 -

引用なし
パスワード
   Gin_II さん、ありがとうございました。

rs2.MoveFirstを書き忘れており、付け足したらできました。
お手数かけました。
また、新たな問題が出てきたら、どうぞよろしくお願いいたします。

>レコード番号だけ書くと、
>【変更前】
>rs1    rs2
>1    1
>2    2
>3    3
>4    4
>5    5
>
>【変更後】
>rs1    rs2    
>1    1
>1    2
>1    3
>1    4
>1    5
>2    1
>2    2
>2    3
>2    4
>2    5
>3    1
>  :
>
>のようになりませんか?

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