希望懂vb的朋友进来!关于判断数据库中的数据是否相等的问题!!!!就有点急!!

lzy5042 2001-08-22 04:39:34
Public Function cmpdata(rsSource As ADODB.Recordset, rsdes1 As ADODB.Recordset) As Boolean
Dim strsource As String
Dim strdes As String
Dim i As Integer
Dim flag As Boolean
Dim check() As Boolean
ReDim check(rsSource.Fields.Count - 1) As Boolean
For i = 0 To rsSource.Fields.Count - 1
If Not IsNull(rsSource(rsSource(i).Name)) And Not IsNull(rsdes1(rsSource(i).Name)) Then
If rsSource(rsSource(i).Name) <> rsdes1(rsSource(i).Name) Then
check(i) = True
Else
check(i) = False
End If
Else
check(i) = True
End If
Next
For i = 0 To rsSource.Fields.Count - 1
flag = check(i)
Next
cmpdata = flag
End Function
这些代码无法正确判断出两个数据库的数据是否一致。两个数据库的表都是一样的
...全文
112 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
emhb 2001-08-22
分有什么用,如果是要分,我早就第一名了!申请两个自己加给自己!
回复
emhb 2001-08-22
不错嘛!很认真也很细心,像个程序员!

是不是每个程序员的心都比女孩子还要细哦? 有点女性化了!
回复
emhb 2001-08-22
你只是对一条记录的各个字段进行比较了,程序的思路有很大的问题!

Public Function cmpdata(rsSource As ADODB.Recordset, rsdes1 As ADODB.Recordset) As Boolean
Dim i As Integer

'//如果两个记录集的记录条数不相同,直接返回false值。
if rsSource.recordcount<> rsdes1.recordcount then
cmpdata=false
exit function
end if
'//如果没有记录,那就返回true值
if rsSource.recordcount =0 then
cmpdata=true
exit function
end if

rsSource.movefirst
rsDes1.movefirst

'//每条记录逐一比较
while not rsSource.eof
'//该记录的每一个字段逐一比较, 只要一个字段的值不同就为false值
For i = 0 To rsSource.Fields.Count -1
If rsSource.fields(i) <> rsdes1.fields(i) Then
cmpdata=false
exit function
end if
Next i
rsSource.movenext
rsDes1.movenext
你只是对一条记录的各个字段进行比较了,程序的思路有很大的问题!

Public Function cmpdata(rsSource As ADODB.Recordset, rsdes1 As ADODB.Recordset) As Boolean
Dim i As Integer

'//如果两个记录集的记录条数不相同,直接返回false值。
if rsSource.recordcount<> rsdes1.recordcount then
cmpdata=false
exit function
end if
'//如果没有记录,那就返回true值
if rsSource.recordcount =0 then
cmpdata=true
exit function
end if

rsSource.movefirst
rsDes1.movefirst

'//每条记录逐一比较
while not rsSource.eof
'//该记录的每一个字段逐一比较, 只要一个字段的值不同就为false值
For i = 0 To rsSource.Fields.Count -1
If rsSource.fields(i) <> rsdes1.fields(i) Then
cmpdata=false
exit function
end if
Next i
rsSource.movenext
rsDes1.movenext
' ra=ra + 1 //忘了删除!
wend
cmpdata = true
End Function

wend
cmpdata = true
End Function
回复
lzy5042 2001-08-22
楼上的:rs=rs+1 是什么意思??
回复
lzy5042 2001-08-22
谢谢 emhb(兵子) :分已经加玩了。明天你来拿分
回复
emhb 2001-08-22
你只是对一条记录的各个字段进行比较了,程序的思路有很大的问题!

Public Function cmpdata(rsSource As ADODB.Recordset, rsdes1 As ADODB.Recordset) As Boolean
Dim i As Integer

'//如果两个记录集的记录条数不相同,直接返回false值。
if rsSource.recordcount<> rsdes1.recordcount then
cmpdata=false
exit function
end if
'//如果没有记录,那就返回true值
if rsSource.recordcount =0 then
cmpdata=true
exit function
end if

rsSource.movefirst
rsDes1.movefirst

'//每条记录逐一比较
while not rsSource.eof
'//该记录的每一个字段逐一比较, 只要一个字段的值不同就为false值
For i = 0 To rsSource.Fields.Count -1
If rsSource.fields(i) <> rsdes1.fields(i) Then
cmpdata=false
exit function
end if
Next i
rsSource.movenext
rsDes1.movenext
ra=ra + 1
wend
cmpdata = true
End Function


回复
lzy5042 2001-08-22
谢谢大家!!我没什么说得了!给分!!!我在想想办法!!
回复
songyangk 2001-08-22
用不用发到我的邮箱里我帮你改一下??
回复
mmzxg 2001-08-22
应该不是死机吧,是不是显示程序没有响应呢。当执行大的数据库查询时会出现这样的问题的啦。

你的数据库有多大呢。。。。
回复
lzy5042 2001-08-22
这样做还是不行。我把数据库的数据都改了。两个数据库中表的数据完全不一样。可是还是
弹出表示数据相等的对话框
回复
ozw 2001-08-22
你这个方法不是很好,如果一定要这样做,可以这样,没必要定义那么多变量
Public Function CmpData(rsSource As ADODB.Recordset, RsDes1 As ADODB.Recordset) As Boolean
Dim i As Integer

With rsSource
Do While Not .EOF
For i = 0 To rsSource.Fields.Count - 1
If (Not IsNull(rsSource(i).Value)) And (Not IsNull(RsDes1(i).Value)) Then
If rsSource(i).Value <> RsDes1(i).Value Then
CmpData = False '有一条记录不同就可以断定不一样了
Exit Function
End If
Else
check(i) = True
End If
Next
RsDes1.MoveNext
.MoveNext
Loop
End With
CmpData = True
End Function

回复
songyangk 2001-08-22
不可能呀,除非你的循环控制的不对.
for i =1 to rssource.recordcount


rssource.movenext
next i
回复
lzy5042 2001-08-22
循环就死机了
回复
songyangk 2001-08-22
大哥,为什么你每次都不进行记录集的循环呢?????
回复
lzy5042 2001-08-22
来吧!!!
回复
相关推荐
发帖

1188

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
帖子事件
创建了帖子
2001-08-22 04:39
社区公告
暂无公告