以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]代码出错,到类型"double"的转换无效(已解决)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=13642)

--  作者:yyzlxc
--  发布时间:2011/10/20 23:52:00
--  [求助]代码出错,到类型"double"的转换无效(已解决)

一段代码,提取上个月月底的累计兑现列的值,代码运行出错,请各位老师指教如何修改代码,谢谢!!

 

代码如下:

\'绩效奖_累计已兑_DataColChanged
Select Case e.DataCol.Name
    Case "日期","单位","绩效奖_累计兑现","核算标准"
        Dim dr As DataRow = e.DataRow
        Dim mydate As Date = dr("日期")
        Dim y As Integer = mydate.Year
        Dim m As Integer = mydate.Month
        If m <> 1 Then
            Dim m1 As Integer = m - 1
            Dim Days As Integer = Date.DaysInMonth(y,m1)
            Dim syd As Date = New Date(y,m1,Days) \'上月月底日期
            If dr.IsNull("日期") OrElse dr.IsNull("单位") OrElse dr("绩效奖_累计兑现") = 0 Then
                dr("绩效奖_累计已兑") = 0
            Else
                dr("绩效奖_累计已兑") = " \'" & dr("绩效奖_累计兑现") & "\' And 单位 = \'" & dr("单位") & "\'And 日期 =# \'" & syd & "\'#"
            End If
            dr("绩效奖_累计已兑") = 0
    End If
End Select

 

 


图片点击可在新窗口打开查看此主题相关图片如下:l.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2011-10-21 23:31:02编辑过]

--  作者:hanxuntx
--  发布时间:2011/10/21 0:09:00
--  

 dr("绩效奖_累计兑现")  把这句转成字符串

CStr(dr("绩效奖_累计兑现") )


--  作者:yyzlxc
--  发布时间:2011/10/21 0:19:00
--  

谢谢hanxuntx老师的回复,但是可能不行,提示出错。

 


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

--  作者:hanxuntx
--  发布时间:2011/10/21 1:05:00
--  

老师不敢当,同在论坛学习,也许我是瞎指点

 

CStr(dr("绩效奖_累计兑现") ) 这是一个值不能给他赋值了

 

应该是

 

DataTables("表名").Current("绩效奖_累计兑现")  = 表达式值


--  作者:狐狸爸爸
--  发布时间:2011/10/21 8:04:00
--  

问题在这行:

 

dr("绩效奖_累计已兑") = " \'" & dr("绩效奖_累计兑现") & "\' And 单位 = \'" & dr("单位") & "\'And 日期 =# \'" & syd & "\'#"

dr("绩效奖_累计已兑")应该只接受数值的,可以你现在是将一个字符串赋值给他,当然出错的。

 

应该用Compute计算一个值再赋值:

 

http://www.foxtable.com/help/topics/0393.htm

 

 


--  作者:hanxuntx
--  发布时间:2011/10/21 15:36:00
--  
学习了
--  作者:yyzlxc
--  发布时间:2011/10/21 22:28:00
--  

谢谢狐爸老师的回复,可能是我没有讲清楚,用图说明:目的是将从蓝色标记的单元格取值,填充到红色标记的单元格,应该如何修改代码,请各位老师指教,谢谢!!

附图:

 

 


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

--  作者:狐狸爸爸
--  发布时间:2011/10/21 22:49:00
--  
规则是什么?
--  作者:yyzlxc
--  发布时间:2011/10/21 22:53:00
--  
单位=单位,日期=上月月底,累计已兑=累计兑现(也就是上月累计兑现)。如果月份是1月,累计已兑=0。
[此贴子已经被作者于2011-10-21 22:53:58编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/10/21 23:06:00
--  

为什么不会呢? 不就是find出符合条件的行吗?

 

Select Case e.DataCol.Name
    Case "日期","单位"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("日期") OrElse dr.IsNull("单位") OrElse dr("绩效奖_累计兑现") = 0 Then
            dr("绩效奖_累计已兑") = 0
        Else
            Dim mydate As Date = dr("日期")
            If mydate.month = 1 Then
                dr("绩效奖_累计已兑")  = 0
            Else
                mydate= mydate.AddMonths(-1)
                mydate = New Date(mydate.year,mydate.month,Date.DaysInMonth(mydate.Year,mydate.month))
                Dim dr1 As DataRow = e.DataTable.Find("单位 = \'" & dr("单位") & "\'And 日期 =# \'" & mydate & "\'#")
                If dr1 IsNot Nothing Then
                    dr("绩效奖_累计已兑") = dr1("绩效奖_累计兑现")
                Else
                    dr("绩效奖_累计已兑")  = 0
                End If
            End If
        End If
End Select