Foxtable(狐表)用户栏目专家坐堂 → 变量报错


  共有4016人关注过本帖树形打印复制链接

主题:变量报错

帅哥哟,离线,有人找我吗?
lgz518
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
变量报错  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/9 10:52:00 [只看该作者]

tp01这个变量名称重复了,换个不同名称

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2022/5/9 11:02:00 [只看该作者]


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


 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2022/5/9 11:04:00 [只看该作者]


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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/9 11:06:00 [只看该作者]

仍然重复啊,同时改有啥用,改一个就行了

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


 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By: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
        

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/9 11:38:00 [只看该作者]

完整代码发上来

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By: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”。


 回到顶部
总数 11 1 2 下一页