以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  变量报错  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=177090)

--  作者:lgz518
--  发布时间:2022/5/9 10:38:00
--  变量报错
报错代码:报错提示:变量tp01在封闭中隐藏,Dim tp01 As Double = (dr("第1段") - dr2("第1段")).TotalSeconds(),如何解决,请老师,纠正,谢谢
Select Case e.DataCol.name
    Case "第1段", "第2段", "第3段", "第4段", "第5段", "第6段"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("第1段") Then
            dr("卡一") = Nothing
            
        Else
            Dim dr2 As DataRow = DataTables("时间").find("类别=\'" & dr("类别") & "\'")
            If dr2 IsNot Nothing Then
                
                Dim tp01 As TimeSpan\' 原来变量是tp1,报错提示:变量tp1在封闭中隐藏,以为是存在相同变量,改为tp01,还是报错提示:变量tp1在封闭中隐藏
                If dr("第1段") > dr2("第1段") Then
                    
                    Dim tp01 As Double = (dr("第1段") - dr2("第1段")).TotalSeconds()
                    dr("卡一") = tp01\'     
                Else
                    tp01 = dr2("第1段").adddays(1) - dr("第1段") 
                End If
                dr("卡一") = tp01.TotalSeconds() \'
            End If
            
            Dim tp2 As TimeSpan
            If dr("第2段") > dr2("第2段") Then
                Dim tp2 As Double = (dr("第2段") - dr2("第2段")).TotalSeconds()
                dr("卡二") = tp2\'    
            Else
                tp2 = dr2("第2段").adddays(1) - dr("第2段") 
            End If
            dr("卡二") = tp2.TotalSeconds() \'
        End If
        
        
        Dim tp3 As TimeSpan
        If dr("第3段") > dr2("第3段") Then
            Dim tp3 As Double = (dr("第3段") - dr2("第3段")).TotalSeconds()
            dr("卡三") = tp3\'    
        Else
            tp3 = dr2("第3段").adddays(1) - dr("第3段") 
        End If
        dr("卡三") = tp3.TotalSeconds() \'
        End If
        
        
        Dim tp4 As TimeSpan
        If dr("第4段") > dr2("第4段") Then
            Dim tp4 As Double = (dr("第4段") - dr2("第4段")).TotalSeconds()
            dr("卡四") = tp4 
        Else
            tp4 = dr2("第4段").adddays(1) - dr("第4段") 
        End If
        dr("卡四") = tp4.TotalSeconds() \'
        End If
        
        
        Dim tp5 As TimeSpan
        If dr("第5段") > dr2("第5段") Then
            Dim tp5 As Double = (dr("第5段") - dr2("第5段")).TotalSeconds()
            dr("卡五") = tp5\'      
        Else
            tp5 = dr2("第5段").adddays(1) - dr("第5段") 
        End If
        dr("卡五") = tp5.TotalSeconds() \'
        End If
        
        Dim tp6 As TimeSpan
        If dr("第6段") > dr2("第6段") Then
            Dim tp6 As Double = (dr("第6段") - dr2("第6段")).TotalSeconds()
            dr("卡六") = tp6\'   
        Else
            tp6 = dr2("第6段").adddays(1) - dr("第6段") 
        End If
        dr("卡六") = tp6.TotalSeconds() \'
        
        
        End If
        End If
End Select

--  作者:有点蓝
--  发布时间:2022/5/9 10:52:00
--  
tp01这个变量名称重复了,换个不同名称
--  作者:lgz518
--  发布时间:2022/5/9 11:02:00
--  

tp01这个变量名称重复了,换个不同名称
老师,不是变量名称重复,原来我也以为是变量名称重复,把原来tp01改为tp01,现在改为tp0a,还是报错


--  作者:lgz518
--  发布时间:2022/5/9 11:04:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:变量报错.jpg
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2022/5/9 11:06:00
--  
仍然重复啊,同时改有啥用,改一个就行了

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看


--  作者:lgz518
--  发布时间:2022/5/9 11:35:00
--  

