以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  自动取数  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=149339)

--  作者:nbsugu_z
--  发布时间:2020/4/29 12:35:00
--  自动取数
表dk_lxb 有以下列
   产品编号 (cpbm),  付息日期(fxrq), 起息日期(qxrq),止息日期(zxrq), 标志(bz)
当窗口按钮新增一行时,(bz)是在窗口新增行时默认填充的。要求当bz=1时执行如下代码
过程是:先查找不同产品编号中的上次zxrq最大的日期,找出后:
            新增行的qxrq=找出的zxrq加一天 (上次计算日止第二天重新开始计息开始日期)
            新增行的zxrq=找出的zxrq加一月  (上次计算日止加一个月结算期)
            新增行的fxrq=zxrq加一天 (利息计算止日第二天付款)
问题:我在当窗口按钮新增一行时,这三个日期出不来,是什么原因?

\'以下增加一个月自动填写所有日期
Select Case e.DataCol.name
    Case "cpbm","bz"
        If e.DataRow.IsNull("cpbm") OrElse e.DataRow.IsNull("bz") Then
            e.DataRow("fxrq") = Nothing
            e.DataRow("qxrq") = Nothing
            e.DataRow("zxrq") = Nothing
        Else
                Dim ddr0 As DataRow
                Dim max As Date
                max = e.DataTable.Compute("Max(zxrq)")
                ddr0 = DataTables("dk_lxb").Find("[cpbm] = \'" & e.DataRow("cpbm")  & "\' And [zxrq] = #" & Max & "#")
                If e.DataRow("bz")=1 Then               
                Dim dd4 As Date = e.DataRow("zxrq") \'止息日期
                Dim dd1 As Date = dd4.AddDays(1)     \'起息日期
                Dim dd2 As Date = dd4.addmonths(1)   \'第二次止息日期
                Dim dd3 As Date = dd2.AddDays(1)   \'付息日期
                           
                If ddr0 IsNot Nothing
                    e.DataRow("fxrq") = ddr0("dd3")
                    e.DataRow("qxrq") = ddr0("dd1")
                    e.DataRow("zxrq") = ddr0("dd2")
                End If
                
            End If
        End If
End Select


--  作者:有点蓝
--  发布时间:2020/4/29 13:59:00
--  
……
        Else
If e.DataRow("bz")=1 Then         
                Dim ddr0 As DataRow
                Dim max As Date
                max = e.DataTable.Compute("Max(zxrq)")
                ddr0 = DataTables("dk_lxb").Find("[cpbm] <> \'" & e.DataRow("cpbm")  & "\'","zxrq desc")               
                If ddr0 IsNot Nothing
                Dim dd4 As Date = ddr0("zxrq") \'止息日期
                Dim dd1 As Date = dd4.AddDays(1)     \'起息日期
                Dim dd2 As Date = dd4.addmonths(1)   \'第二次止息日期
                Dim dd3 As Date = dd2.AddDays(1)   \'付息日期
                    e.DataRow("fxrq") =  dd3
                    e.DataRow("qxrq") =  dd1 
                    e.DataRow("zxrq") = dd2 
                End If
                
            End If
……

--  作者:nbsugu_z
--  发布时间:2020/4/29 14:22:00
--  
表dk_lxb 有以下列
   产品编号 (cpbm),  付息日期(fxrq), 起息日期(qxrq),止息日期(zxrq), 标志(bz)
当窗口按钮新增一行时,(bz)是在窗口新增行时默认填充的。要求当bz=1时执行如下代码
过程是:先查找不同产品编号中的上次zxrq最大的日期,找出后:
            新增行的qxrq=找出的zxrq加一天 (上次计算日止第二天重新开始计息开始日期)
            新增行的zxrq=找出的zxrq加一月  (上次计算日止加一个月结算期)
            新增行的fxrq=zxrq加一天 (利息计算止日第二天付款)
问题:我在当窗口按钮新增一行时,这三个日期出不来,是什么原因?

\'以下增加一个月自动填写所有日期
Select Case e.DataCol.name
    Case "cpbm","bz"
        If e.DataRow.IsNull("cpbm") OrElse e.DataRow.IsNull("bz") Then
            e.DataRow("fxrq") = Nothing
            e.DataRow("qxrq") = Nothing
            e.DataRow("zxrq") = Nothing
        Else
                If e.DataRow("bz")= "1" Then         
                Dim ddr0 As DataRow
                Dim max As Date
                max = e.DataTable.Compute("Max(zxrq)")
                ddr0 = DataTables("dk_lxb").Find("[cpbm] <> \'" & e.DataRow("cpbm")  & "\'","zxrq desc")               
                If ddr0 IsNot Nothing
                Dim dd4 As Date = ddr0("zxrq") \'止息日期
                Dim dd1 As Date = dd4.AddDays(1)     \'起息日期
                Dim dd2 As Date = dd4.addmonths(1)   \'第二次止息日期
                Dim dd3 As Date = dd2.AddDays(1)   \'付息日期
                    e.DataRow("fxrq") =  dd3
                    e.DataRow("qxrq") =  dd1 
                    e.DataRow("zxrq") = dd2 
                End If                
            End If
        End If
End Select
 

老师。出不来
[此贴子已经被作者于2020/4/29 14:23:34编辑过]

--  作者:有点蓝
--  发布时间:2020/4/29 14:45:00
--  
数据有没有加载?做个例子发上来看看
--  作者:nbsugu_z
--  发布时间:2020/4/29 15:12:00
--  
ddr0 = DataTables("dk_lxb").Find("[cpbm] = \'" & e.DataRow("cpbm")  & "\'","zxrq desc")
修改成等于=可以了
但是在重置数据时,所有日期年份都变成 0001了
0001-05-29

而且日期输入下拉框都成了0001年了。电脑系统日期还是正确的

[此贴子已经被作者于2020/4/29 15:17:11编辑过]

--  作者:有点蓝
--  发布时间:2020/4/29 15:19:00
--  
不是说“过程是:先查找不同产品编号中的上次zxrq最大的日期”?所谓我才改为<>

应该不是代码的问题,数据问题,是不是一些止息日期本来就没有年份,或者是空值?