Office中国论坛/Access中国论坛

标题: 请大家来帮帮忙:利用recordset.find更新记录时出现的问题 [打印本页]

作者: effytears    时间: 2008-12-1 20:04
标题: 请大家来帮帮忙:利用recordset.find更新记录时出现的问题
小弟我 刚学ACCESS不久,对代码也不算了解,写了如下代码,总是不理想,请各位高手帮帮忙, 谢谢啦
Dim rst1 As ADODB.Recordset
Dim rst2 As ADODB.Recordset
Set rst1 = New ADODB.Recordset
Set rst2 = New ADODB.Recordset
Dim str1, str2 As String

str1 = "select tblorder.partinfoID,sum(tblorder.partsum) as totalsum from tblorder "
str1 = str1 + "group by tblorder.partinfoID"
With rst1
   .ActiveConnection = CurrentProject.Connection
   .CursorType = adOpenForwardOnly
   .LockType = adLockReadOnly
   .Open str1, options:=adCmdText
End With
  
str2 = "select totalparts.partinfoID,totalparts.partsum from totalparts "
With rst2
   .ActiveConnection = CurrentProject.Connection
   .CursorType = adOpenDynamic
   .LockType = adLockPessimistic
   .Open str2, options:=adCmdText
End With
Do Until rst1.EOF
   rst2.Find "[partinfoID]=" & rst1!partinfoID
   If rst2.EOF Then
      With rst2
         .AddNew
         !partinfoID = rst1!partinfoID
         !partsum = rst1!totalsum
         .Update
      End With
   Else
      rst2!partsum = rst1!totalsum
   End If
      
   rst1.MoveNext
Loop
   
rst1.Close
rst2.Close
Set rst1 = Nothing
Set rst2 = Nothing

此代码作用是:将tblorder的记录赋值给rst1;把tbltotalparts的记录赋值给rst2;
                        然后验证rst2与rst1是否含有"partinfoID"字段相同的记录;
                        如果rst2中没有,则新添加记录,并且给相应字段赋值;
                        如果rst2中存在记录,则直接给partsum字段赋值。
此代码作为过程使用,第一此更新rst2时,不存在问题,可是再次点击该命令时:
rst2中的记录数与rst1中的记录数量不同(rst2中记录有重复的,但只是个别现象),
请各位大大们帮忙!
谢谢各位啦!

PS:还请各位帮我想个更好的办法

[ 本帖最后由 effytears 于 2008-12-1 22:12 编辑 ]
作者: Henry D. Sy    时间: 2008-12-1 20:10
请更改标题
作者: tmtony    时间: 2008-12-1 20:11
因为没有数据,没有办法试运行
不过会不会因为 find是否从当前位置往下搜索导致?而不是从头搜索呢
作者: Henry D. Sy    时间: 2008-12-1 20:17
两次打开的好像都是rst1
作者: tz-chf    时间: 2008-12-1 22:05
楼上各位说得对,str2误为str1,游标没有movefirst

可以用查询完成
作者: effytears    时间: 2008-12-1 22:06
谢谢Henry和tmtony 你们回复的真快

原程序是我在单位编写的 上面的代码是我回家后重新写的 可能会有些错误

明天我把程序带回来 还请两位帮忙看看 谢谢

PS:我买过tmtony的书 呵呵 您的书不错 给我不少启发
作者: Henry D. Sy    时间: 2008-12-1 22:25
Find的参数有好几个,请尽量写全。
作者: Henry D. Sy    时间: 2008-12-1 22:27
原帖由 Henry D. Sy 于 2008-12-1 22:25 发表
Find的参数有好几个,请尽量写全。

要不用双循环,来个历遍全球。
作者: effytears    时间: 2008-12-1 22:31
呵呵 感谢Henry D.Sy兄
理论上要求str2是不允许存在重复partinfoID的

明天我把源代码带来 希望Henry D.Sy兄再帮忙
作者: tmtony    时间: 2008-12-2 01:04
有Henry D.Sy兄, 良师常伴左右:)
作者: abombxm    时间: 2010-7-15 17:28
执行时报错2105是怎么回事?




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3