|
こんにちは。Satsukiと申します。
かなりおかしい所があると思われますが、どこを調べてもわかりません。どなたかご教示よろしくお願いいたします。
「データ」テーブルと「位置」テーブルのすべての値を計算し、「距離」ワークテーブルに追加していくのですが、1件目のデータテーブルの値とすべての位置テーブルの値が計算し終わったところで、「距離」ワークテーブルの「KyoriX」フイールドの上位5位を「TOP5」に入れ、もとの「距離」ワークテーブルのレコードをすべて消すという動作を繰り返したいのですが、
rs3.Deleteのところで
「キー列の情報が足りないか、正しくありません。更新の影響を受ける行が多すぎます」とでます。
ちなみにrs3(距離)テーブルは、一巡めで4472件になります。
また、上位5件のはずが、「TOP5」テーブルには3件までしか追加されていません。また位置テーブルは全部で4512件で、「距離」テーブルは40件ほど足りません。
「データ」テーブルは1572件あります。
Public Sub keisan()
Dim cn As ADODB.Connection
Dim rs1 As ADODB.Recordset
Dim rs2 As ADODB.Recordset
Dim rs3 As ADODB.Recordset
Dim rs4 As ADODB.Recordset
Set cn = CurrentProject.Connection
Set rs1 = New ADODB.Recordset
Set rs2 = New ADODB.Recordset
Set rs3 = New ADODB.Recordset
Set rs4 = New ADODB.Recordset
rs1.Open "データ", cn, adOpenStatic, adLockReadOnly
rs2.Open "位置", cn, adOpenStatic, adLockReadOnly
rs3.Open "距離", cn, adOpenKeyset, adLockOptimistic
rs4.Open "TOP5", cn, adOpenKeyset, adLockOptimistic
rs1.MoveFirst
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
rs3.Close
rs3.CursorLocation = adUseClient
rs3.Open "距離", cn, adOpenKeyset, adLockOptimistic
rs3.Sort = "kyoriX DESC"
i = 0
For i = 1 to 5
rs4.AddNew
rs4![kyotenmei] = rs3![kyotenmei]
rs4![kyoriX] = rs3![kyoriX]
rs4![kyoriY] = rs3![kyoriY]
i = i + 1
rs4.Update
Next i
Do Until rs3.EOF
rs3.Delete
rs3.MoveNext
Loop
rs3.Close
rs1.MoveNext
Loop
rs1.Close
rs2.Close
rs3.Close
cn.Close
End Sub
|
|