Office中国论坛/Access中国论坛

标题: [求助]記錄集為什麼不能被更新(附代碼) [打印本页]

作者: HG    时间: 2002-10-26 18:33
标题: [求助]記錄集為什麼不能被更新(附代碼)
Public Function ufn_modify_idcrad()
Dim cm As New ADODB.Command
Dim cm1 As New ADODB.Command
Dim rs As New ADODB.Recordset
Dim rs1 As New ADODB.Recordset

With cm
.ActiveConnection = CurrentProject.Connection
.CommandText = "employee"
.CommandType = adCmdTable
End With
With cm1
.ActiveConnection = CurrentProject.Connection
.CommandText = "employee1"
.CommandType = adCmdTable
End With

Set rs = cm.Execute
Set rs1 = cm1.Execute

Do Until rs1.EOF
Do Until rs.EOF
   If rs.Fields(0) = rs1.Fields(0) Then
      rs.Fields(3) = rs1.Fields(3)
      rs.Update
    End If
   rs.MoveNext
Loop
rs1.MoveNext
Loop

rs.Close
rs1.Close
Set rs = Nothing
Set rs1 = Nothing
Set cm = Nothing
Set cm1 = Nothing
End Function
------------記錄集為什麼不能被更新--------------------------------[em16][em16]
作者: yuab    时间: 2002-10-26 19:41
提点意见,你这种做法是将两个表记录集一齐打开。然后循环遍历rs1表中的每一笔记录,当循环遍历rs1记录时你会到rs记录集中找一次相同的栏位Fields(0),如果相同,将rs.field(3)=rs1.field(3).这种做法以前我做过,不过有一次我没事的时候做了一次测试我就再也不用了。原因是还有比这更快的方法。我用了三种方法来测试的。
例如:表1=employee   表2=employee1 表1有8000笔资料。(估计数。)

测试1:最快花了56秒(根据记录集的栏位数量时间有所不同)
先打开rs记录集,然后再循环遍历一次rs记录集,到每一笔时,就打开rs1记录集,这个rs1记录集是根据rs记录集的当前记录条件打开的。打开rs1记录集再循环更改内容。完成rs1的更改后关闭rs1记录集。再进行rs的下一笔,如此类推。
dim cn=adodb.connection
dim rs,rs1 as adodb.recordcount

set rs=new adodb.recordcount
set rs1=new adodb.recordcount

rs.open "select * from employee",cn,adopenkeyset,ad....
do until rs.eof
   rs1.open "select * from employee1 where 第一个栏位名='"rs(0)"'",cn,adopenkeyset,ad....
                do until rs1.eof
                        rs1(0)=rs(0)
                        rs1.movenext
                loop
                rs1.close
rs.movenext
loop
rs.close

测试2,和你的相同  花了96秒
先打开rs和rs1记录集。然后再循环遍历rs每一笔记录,每循环一笔rs记录集就遍历一次rs1记录集,发现有相同的记录就更新内容。

测试3不写了只写操作方法。 花了256秒
先打开rs和rs1记录集。然后再循环遍历rs每一笔记录,每循环一笔rs记录集就筛选一次rs1记录集,再将rs1筛选结果循环更改一次。

作者: HG    时间: 2002-10-26 19:48
呵呵,謝謝您!但是我已修改完畢,原因是在ADP中這樣更新的話,記錄集在遍歷的同時,又去更新,就發生了記錄鎖的問題,所以我只能繞它過去了,方法如下,先編一個類型功能的存儲過程,先後遍歷記錄集(只讀),在遍歷記集的同時傳遞參數給存儲過程。
作者: yuab    时间: 2002-10-26 19:55
我明白你的意思了。不过上面的办法如果碰到记录锁的问题,可以用Rollback去回滚它。也可避开的。
作者: HG    时间: 2002-10-26 21:12
奇怪的是在MDB中就這樣是沒問題的?
作者: freemanager    时间: 2002-10-26 23:14
这不是一句话就能搞定的事情吗?还用得着这一堆大大小小的代码?
作者: HG    时间: 2002-10-26 23:21
my god.哪可以講一下嗎?用什麼樣的辦法才簡單有效且易懂。??
作者: goodidea    时间: 2002-10-26 23:26
用update SQL可以吗?
作者: HG    时间: 2002-10-26 23:35
我現在早已更新完了,只是很想知道,為什麼同樣的情況在MDB下沒問題,而在ADP下就鎖定?




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