以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=117319)

--  作者:沪上游客
--  发布时间:2018/4/10 16:57:00
--  [求助]
老师您好!
以下代码是如果在"补充合同或决算数据"表中"本次造价增减"列更改数据后计算"本次造价增减"列的和,并更新"工程合同基础数据"表"补充或决算增减"列后台数据。
但是执行后,更新的后台数据都是整数(四舍五入),我在帮助里看到了“SQLReplaceFor会返回一个整数,表示合计有多少行的值被替换了”,而我现在不需要知道多少行被修改(本来对应的记录就只有一行数据)。是不是要用SQLupdate 命令 ?象我这种情况应该怎么写代码?
请老师指教,谢谢老师!

If e.DataCol.Name = "本次造价增减" Then
    For Each dr As DataRow In DataTables("补充合同或决算数据").datarows
        Dim bgzg As Double
        bgzg = DataTables("补充合同或决算数据").Compute("Sum(本次造价增减)","循环编号 = \'" & dr("循环编号") & "\'")
        DataTables("工程合同基础数据").SQLReplaceFor("补充或决算增减",bgzg,"循环编号 = \'" & dr("循环编号") & "\'")
        DataTables("工程合同基础数据").SQLReplaceFor("实际造价","合同价款 + 补充或决算增减","循环编号 = \'" & dr("循环编号") & "\'",True)
    Next
End If

--  作者:有点甜
--  发布时间:2018/4/10 17:21:00
--  

1、你表格对应列的类型是什么?是双精度小数还是整数?

 

2、代码是没有问题,肯定是列类型问题。


--  作者:沪上游客
--  发布时间:2018/4/10 17:38:00
--  
你好,我的设置的是高精度小数,以前设置了双精度小数出现过误差。后来全部改了。
但是在“工程合同基础数据”表的DataColChanged中设置的以下代码计算是对的,但再次打开时又错了。
e.DataRow("补充或决算增减") = DataTables("补充合同或决算数据").SQLCompute("Sum(本次造价增减)","循环编号 = \'" & e.DataRow("循环编号") & "\'")
[此贴子已经被作者于2018/4/10 17:46:19编辑过]

--  作者:有点甜
--  发布时间:2018/4/10 17:51:00
--  
你计算赋值以后,保存了没有?后台数据库那里看到你保存的数据了没有?
--  作者:沪上游客
--  发布时间:2018/4/10 17:56:00
--  
您的意思是SQL数据库列的类型有问题吗?

我查过了SQL数据库该列都整数,怎么回事?

[此贴子已经被作者于2018/4/10 18:14:44编辑过]

--  作者:有点甜
--  发布时间:2018/4/10 18:07:00
--  
以下是引用沪上游客在2018/4/10 17:56:00的发言:
您的意思是SQL数据库列的类型有问题吗?

 

保存后,数据保存到sql数据库里面了没有?如果正常保存,再打开出问题,说明是代码问题(你打开程序执行的代码有问题)。如果保存也不正常,说明是列类型问题。


--  作者:沪上游客
--  发布时间:2018/4/10 18:22:00
--  
老师我在修改后数据保存到sql数据库里面了,但实行四舍五入了。
--  作者:有点甜
--  发布时间:2018/4/10 18:28:00
--  
以下是引用沪上游客在2018/4/10 18:22:00的发言:
老师我在修改后数据保存到sql数据库里面了,但实行四舍五入了。

 

没看懂你的问题。比如,foxtable里面填入 123.456,保存,在数据库里面存放成什么了?再打开,123.456变成什么了?举例说明


--  作者:沪上游客
--  发布时间:2018/4/10 18:41:00
--  
For Each dr As DataRow In DataTables("补充合同或决算数据").datarows
    Dim bgzg As Integer
    bgzg = DataTables("补充合同或决算数据").Compute("Sum(本次造价增减)","循环编号 = \'" & dr("循环编号") & "\'")
    DataTables("工程合同基础数据").SQLReplaceFor("补充或决算增减",bgzg,"循环编号 = \'" & dr("循环编号") & "\'")
    DataTables("工程合同基础数据").SQLReplaceFor("实际造价","合同价款 + 补充或决算增减","循环编号 = \'" & dr("循环编号") & "\'",True)
Next
DataTables("补充合同或决算数据").Save()

For Each dr As DataRow In DataTables("支出合同补充或决算").datarows
    Dim bgzg As Integer
    bgzg = DataTables("支出合同补充或决算").Compute("Sum(本次增减)","循环编号 = \'" & dr("循环编号") & "\'")
    DataTables("支出合同基础数据").SQLReplaceFor("补充或决算增减",bgzg,"循环编号 = \'" & dr("循环编号") & "\'")
    DataTables("支出合同基础数据").SQLReplaceFor("支出合同实际价款","支出合同价款 + 补充或决算增减","循环编号 = \'" & dr("循环编号") & "\'",True)
Next
DataTables("支出合同补充或决算").Save()

老师找到问题了,我不知道什么时候在AfterSaveProject中设置了上面代码
应该是Dim bgzg As Integer  错了

谢谢老师!