Foxtable(狐表)用户栏目专家坐堂 → 关于后台数据库更新问题(二)


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

主题:关于后台数据库更新问题(二)

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


加好友 发短信
等级:幼狐 帖子:126 积分:861 威望:0 精华:0 注册:2023/9/19 11:27:00
关于后台数据库更新问题(二)  发帖心情 Post By:2024/12/25 10:44:00 [显示全部帖子]

问题,关于后台数据库更新  经测试   在比率表中更改 "比率系数"数据,在<全隐框幕墙单价分析表>中(不管是后台数据表重新加载,还是已经加载的数据表)都能实现及时更新对应的"比率系数"数据,

但是在<全隐框幕墙单价分析表> DataColChanged中的代码不起作用,不会更新代码计算出的其它数据结果,目的,对于后台数据表不管是某个数据的更新,并且通过该数据的更新 进而引发DataColChanged中的代码,实现表中其它数据也在该数据的作用下实现计算更新,请老师分析一下问题出在哪儿,遇到这样的后台数据库更新的问题,怎么衔接代码,达到预期目的,谢谢老师!

 

下面是比率表和全隐框玻璃幕墙单价分析表的代码,比率表修改数据   全隐框玻璃幕墙单价分析表进行数据更新  经测试没问题,但是就是出现上面的问题,全隐框玻璃幕墙单价分析表DataColChanged中的代码不起作用 

'在比率表中DataColChanged中的代码,该代码用于自动更新 <全隐框幕墙单价分析表>中的数据 ( 已经测试没问题方向使用  针对的是固定筛选条件的行,采用移除和追加语句进行)

'Select Case e.DataCol.Name

'    Case "比率系数", "备注"

'        Dim bms() As String = {"全隐框玻璃幕墙单价分析表", "全明框玻璃幕墙单价分析表"}

'        For Each bm As String In bms

'            '定义后台数据库跨表更新数据代码 

'            Dim cmd As New SQLCommand

'            cmd.Parameters.clear

'            cmd.CommandText = "UPDA   TE  {" & bm & "}  SET  比率系数='" & e.DataRow("比率系数") & "' , 备注='" & e.DataRow("备注") & "'  Where  项目构成 = '现场经费' And 辅助列1 = '间接费'"

'            cmd.ExecuteNonQuery

 

'            DataTables(bm).RemoveFor("项目构成 = '现场经费' And 辅助列1 = '间接费'")

'            DataTables(bm).AppendLoad("项目构成 = '现场经费' And 辅助列1 = '间接费'")

''        Next

'End Select

以下是<全隐框幕墙单价分析表>DataColChanged中的代码  ,用于<全隐框幕墙单价分析表>中各种数据的整合计算,得出表中正确的结果(代码经测试没问题,能得到想要的结果)

Select Case e.DataCol.Name

    Case "用量", "单价", "比率系数"

        '  定义合价,合价上涨百分比 填写方式代码

        If e.DataRow.IsNull("比率系数") And e.DataRow.IsNull("用量") And e.DataRow.IsNull("单价") Then

            e.DataRow("合价") = Nothing

        End If

       

        '  定义 材料费,人工费项目列中  比率系数 不能输入内容,以及合价的计算方式的计算方式代码

        If e.DataRow("科目编码") = "材料费" Or e.DataRow("科目编码") = "人工费" Then

            e.DataRow("比率系数") = Nothing'定义比率系数不能输入内容

            If e.DataRow.IsNull("用量") Or e.DataRow.IsNull("单价") Then

                e.DataRow("合价") = Nothing

            Else

                e.DataRow("合价") = e.DataRow("用量") * e.DataRow("单价")

            End If

        End If

       

        '三以下是定义合价的计算方式代码的全部代码,其中又分几部分单元代码,见下面代码提示

        '1 定义各种变量代码

        Dim clf As Double '定义材料费变量

        Dim rgf As Double '定义人工费变量

        Dim jxf As Double '定义机械费变量

        Dim jjf As Double '定义间接费变量

        Dim lr As Double '定义利润变量

        Dim sj As Double '定义税金变量

 

 

        '2 定义材料费 人工费 机械费,间接费,利润,税金的逻辑求和代码

        clf = DataTables("全隐框玻璃幕墙单价分析表").Compute("Sum(合价)", "科目编码 = '材料费'")

        rgf = DataTables("全隐框玻璃幕墙单价分析表").Compute("Sum(合价)", "科目编码 = '人工费'")

        jxf = DataTables("全隐框玻璃幕墙单价分析表").Compute("Sum(合价)", "科目编码 = '机械费'")

        jjf = DataTables("全隐框玻璃幕墙单价分析表").Compute("Sum(合价)", "科目编码 = '间接费' AND 项目构成 <> '间接费'")

        lr = DataTables("全隐框玻璃幕墙单价分析表").Compute("Sum(合价)", "科目编码 = '利润'")

        sj = DataTables("全隐框玻璃幕墙单价分析表").Compute("Sum(合价)", "科目编码 = '税金'")

   

        '3 定义  机械费  生成数据时  逻辑运算代码

        If e.DataRow("科目编码") = "机械费" Then

            If e.DataRow.IsNull("比率系数") Then '定义必须启动比率系数列的值来控制运量和单价的内容

                e.DataRow("用量") = Nothing '定义用量不能输入内容

                e.DataRow("单价") = Nothing '定义单价不能输入内容

            Else

                e.DataRow("用量") = 1'定义用量只能填写1

                e.DataRow("单价") = Nothing'定义单价不能输入内容

                e.DataRow("合价") = clf * e.DataRow("比率系数") '定义  机械费   逻辑运算代吗           

            End If

        End If

           '4 定义  间接费  生成数据时 逻辑运算辑代码  

        If e.DataRow("科目编码") = "间接费" And e.DataRow("项目构成") <> "间接费"Then

            If e.DataRow.IsNull("比率系数") Then

                e.DataRow("用量") = Nothing

                e.DataRow("单价") = Nothing

            Else

                e.DataRow("用量") = 1'定义用量只能填写1

                e.DataRow("单价") = Nothing

                e.DataRow("合价") = (clf + rgf + jxf) * e.DataRow("比率系数")'定义  间接费   逻辑运算代码

            End If

        End If

                '5 定义  利润  生成数据时 逻辑运算辑代码

        If e.DataRow("科目编码") = "利润" Then

            e.DataRow("用量") = Nothing'定义 用量 不能输入内容 

            e.DataRow("单价") = Nothing'定义 单价 不能输入内容 

            e.DataRow("合价") = (clf + rgf + jxf + jjf) * e.DataRow("比率系数")'定义  利润   逻辑运算代码

        End If

       

        '6 定义  税金  生成数据时 逻辑运算辑代码

        If e.DataRow("科目编码") = "税金" Then

            e.DataRow("用量") = Nothing'定义 用量 不能输入内容 