Dim dr2 As DataRow = DataTables("时间").find("类别=\'" & dr("类别") & "\'")

            If dr2 IsNot Nothing Then
                
                Dim tp As TimeSpan
                If dr("第1段") > dr2("第1段") Then
                    
                    Dim tp1 As Double = (dr("第1段") - dr2("第1段")).TotalSeconds()
                    dr("卡一") = tp\'真正的时段型数据要转换为秒数,才能存入时段列      
                Else
                    tp = dr2("第1段").adddays(1) - dr("第1段") 
                End If
                dr("卡一") = tp.TotalSeconds() \'
            End If
            
            Dim tp01 As TimeSpan
            If dr("第2段") > dr2("第2段") Then
                Dim tp2 As Double = (dr("第2段") - dr2("第2段")).TotalSeconds()
                dr("卡二") = tp01\'真正的时段型数据要转换为秒数,才能存入时段列      
            Else
                tp01 = dr2("第2段").adddays(1) - dr("第2段") 
            End If
            dr("卡二") = tp01.TotalSeconds() \'
        End If
       
  老师,上面改变量,没报错,是下面代码报错,提示“  dr2”未声明,没保护访问, If dr("第3段") > dr2("第3段") Then   , 
        Dim tp3 As TimeSpan
        If dr("第3段") > dr2("第3段") Then
            Dim tp3 As Double = (dr("第3段") - dr2("第3段")).TotalSeconds()
            dr("卡三") = tp3\'真正的时段型数据要转换为秒数,才能存入时段列      
        Else
            tp3 = dr2("第3段").adddays(1) - dr("第3段") 
        End If
        dr("卡三") = tp3.TotalSeconds() \'
        End If
        

--  作者:有点蓝
--  发布时间:2022/5/9 11:38:00
--  
完整代码发上来
--  作者:lgz518
--  发布时间:2022/5/9 11:50:00
--  
Select Case e.DataCol.name
    Case "第1段", "第2段", "第3段", "第4段", "第5段", "第6段"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("第1段") Then
            dr("卡一") = Nothing
            
        Else
            Dim dr2 As DataRow = DataTables("时间").find("类别=\'" & dr("类别") & "\'")
            If dr2 IsNot Nothing Then
                
                Dim tp As TimeSpan
                If dr("第1段") > dr2("第1段") Then
                    
                    Dim tp1 As Double = (dr("第1段") - dr2("第1段")).TotalSeconds()
                    dr("卡一") = tp\'    
                Else
                    tp = dr2("第1段").adddays(1) - dr("第1段") 
                End If
                dr("卡一") = tp.TotalSeconds() \'
            End If
            
            Dim tp01 As TimeSpan
            If dr("第2段") > dr2("第2段") Then
                Dim tp2 As Double = (dr("第2段") - dr2("第2段")).TotalSeconds()
                dr("卡二") = tp01\'      
            Else
                tp01 = dr2("第2段").adddays(1) - dr("第2段") 
            End If
            dr("卡二") = tp01.TotalSeconds() \'
        End If
       
        
        Dim tp3 As TimeSpan
        If dr("第3段") > dr2("第3段") Then
            Dim tp3 As Double = (dr("第3段") - dr2("第3段")).TotalSeconds()
            dr("卡三") = tp3\'     
        Else
            tp3 = dr2("第3段").adddays(1) - dr("第3段") 
        End If
        dr("卡三") = tp3.TotalSeconds() \'
        End If
        
        
        Dim tp4 As TimeSpan
        If dr("第4段") > dr2("第4段") Then
            Dim tp4 As Double = (dr("第4段") - dr2("第4段")).TotalSeconds()
            dr("卡四") = tp4\'    
        Else
            tp4 = dr2("第4段").adddays(1) - dr("第4段") 
        End If
        dr("卡四") = tp4.TotalSeconds() \'
        End If
        
        
        Dim tp5 As TimeSpan
        If dr("第5段") > dr2("第5段") Then
            Dim tp5 As Double = (dr("第5段") - dr2("第5段")).TotalSeconds()
            dr("卡五") = tp5\'     
        Else
            tp5 = dr2("第5段").adddays(1) - dr("第5段") 
        End If
        dr("卡五") = tp5.TotalSeconds() \'
        End If
        
        Dim tp6 As TimeSpan
        If dr("第6段") > dr2("第6段") Then
            Dim tp6 As Double = (dr("第6段") - dr2("第6段")).TotalSeconds()
            dr("卡六") = tp6\'     
        Else
            tp6 = dr2("第6段").adddays(1) - dr("第6段") 
        End If
        dr("卡六") = tp6.TotalSeconds() \'
        
        
        End If
        End If
End Select

--  作者:有点蓝
--  发布时间:2022/5/9 12:14:00
--  
变量定义是有作用域的。比如下面代码自行测试,在if里面定义的变量只能在if里面使用,在else里面定义的变量只能在else里面使用

