以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  一个按钮,同时修改:2万行的数据 ,可以吗  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=88210)

--  作者:yancheng
--  发布时间:2016/7/28 22:13:00
--  一个按钮,同时修改:2万行的数据 ,可以吗
Dim r As Row = Tables("材料").Current
If r Is Nothing Then
    Return
Else
    systemReady = False
    For Each dr As DataRow In DataTables("材料").DataRows
        If dr.IsNull("成本价")=False And dr("成本价") > 0 Then
            dr("增值税率") = r("增值税率")
            dr("挂靠管理费率")=r("挂靠管理费率")
            dr("利润率") = r("利润率")
            dr("主材损耗率") = r("主材损耗率")
            dr("运杂费") = r("运杂费")
        End If
    Next
systemReady = True

    \'DataTables("材料").Save()
End If
e.Form.Close


马上:FT 未响应了。有没有什么好办法解决?
[此贴子已经被作者于2016/7/28 22:13:27编辑过]

--  作者:pyh6918
--  发布时间:2016/7/28 22:39:00
--  
我是这样做的:第一不死机,第二可了解进度。
还发现个问题:当前表焦点离开要遍历的表,速度要快很多。

Dim ggg As WinForm.Label = e.Form.Controls("Label1")
Dim sss As Double = 0
Dim hh As Double
Dim rs As Double
For Each dr As DataRow In DataTables("表A").DataRows
    ....................................................................
    sss = sss + 1
    If sss Mod 100 =0 Then
        ggg.Text = sss
    End If
    Application.DoEvents
Next
ggg.Text = "OK"

--  作者:jspta
--  发布时间:2016/7/29 8:56:00
--  
u pdate A set 增值税率 = xx,挂靠管理费率 = xx where 成本价 is null or 成本价 > 0 
秒更新

--  作者:Hyphen
--  发布时间:2016/7/29 9:59:00
--  
这种简单更新的建议使用3楼的用法


--  作者:yancheng
--  发布时间:2016/7/29 12:46:00
--  
.N ET Fra mework 版本:2.0.50727.5485
Foxtable 版本:2016.7.8.1
错误所在事件:窗口,材料维护,含税竞争费率,Click
详细错误信息:
从字符串“主材损耗率”到类型“D ouble”的转换无效。
输入字符串的格式不正确。




--  作者:yancheng
--  发布时间:2016/7/29 12:46:00
--  
Dim qb As Win Form.CheckBox = e.Fo rm.Controls("全表")
If qb.Checked = False Then
    Dim r As Row = Tables("材料").Current
    If r Is Nothing Then
        Return
    Else
        r("增值税率")=0.05
        r("挂靠管理费率")=0.25
        r("利润率")=0.4
        r("主材损耗率")=1
        r("运杂费")=0.05
        r.Save()
    End If
Else
    Dim count As In teger
    Dim cmd As new S QL Command
    cm d.Con necti
    cmd.Comma dText= "U PDA TE {材料} S ET 增值税率 = 0.05,挂靠管理费率 = 0.25 ,利润率 = 0.4,主材损耗率 = 1 ,运杂费 = 0.05 w here 成本价 > 0"
    count = cmd.ExecuteNonQuery()
    DataTables("材料").load()
    Messag eBox.Sh ow("全表\'成本价>0\'的 & Count & 行,费率修改完成!")
    qb.Checked = False
    DataTables("材料").Datacols("主材损耗率").RaiseDataColChanged( "主材损耗率" > 0)
    e.Fo rm.Close
End If

麻烦大虾帮我看一下,上面这样定有哪些问题,谢谢

 DataTables("材料").Datacols("主材损耗率").RaiseDataColChanged( "主材损耗率" > 0)
是这一条没执行,执行错误。材损耗率 数据类型是:双精度 小数
LOAD 了,但是没有执行 DataColChanged的代码。所以我想用RaiseDataColChanged来更新一下。
[此贴子已经被作者于2016/7/29 13:27:22编辑过]

--  作者:程兴刚
--  发布时间:2016/7/29 13:37:00
--  
s et第二个字符空格有影响吗?我没测试!
--  作者:程兴刚
--  发布时间:2016/7/29 13:39:00
--  
W here也多一空格!
--  作者:Hyphen
--  发布时间:2016/7/29 14:35:00
--  
DataTables("材料").Datacols("主材损耗率").RaiseDataColChanged( "主材损耗率 > 0")
--  作者:yancheng
--  发布时间:2016/8/2 21:46:00
--  
Dim qb As WinForm.CheckBox = e.F orm.Controls("全表")
If qb.Checked = False Then
    Dim r As Row = Tables("材料").Current
    If r Is Nothing Then
        Return
    Else
        r("增值税率")=0.05
        r("挂靠管理费率")=0.25
        r("利润率")=0.4
        r("主材损耗率")=1
        r("运杂费")=0.05
        r.Save()
    End If
Else
    Dim count As Integer
    Dim cmd As new SQLCommand
    cmd.C
    cmd.CommandText= "U PDATE {材料} SET 增值税率 = 0.05,挂靠管理费率 = 0.25 ,利润率 = 0.4,主材损耗率 = 1 ,运杂费 = 0.05 where 成本价 > 0"
    count = cmd.ExecuteNonQuery()
    DataTables("材料").load()
    MessageBox.Show("全表\'成本价>0\'的 "& Count &" 行,费率修改完成!")
    qb.Checked = False
    SystemReady = False
    DataTables("材料").Datacols("主材损耗率").RaiseDataColChanged("主材损耗率>0")
    SystemReady = True
    e.Form.Close
End If

这个代码:DataTables("材料").Datacols("主材损耗率").RaiseDataColChanged("主材损耗率>0")  执行,就未响应了。