'            e.DataRow("单价") = Nothing'定义 单价 不能输入内容 

'            e.DataRow("合价") = (clf + rgf + jxf + jjf + lr) * e.DataRow("比率系数")'定义  税金   逻辑运算代码

              e.DataRow("合价") = (clf + rgf + jxf + jjf + lr) * e.NewValue'定义  税金   逻辑运算代码

        End If

       

        '7 定义  平米单价  生成数据时 逻辑运算辑代码

        If e.DataRow("科目编码") = "平米单价" Then

            e.DataRow("用量") = Nothing'定义 用量 不能输入内容 

            e.DataRow("单价") = Nothing'定义 单价 不能输入内容      

            e.DataRow("合价") = clf + rgf + jxf + jjf + lr + sj '定义  平米单价   逻辑运算代码   

        End If

End Select


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


加好友 发短信
等级:幼狐 帖子:126 积分:861 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2024/12/25 11:16:00 [显示全部帖子]

老师好,是全隐框玻璃幕墙单价分析表的DataColChanged事件中的代码没起作用,就比如在比率表中更改了比率系数数据,在全隐框玻璃幕墙单价分析表中对应的比率系数的数据也发生实时更新,但是在全隐框玻璃幕墙单价分析表中  由比率系数的改变引起其它数据的变化并没有发生,全隐框玻璃幕墙单价分析表中其它数据的变化逻辑代码写在DataColChanged事件中,也就是说,没有DataColChanged事件代码没发生作用

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


加好友 发短信
等级:幼狐 帖子:126 积分:861 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2024/12/25 11:19:00 [显示全部帖子]

老师好,在设计的窗口中,通过数据更新按钮代码,是可实现其它数据更新的,我就想在没有窗口的情况下,就是在主表的情况下,为啥没动作


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


加好友 发短信
等级:幼狐 帖子:126 积分:861 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2024/12/25 11:24:00 [显示全部帖子]

代码都没问题,我测试了,就是好像在主表情况下代码不能很好的衔接,我针对的是后台数据表, 如果改成都加载了表,不把他改成后台数据表,就正常没问题,一改成后台数据表,进行后台数据的数据更行就发现上面的问题,代码衔接不上,只针对某个数据起作用,由该数据的变化引起的其它数据的改变却不发生变化

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


加好友 发短信
等级:幼狐 帖子:126 积分:861 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2024/12/25 11:32:00 [显示全部帖子]

老师好,我用Sql 语言的(select  语句生成的临时表 或 UPtate语句)+移除+追载的方法,已及load重新加载的方法都发生上面的问题,衔接不上,我一个一个都调试过,上面的比率表中写的更行代码,只是用了其中的一个方法

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


加好友 发短信
等级:幼狐 帖子:126 积分:861 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2024/12/25 11:41:00 [显示全部帖子]

奥,老师的意思就是,从后台重新加载的表是不会触发DATACOLCHANGED事件的,那就是更改了后台数据后重新加载该表,它不会触发DATACOLCHANGED事件代码,这就对了,另外我在修改比率表数据之前就把全隐框玻璃幕墙单价分析表加载到咱们得平台上了,但是我在比率表中数据更新的代码采用的操作后台数据更新代码,当比率系数发生变化后,对于已经加载的全隐框玻璃幕墙单价分析表,也就是比率系数发生更新,它的DATACOLCHANGED事件代码任然没起作用,其它数据任然没发生改变

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


加好友 发短信
等级:幼狐 帖子:126 积分:861 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2024/12/25 11:48:00 [显示全部帖子]

对于已经加载了的表,不就是正常的表了,如果采用咱们软件自带的跨表数据更新代码,就没问题,但是采用操作后台数据的跨表更新代码,就只对更行的单个几个数据有动作,由此数据引发的其它数据就没动作,这会不会是在跨表数据更新代码采用的操作后台数据库的方法引起的,搞不懂

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


加好友 发短信
等级:幼狐 帖子:126 积分:861 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2024/12/25 11:53:00 [显示全部帖子]

好的,谢谢老师,我试试

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


加好友 发短信
等级:幼狐 帖子:126 积分:861 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2024/12/25 14:52:00 [显示全部帖子]

老师好,问题解决了,我当时也想着用RaiseDataColChanged()这个方法,光知道参数可以写成DR  就是没想出参数还能这么写:("项目构成 = '现场经费' And 辅助列1 = '间接费'")  谢谢老师,祝老师一切都好  

 回到顶部