以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于后台数据库更新问题(二) (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=194590) |
-- 作者:刘效功天津 -- 发布时间: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 |
-- 作者:有点蓝 -- 发布时间:2024/12/25 11:03:00 -- 没看懂表达的什么意思。哪段代码有问题? |
-- 作者:刘效功天津 -- 发布时间:2024/12/25 11:16:00 -- 老师好,是全隐框玻璃幕墙单价分析表的DataColChanged事件中的代码没起作用,就比如在比率表中更改了比率系数数据,在全隐框玻璃幕墙单价分析表中对应的比率系数的数据也发生实时更新,但是在全隐框玻璃幕墙单价分析表中 由比率系数的改变引起其它数据的变化并没有发生,全隐框玻璃幕墙单价分析表中其它数据的变化逻辑代码写在DataColChanged事件中,也就是说,没有DataColChanged事件代码没发生作用 |
-- 作者:刘效功天津 -- 发布时间:2024/12/25 11:19:00 -- 老师好,在设计的窗口中,通过数据更新按钮代码,是可实现其它数据更新的,我就想在没有窗口的情况下,就是在主表的情况下,为啥没动作 |
-- 作者:刘效功天津 -- 发布时间:2024/12/25 11:24:00 -- 代码都没问题,我测试了,就是好像在主表情况下代码不能很好的衔接,我针对的是后台数据表, 如果改成都加载了表,不把他改成后台数据表,就正常没问题,一改成后台数据表,进行后台数据的数据更行就发现上面的问题,代码衔接不上,只针对某个数据起作用,由该数据的变化引起的其它数据的改变却不发生变化 |
-- 作者:有点蓝 -- 发布时间:2024/12/25 11:31:00 -- 【在比率表中更改了比率系数数据】和其它表有什么关系?也没看到比率表事件有重置其它表列和更改其它表的代码。注意加载表数据是不会触发datacolchanged事件的,只有编辑表格数据才会触发 |
-- 作者:刘效功天津 -- 发布时间:2024/12/25 11:32:00 -- 老师好,我用Sql 语言的(select 语句生成的临时表 或 UPtate语句)+移除+追载的方法,已及load重新加载的方法都发生上面的问题,衔接不上,我一个一个都调试过,上面的比率表中写的更行代码,只是用了其中的一个方法 |
-- 作者:刘效功天津 -- 发布时间:2024/12/25 11:41:00 -- 奥,老师的意思就是,从后台重新加载的表是不会触发DATACOLCHANGED事件的,那就是更改了后台数据后重新加载该表,它不会触发DATACOLCHANGED事件代码,这就对了,另外我在修改比率表数据之前就把全隐框玻璃幕墙单价分析表加载到咱们得平台上了,但是我在比率表中数据更新的代码采用的操作后台数据更新代码,当比率系数发生变化后,对于已经加载的全隐框玻璃幕墙单价分析表,也就是比率系数发生更新,它的DATACOLCHANGED事件代码任然没起作用,其它数据任然没发生改变 |
-- 作者:刘效功天津 -- 发布时间:2024/12/25 11:48:00 -- 对于已经加载了的表,不就是正常的表了,如果采用咱们软件自带的跨表数据更新代码,就没问题,但是采用操作后台数据的跨表更新代码,就只对更行的单个几个数据有动作,由此数据引发的其它数据就没动作,这会不会是在跨表数据更新代码采用的操作后台数据库的方法引起的,搞不懂 |
-- 作者:有点蓝 -- 发布时间:2024/12/25 11:50:00 -- 加载数据后重置列 …… DataTables(bm).AppendLoad("项目构成 = \'现场经费\' And 辅助列1 = \'间接费\'") DataTables(bm).DataCols("比率系数").RaiseDataColChanged("项目构成 = \'现场经费\' And 辅助列1 = \'间接费\'")
|