代码一:
If 1 = 2 Then
    Dim a As String = 1
Else
    Dim b As String = 2
    MsgBox(a) \'出错
    MsgBox(b) \'正常
End If 

代码二:
If 1 = 1 Then
    Dim a As String = 1
    MsgBox(a) \'正常
    MsgBox(b) \'出错
Else
    Dim b As String = 2
End If 

代码三:
If 1 = 1 Then
    Dim a As String = 1
Else
    Dim b As String = 2
End If 

MsgBox(a) \'出错
MsgBox(b) \'出错

--  作者:lgz518
--  发布时间:2022/5/9 13:04:00
--  
Select Case e.DataCol.name
    Case "第1段", "第2段", "第3段", "第4段", "第5段", "第6段"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("第1段") Then
            dr("卡一") = Nothing
          
        Else
            Dim dr2 As DataRow = DataTables("时间").find("类别=\'" & dr("别") & "\'")
            If dr2 IsNot Nothing Then
                
                Dim tp As TimeSpan
                If dr("第1段") > dr2("第1段") Then
                    
                    Dim tp1 As Double = (dr("第1段") - dr2("第1段")).TotalSeconds()
                    dr("卡一") = tp\'真正的时段型数据要转换为秒数,才能存入时段列      
                Else
                    tp = dr2("第1段").adddays(1) - dr("第1段") 
                End If
                dr("卡一") = tp.TotalSeconds() \'
            End If
            
        Dim dr02 As DataRow = DataTables("时间").find("类别=\'" & dr("别") & "\'")
            If dr02 IsNot Nothing Then
            
            
            Dim tp01 As TimeSpan
            If dr("第2段") > dr02("第2段") Then
                Dim tp2 As Double = (dr("第2段") - dr02("第2段")).TotalSeconds()
                dr("卡二") = tp01\'真正的时段型数据要转换为秒数,才能存入时段列      
            Else
                tp01 = dr02("第2段").adddays(1) - dr("第2段") 
            End If
            dr("卡二") = tp01.TotalSeconds() \'
        End If
        
        Dim dr3 As DataRow = DataTables("时间").find("类别=\'" & dr("类别") & "\'")
        If dr3 IsNot Nothing Then 
            
            Dim tp02 As TimeSpan
            If dr("第3段") > dr3("第3段") Then
                Dim tp3 As Double = (dr("第3段") - dr3("第3段")).TotalSeconds()
                dr("卡三") = tp02\'    
            Else
                tp02 = dr3("第3段").adddays(1) - dr("第3段") 
            End If
            dr("卡三") = tp02.TotalSeconds() \'
        End If
        
        Dim dr4 As DataRow = DataTables("时间").find("类别=\'" & dr("别") & "\'")
        If dr4 IsNot Nothing Then 
            
            Dim tp03 As TimeSpan
            If dr("第4段") > dr4("第4段") Then
                Dim tp4 As Double = (dr("第4段") - dr4("第4段")).TotalSeconds()
                dr("卡四") = tp03\'     
            Else
                tp03 = dr4("第4段").adddays(1) - dr("第4段") 
            End If
            dr("卡四") = tp03.TotalSeconds() \'
        End If
        
        Dim dr5 As DataRow = DataTables("时间").find("类别=\'" & dr("别") & "\'")
        If dr5 IsNot Nothing Then 
            
            Dim tp04 As TimeSpan
            If dr("第5段") > dr5("第5段") Then
                Dim tp5 As Double = (dr("第5段") - dr5("第5段")).TotalSeconds()
                dr("卡五") = tp04\'    
            Else
                tp04 = dr5("第5段").adddays(1) - dr("第5段") 
            End If
            dr("卡五") = tp04.TotalSeconds() \'
        End If
        
        Dim dr6 As DataRow = DataTables("时间").find("类别=\'" & dr("别") & "\'")
        If dr6 IsNot Nothing Then 
            
            
            Dim tp05 As TimeSpan
            If dr("第6段") > dr6("第6段") Then
                Dim tp6 As Double = (dr("第6段") - dr6("第6段")).TotalSeconds()
                dr("卡六") = tp05\'     
            Else
                tp05 = dr6("第6段").adddays(1) - dr("第6段") 
            End If
            dr("卡六") = tp05.TotalSeconds() \'
            
            
        End If
        End If
End Select
上面写没报错,但执行时,报错:详细错误信息:
调用的目标发生了异常。
参数“Expression”无法转换为类型“TimeSpan”。