大家别被我的标题吓着,不过这两天用Access+Asp写东西确实遇到不少怪问题,下面就是一例,我被折磨的快不行了,资料也看了不少,哎,就是没看到和我这个问题有关的。
=========================================================================今天做生成树的程序,因为我的树是要求能处理任意多个字段(任意层)的,为了有个较快的运行速度,只取一次记录集。然后用filter来过滤出符合要求的记录,再输出到界面上成为树的结点,但使用filter之后发现了一个很大的问题,我不知道是不是RecordSet的bug!下面是程序里的片断。
=========================================================================
 'szSql 是传来的过滤条件,rs为传来的记录集。
 rs.Filter=szSql '刚过滤后的rs,你认为它的AbsolutePosition在哪?值是几?是1?看后面的结果。
      if rs.RecordCount>0 then 
        '设查找条件
        szString=rs.Fields(I).Name & "='" & rs.Fields(I).Value & "'"
        '保存初始位置
        iCurPos=rs.AbsolutePosition 
        rs.MovePrevious '向前移动一个位置
        Response.Write rs.AbsolutePosition & "==" & iCurPos & "<br>"
        '上面一行输出是什么?叫人不敢相信!居然是...                    -2==2        '为什么?难道因为filter前后AbsolutePosition的值没有变,但当调用了rs.MovePrevious之后,它的值就变了!系统会用默认的第一条记录向前移一个位置!然后理所当然的得到-2(BOF)的值!
        '不知道我的看法对不对,欢迎大家讨论。
=========================================================================
另:我输出的树中有重复的结点,如下,我用recordset的find试过向记录前查找想去掉,没成功,倒发现上面那该死的问题。给数据库加上空的字段?试过,但是不能在rs中修改该字段的值,用recordset对象Fields.Append? 不知道为什么在ASP+Access环境下总是不成功,产生一个MSDN里找不到的错误,当然,要实现我的功能可能还有别的方法,但是暂时没法解决了,哎,最多到下周一就要交差的,各位帮忙分析一下啊。
  first 
   ---senond 
       ---test node1
       ---test node2
   ---second
       ---test node3
  ..........