设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 253|回复: 8
打印 上一主题 下一主题

[求助]記錄集為什麼不能被更新(附代碼)

[复制链接]
跳转到指定楼层
1#
发表于 2002-10-26 18:33:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2002-10-26 19:41:00 | 只看该作者
提点意见,你这种做法是将两个表记录集一齐打开。然后循环遍历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筛选结果循环更改一次。
3#
 楼主| 发表于 2002-10-26 19:48:00 | 只看该作者
呵呵,謝謝您!但是我已修改完畢,原因是在ADP中這樣更新的話,記錄集在遍歷的同時,又去更新,就發生了記錄鎖的問題,所以我只能繞它過去了,方法如下,先編一個類型功能的存儲過程,先後遍歷記錄集(只讀),在遍歷記集的同時傳遞參數給存儲過程。
4#
发表于 2002-10-26 19:55:00 | 只看该作者
我明白你的意思了。不过上面的办法如果碰到记录锁的问题,可以用Rollback去回滚它。也可避开的。
5#
 楼主| 发表于 2002-10-26 21:12:00 | 只看该作者
奇怪的是在MDB中就這樣是沒問題的?
6#
发表于 2002-10-26 23:14:00 | 只看该作者
这不是一句话就能搞定的事情吗?还用得着这一堆大大小小的代码?
7#
 楼主| 发表于 2002-10-26 23:21:00 | 只看该作者
my god.哪可以講一下嗎?用什麼樣的辦法才簡單有效且易懂。??
8#
发表于 2002-10-26 23:26:00 | 只看该作者
用update SQL可以吗?
9#
 楼主| 发表于 2002-10-26 23:35:00 | 只看该作者
我現在早已更新完了,只是很想知道,為什麼同樣的情況在MDB下沒問題,而在ADP下就鎖定?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-6-1 01:32 , Processed in 0.089924 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表