Foxtable(狐表)用户栏目专家坐堂 → 临时表回写到数据库


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

主题:临时表回写到数据库

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


加好友 发短信
等级:狐精 帖子:3096 积分:20666 威望:0 精华:0 注册:2016/3/28 16:57:00
临时表回写到数据库  发帖心情 Post By:2020/7/24 16:31:00 [只看该作者]

老师,以下代码,计算剩余风险金计算不出来是怎么回事呢?“是否使用风险金、退回剩余风险金”两列都是重另外一个表库跨表引用过来的数据。

If e.DataCol.Name = "是否使用风险金" Then
    If e.DataRow("是否使用风险金") = True Then
        Dim cmd1 As New SQLCommand
        Dim dt1 As DataTable
        cmd1.C
        cmd1.CommandText = "S ELECT DISTINCT 所属机构,剩余风险金,经营状态 From {分支机构管理}"
        dt1 = cmd1.ExecuteReader()
        Dim ds As DataRow = dt1.Find("所属机构 = '" & e.DataRow("所属机构") & "' and 经营状态 = '正常'")
        If ds IsNot Nothing Then
            e.DataRow("剩余风险金") = e.DataRow("退回风险金")+ ds("剩余风险金")
        Else
            e.DataRow("剩余风险金") = ds("剩余风险金")
        End If
    End If
End If

 

If e.DataCol.Name = "保证金状态" Then '如果是申请确认列的内容变动
    If  e.DataRow.IsNull("保证金状态") = False And e.DataRow("保证金状态") = "已退款成功" Then '而且变动后的值是True(已勾选)
'退回风险金后同步风险金至分支机构管理
        Dim cmd2 As New SQLCommand
        cmd2.C
        cmd2.CommandText = "U  PDATE {分支机构管理} SET 剩余风险金 = " & e.DataRow("剩余风险金") & " WHERE 所属机构 = '" & e.DataRow("所属机构") & "' and 经营状态 = '正常'"
        cmd2.ExecuteNonQuery()

    End If
End If

[此贴子已经被作者于2020/7/24 16:35:48编辑过]

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


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/24 16:50:00 [只看该作者]

1、数据库没有符合条件的行
2、
        If ds IsNot Nothing Then
            e.DataRow("剩余风险金") = e.DataRow("退回风险金")+ ds("剩余风险金")
        Else
            e.DataRow("剩余风险金") = nothing
        End If

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


加好友 发短信
等级:狐精 帖子:3096 积分:20666 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/7/24 17:03:00 [只看该作者]

老师,剩余风险金不对呢,没把退回风险金加上

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


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/24 17:04:00 [只看该作者]

 If ds IsNot Nothing Then
            e.DataRow("剩余风险金") = e.DataRow("退回风险金")+ ds("剩余风险金")
        Else
            e.DataRow("剩余风险金") = e.DataRow("退回风险金")
        End If

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


加好友 发短信
等级:狐精 帖子:3096 积分:20666 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/7/24 17:19:00 [只看该作者]

老师,我原来代码应该是没有问题,就感觉跨表引用(是否使用风险金)过来,不触发(是否使用风险金)这一列,我手动重置(是否使用风险金)这一列后,剩余风险金才是对的,我前面跨表引用代码及计算剩余风险金代码如下

'引用支出时的数据

