首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

请问!用的是VB 6.0

2012-03-18 
请教!用的是VB 6.0把已有数据(数据大于20行)的RS(recordset)的第10行数据与第11行数据做加法后,删除第11行

请教!用的是VB 6.0
把已有数据(数据大于20行)的RS(recordset)的第10行数据与第11行数据做加法后,删除第11行的数据,然后把后面的数据向前移。
RS的话修改数据是会更新数据库,现在的问题是RS里的已有数据是用SQL语句分类统计出来的,无法更新。我也不需要更新数据,只要能做到第10行数据与第11行数据做加法后,删除第11行的数据,然后把后面的数据向前移就行了。不更新数据。
之前我用双重循环

但是运行到rs1.fields(z)=rs1.fields(z)+rs2.fields(i) z=10 i=11
就会出错。原因是一旦赋值就会更新数据库,有什么办法解决或绕开这个问题伐?如有知道的,请帮个忙。
简单点说就是能对返回的结果进行编辑但又不会更新数据库的控件有伐?


[解决办法]
就是 5 楼说的方法,在 while 前面加

VB code
set rsCopy7.ActiveConnection = Nothingset Module2.rs.ActiveConnection = Nothing
[解决办法]
set rsCopy7.ActiveConnection = Nothing 
set Module2.rs.ActiveConnection = Nothing
[解决办法]
For Z = 2 To 13 '从第三个字段到第14个字段?
rsCopy7.Fields(Z) = rsCopy7.Fields(Z) + Module2.rs.Fields(Z) '检查数据类型是否匹配,能否相加
Next
[解决办法]
说明你的记录根本不支持更新。
不能使用 Clone,应该用这个帖子中的函数进行复制,而且不再需要设置 ActiveConnection 了
VB code
set rsCopy7=CopyRecordSetUpdatable(Module2.rs)While Not rsCopy7.EOF    ...
[解决办法]
探讨
附上源码:
      If Not rsCopy7 Is Nothing Then Set rsCopy7 = Nothing

            Set rsCopy7 = Module2.rs.Clone           
    While Not rsCopy7.EOF
      If (rsCopy7.AbsolutePosition = 10) Then
        While Not Module2.rs.EOF
            If (Module2.rs.AbsolutePosition = 11) Then
                For Z = 2 To 13
                  rsCopy7.Fields(Z) = rsCopy7.Fields(Z) + Module2.rs.Fields(Z)
                Next Z
            End If
            Module2.rs.MoveNext
        Wend
      End If
        rsCopy7.MoveNext
    Wend
PS:修改过的结果集RSCPOY7最后是要导出成EXCEL的,所以在显示的时候做隐藏是不行的。


[解决办法]
你记录集参数对不对?看28楼...
这样试下:
VB code
'移动到第一行记录if Not Module2.rs.EOF then Module2.rs.movefirst'cloneSet rsCopy7 = Module2.rs.Clone Module2.rs.Requery             Set rsCopy7.ActiveConnection = Nothing             rsCopy7.move 9      '第十条记录(向下移动9行) Module2.rs.move 10  '第十一条记录(向下移动10行) For Z = 2 To 13     rsCopy7.Fields(Z) = rsCopy7.Fields(Z) + Module2.rs.Fields(Z) Next Z  '.....
[解决办法]
在 CopyRecordSetUpdatable() 的循环中加一行
VB code
debug.print fld.Name, fld.Type, fld.DefinedSize, fld.Attributes
[解决办法]
只有6个字段,怎么循环要 For Z = 2 To 13 ?

[解决办法]
赋值出错时 Z 是多少,至少将这个字段贴出来。
[解决办法]
CopyRecordSetUpdatable() 第一个循环中改成下面的形式试试,或者去掉最后一个参数试试
rsReturn.Fields.Append fld.Name, fld.Type, fld.DefinedSize, (fld.Attributes and (not adFldUnknownUpdatable)) or adFldUpdatable 

热点排行