当前位置:编程学习 > VB >>

这段判断语句是不是有点问题!!

Public Sub crystal_init()    '对水晶报表进行初始化

Call check_condatabase
Dim rs_rpt As ADODB.Recordset
Dim rs_feiyong As ADODB.Recordset
Set rs_rpt = New ADODB.Recordset
Set rs_feiyong = New ADODB.Recordset

rs_rpt.Open "select * from feiyong_rpt", cn, adOpenStatic, adLockPessimistic
rs_feiyong.Open "select * from feiyong", cn, adOpenStatic, adLockPessimistic

If rs_rpt.BOF <> True Then '这地方已经判断rs_rpt.Open为是否为true
  If rs_feiyong.BOF <> True Then rs_feiyong.MoveFirst
    Do Until rs_feiyong.EOF
       If rs_rpt.EOF <> True Then
          For i = 0 To 7
              rs_rpt.Fields(i).Value = rs_feiyong.Fields(i).Value
          Next
       Else
          rs_rpt.AddNew
          For i = 0 To 7
              rs_rpt.Fields(i).Value = rs_feiyong.Fields(i).Value
          Next
       End If
       rs_rpt.Update
       rs_rpt.MoveNext
       rs_feiyong.MoveNext
    Loop
Else
    If rs_rpt.BOF <> True Then rs_rpt.MoveLast ‘而这地方还判断一次重复的,不是不这地方有错误!!!!
   
    If rs_feiyong.BOF <> True Then rs_feiyong.MoveFirst
    Do Until rs_feiyong.EOF
       rs_rpt.AddNew
       For i = 0 To 7
           rs_rpt.Fields(i).Value = rs_feiyong.Fields(i).Value
       Next
       rs_rpt.Update
       rs_rpt.MoveNext
       rs_feiyong.MoveNext
    Loop
    Exit Sub
End If

If rs_rpt.EOF <> True Then
   Do Until rs_rpt.EOF
      rs_rpt.Delete
      rs_rpt.MoveNext
   Loop
End If
--------------------编程问答-------------------- 格式化后的代码

Public Sub crystal_init() '对水晶报表进行初始化

    Call check_condatabase
    Dim rs_rpt As ADODB.Recordset
    Dim rs_feiyong As ADODB.Recordset
    Set rs_rpt = New ADODB.Recordset
    Set rs_feiyong = New ADODB.Recordset
    
    rs_rpt.Open "select * from feiyong_rpt", cn, adOpenStatic, adLockPessimistic
    rs_feiyong.Open "select * from feiyong", cn, adOpenStatic, adLockPessimistic
    
    If rs_rpt.BOF <> True Then '这地方已经判断rs_rpt.Open为是否为true
        If rs_feiyong.BOF <> True Then rs_feiyong.MoveFirst
        
        Do Until rs_feiyong.EOF
            If rs_rpt.EOF <> True Then
                For i = 0 To 7
                    rs_rpt.Fields(i).Value = rs_feiyong.Fields(i).Value
                Next
            Else
                rs_rpt.AddNew
                
                For i = 0 To 7
                    rs_rpt.Fields(i).Value = rs_feiyong.Fields(i).Value
                Next
            End If
            
            rs_rpt.Update
            rs_rpt.MoveNext
            rs_feiyong.MoveNext
        Loop
    Else
        If rs_rpt.BOF <> True Then rs_rpt.MoveLast '而这地方还判断一次重复的,不是不这地方有错误!!!!
        If rs_feiyong.BOF <> True Then rs_feiyong.MoveFirst
        
        Do Until rs_feiyong.EOF
            rs_rpt.AddNew
            
            For i = 0 To 7
                rs_rpt.Fields(i).Value = rs_feiyong.Fields(i).Value
            Next
            
            rs_rpt.Update
            rs_rpt.MoveNext
            rs_feiyong.MoveNext
        Loop
        
        Exit Sub
    End If
    
    If rs_rpt.EOF <> True Then
        Do Until rs_rpt.EOF
            rs_rpt.Delete
            rs_rpt.MoveNext
        Loop
    End If
--------------------编程问答-------------------- 的确错误,

    Else
        If rs_rpt.BOF <> True Then rs_rpt.MoveLast '而这地方还判断一次重复的,不是不这地方有错误!!!!
**********************************
这里不可能   rs_rpt.BOF <> True  --------------------编程问答-------------------- 谢谢jhone99 那它正确的写法应该是什么呢? --------------------编程问答--------------------
的确有冗余语句,但不影响逻辑。我一般这样写:

Call check_condatabase
Dim rs_rpt As ADODB.Recordset
Dim rs_feiyong As ADODB.Recordset
Set rs_rpt = New ADODB.Recordset
Set rs_feiyong = New ADODB.Recordset

cn.Execute "DELETE FROM feiyong_rpt"
cn.Execute "INSERT INTO feiyong_rpt SELECT fieldname0, fieldname1, fieldname2, fieldname3, fieldname4, fieldname5, fieldname6, fieldname7 FROM feiyong"

rs_rpt.Open "select * from feiyong_rpt", cn, adOpenStatic, adLockPessimistic
rs_feiyong.Open "select * from feiyong", cn, adOpenStatic, adLockPessimistic

--------------------编程问答-------------------- 确实,我也觉得语句冗余,楼上的写的很好,矛塞顿开!! --------------------编程问答-------------------- If rs_rpt.EOF <> True Then
        Do Until rs_rpt.EOF
            rs_rpt.Delete
            rs_rpt.MoveNext
        Loop
这地方什么意思不明白,刚把数据拷贝到位rs_rpt,为什么这个语句把数据又都删除了? --------------------编程问答-------------------- 是不是把多余的记录删除?? --------------------编程问答-------------------- 帮你注释下
If rs_rpt.EOF <> True Then '如果数据集rs_rpt不是最后则
  Do Until rs_rpt.EOF      '循环到rs_rpt的最后一条
  rs_rpt.Delete            '删除当前游标所在位置的数据
  rs_rpt.MoveNext          '游标下移
  Loop                     
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,