If e.DataCol.Name = "项目名称" Then  '如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then  '如果新值是空白,也就是品名列的内容为空
        e.DataRow("项目编码") = Nothing '那么清空此行单价列的内容
        e.DataRow("所属机构") = Nothing '那么清空此行单价列的内容
        e.DataRow("项目类别") = Nothing '那么清空此行单价列的内容
        e.DataRow("申请退回保证金金额") = Nothing '那么清空此行单价列的内容
        e.DataRow("是否使用风险金") = Nothing '那么清空此行单价列的内容
        e.DataRow("退回风险金") = Nothing
        e.DataRow("退回现金") = Nothing
        e.DataRow("申请退回保证金户名") = Nothing
        e.DataRow("申请退回保证金账号") = Nothing
        e.DataRow("申请退回保证金开户银行") = Nothing
        e.DataRow("ID") = Nothing
    Else
        Dim cmd As New SQLCommand
        Dim dt As DataTable
        cmd.C
        cmd.CommandText = "S ELECT * From {打投标保证金} where [项目名称]= '" & e.NewValue & "'"
        dt = cmd.ExecuteReader()
        If dt.datarows.count > 0
            Dim dr As DataRow = dt.datarows(0)
            Dim fdr  As  DataRow
            fdr = e.DataTable.sqlFind("项目编码 = '" & dr("项目编码") &  "'")
            If fdr IsNot Nothing Then
                For Each dc As DataCol In e.DataTable.datacols
                    If dc.Expression = "" Then   '当有表达式列时,不可缺少的判断
                        e.DataRow(dc.name)=Nothing
                    End If
                Next
                MessageBox.Show("该笔保证金已申请退款,请勿重复申请!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                Return
            End If
            e.DataRow("项目编码") = dr("项目编码")
            e.DataRow("所属机构") = dr("所属机构")
            e.DataRow("项目类别") = dr("项目类别")
            e.DataRow("申请退回保证金金额") = dr("保证金金额")
            e.DataRow("是否使用风险金") = dr("是否使用风险金")
            e.DataRow("退回风险金") = dr("本次使用风险金")
            e.DataRow("退回现金") = dr("需缴纳现金")
            e.DataRow("申请退回保证金户名") = dr("付款方户名")
            e.DataRow("申请退回保证金账号") = dr("付款方账号")
            e.DataRow("申请退回保证金开户银行") = dr("付款方开户银行")
            e.DataRow("ID") = dr("ID")
        End If
    End If
End If

 

'计算剩余风险金

If e.DataCol.Name = "是否使用风险金" Then
    If e.DataRow("是否使用风险金") = True Then
        Dim cmd1 As New SQLCommand
        Dim dt1 As DataTable
        cmd1.C
        cmd1.CommandText = "S  ELECT DISTINCT 所属机构,剩余风险金,经营状态 From {分支机构管理}"
        dt1 = cmd1.ExecuteReader()
        Dim ds As DataRow = dt1.Find("所属机构 = '" & e.DataRow("所属机构") & "' and 经营状态 = '正常'")
        If ds IsNot Nothing Then
            e.DataRow("剩余风险金") = e.DataRow("退回风险金")+ ds("剩余风险金")
        Else
            e.DataRow("剩余风险金") = ds("剩余风险金")
        End If
    End If
End If

 

 


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

 


我手动重置(是否使用风险金)这一列后,剩余风险金=50000才是正确的

[此贴子已经被作者于2020/7/24 17:22:22编辑过]

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


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/24 17:42:00 [只看该作者]

f e.DataCol.Name = "是否使用风险金" Then
    If e.DataRow("是否使用风险金") = True Then
        Dim cmd1 As New SQLCommand
        Dim dt1 As DataTable
        cmd1.C
        cmd1.CommandText = "S  ELECT DISTINCT 所属机构,剩余风险金,经营状态 From {分支机构管理} where 所属机构 = '" & e.DataRow("所属机构") & "' and 经营状态 = '正常'"
        dt1 = cmd1.ExecuteReader()
msgbox(dt1.datarows.count)
        If dt1.datarows.count > 0 Then
            e.DataRow("剩余风险金") = e.DataRow("退回风险金")+ dt1.datarows(0)("剩余风险金")
        Else
            e.DataRow("剩余风险金") = e.DataRow("剩余风险金")
        End If
    End If
End If

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


加好友 发短信
等级:狐精 帖子:3096 积分:20666 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/7/24 17:52:00 [只看该作者]

弹出来是:30,总的行数是对的

金额还是不对

 

我按照我之前的,msgbox(ds("剩余风险金"))为49999,但是 msgbox(e.DataRow("退回风险金"))= 0,跨表引用数据没执行完在执行后面的代码了,问题应该是出在这个上

 

If e.DataCol.Name = "是否使用风险金" Then
    If e.DataRow("是否使用风险金") = True Then
        Dim cmd1 As New SQLCommand
        Dim dt1 As DataTable
        cmd1.C
        cmd1.CommandText = "S ELECT DISTINCT 所属机构,剩余风险金,经营状态 From {分支机构管理}"
        dt1 = cmd1.ExecuteReader()
        Dim ds As DataRow = dt1.Find("所属机构 = '" & e.DataRow("所属机构") & "' and 经营状态 = '正常'")
        If ds IsNot Nothing Then
            msgbox(e.DataRow("退回风险金"))
            msgbox(ds("剩余风险金"))
            e.DataRow("剩余风险金") = e.DataRow("退回风险金")+ ds("剩余风险金")
        Else
            e.DataRow("剩余风险金") = ds("剩余风险金")
        End If
    End If
End If

[此贴子已经被作者于2020/7/24 18:00:08编辑过]

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


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/25 8:57:00 [只看该作者]

查出来后30行?那么取哪一行的金额,还是要进行合计?还是说条件不正确,无法找到指定的行数据?

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


加好友 发短信
等级:狐精 帖子:3096 积分:20666 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/7/27 9:11:00 [只看该作者]

老师,我发现这个主要问题是以你为,代码执行顺序不是把跨表引用代码执行完以后,再执行的第二段“计算剩余风险金”的代码,而是执行到“是否使用风险金”后,马上就执行第二段:计算剩余风险金的代码,跨表引用退回金额的数据还没引用过来,执行了后面的代码,那时候退回风险金的金额还是0,所以剩余风险金一直不对。

不知道是不是我理解有问题,我把跨表引用中:“是否使用风险金”改到最后引用就没问题。


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


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/27 9:18:00 [只看该作者]

datacolchanged事件还有其它代码?这个要具体各列的赋值顺序吗,以及代码的执行顺序了

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