以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教已录入数据禁止修改单价表产品名称、工序,还有组合合并问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=146369)

--  作者:采菊东篱下
--  发布时间:2020/2/22 12:19:00
--  请教已录入数据禁止修改单价表产品名称、工序,还有组合合并问题

密码是:111111

    我已在单价表写了代码,希望已录入数据禁止修改单价表产品名称、工序,但不能实现,我的代码要在加载数据源表数据后才能执行,如未加载数据该如何改?另生产进度汇总表窗口下的安产品工序按钮里的代码执行时意弹出

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:在编写代码.rar


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

--  作者:有点蓝
--  发布时间:2020/2/22 13:41:00
--  
1、单价表在什么地方写了禁止修改单价表产品名称、工序的代码?没看到

2、计划生产数是表达式列,不能在SQLGroupTableBuilder里使用的,改为

Dim g2 As New SQLGroupTableBuilder("统计表2", "订单数量表")
g2.Groups.AddDef("产品名称")
g2.Groups.AddDef("生产单号")
g2.Totals.AddExp("计划生产数","int([订单数量] * 1.02)")
dt = g2.Build(False)


--  作者:采菊东篱下
--  发布时间:2020/2/22 14:32:00
--  

哦!忘了使用SQL统计数据不能使用表达式,谢谢。

禁止修改已引用的单价表产品名称、工序代码我写在单价表的表属性DataColChanged事件下,还有临时表统计表2的数据出来了,但生产进度汇总表的数据在没加载数据源表数据下不显示数据,应如何改为显?

[此贴子已经被作者于2020/2/22 14:33:13编辑过]

--  作者:有点蓝
--  发布时间:2020/2/22 15:00:00
--  
首先DataColChanged事件没有e.Cancel用法。
其次一般权限控制在PrepareEdit,或者DataColChanging事件里处理。http://www.foxtable.com/webhelp/topics/0605.htm
不同事件有不同的用法,看清楚帮助说明再使用

--  作者:采菊东篱下
--  发布时间:2020/2/22 15:27:00
--  
我开始是把:
Select Case e.DataCol.name
    Case "产品名称","产品编号"
Dim dt As DataRow
Dim dt1 As DataRow
Dim dt2 As DataRow
Dim dt3 As DataRow
Dim dt4 As DataRow
Dim dt5 As DataRow
dt = DataTables("数据源表").find("产品名称 = \'" & e.DataRow("产品名称") & "\'" And "工序名称 = \'" & e.DataRow("工序名称") & "\'")
dt1 = DataTables("数据源表").find("产品编号 = \'" & e.DataRow("产品编号") & "\'"and "工序号 = \'" & e.DataRow("工序号") & "\'")
dt2 = DataTables("订单数量表").find("产品名称 = \'" & e.DataRow("产品名称") & "\'")
dt3 = DataTables("订单数量表").find("产品编号 = \'" & e.DataRow("产品编号") & "\'")
dt4 = DataTables("成品入进仓数").find("产品名称 = \'" & e.DataRow("产品名称") & "\'")
dt5 = DataTables("成品入进仓数").find("产品编号 = \'" & e.DataRow("产品编号") & "\'")
If dt IsNot Nothing Or dt1 IsNot Nothing Or dt2 IsNot Nothing Or dt3 IsNot Nothing Or dt4 IsNot Nothing Or dt5 IsNot Nothing Then
    e.Cancel = True
End If
End Select
写在DataColChanging事件里,但不执行,后想想,我是在编辑后才判断是否允许编辑,如果没被引用,允许编辑的。

[此贴子已经被作者于2020/2/22 16:26:43编辑过]

--  作者:有点蓝
--  发布时间:2020/2/22 15:33:00
--  
没被引用是指什么?意思是如果这个单元格如果有值,就不引用其他表的数据,否则就引用?
[此贴子已经被作者于2020/2/22 15:33:51编辑过]

--  作者:有点蓝
--  发布时间:2020/2/22 15:35:00
--  
没看懂这个代码要表示什么意思。使用文字详细说明一下
--  作者:采菊东篱下
--  发布时间:2020/2/22 16:04:00
--  
单价表里的产品名称、工序名称不是被数据源表、订单数量表作为统一名称、规范叫法在目录树中引用了吗?一旦修改单价表里的产品名称、生产工序,已结账引用的表由于没同步修改,就产生混乱,而且已打的单也不可能再改,故所有管理软件都是设置已引用的基本数据不允许修改,我这段代码的意思是,当数据源表的产品名称、工序名称或订单数量表的产品名称与单价表的产品名称、工序名称当前行相符(即要求为空),则取消编辑,否则允许编辑。
[此贴子已经被作者于2020/2/22 16:17:40编辑过]

--  作者:有点蓝
--  发布时间:2020/2/22 16:19:00
--  
DataColChanging事件
Select Case e.DataCol.name
    Case "产品名称"
        Dim dt As DataRow
        Dim dt2 As DataRow
        dt = DataTables("数据源表").find("产品名称 = \'" & e.oldValue & "\'")
        dt2 = DataTables("订单数量表").find("产品名称 = \'" & e.oldValue   & "\'")
        If dt IsNot Nothing OrElse dt2 IsNot Nothing 
            e.Cancel = True
        End If
    Case "产品编号"
        Dim dt1 As DataRow
        Dim dt3 As DataRow
        dt1 = DataTables("数据源表").find("产品编号 = \'" & e.oldValue & "\'")
        dt3 = DataTables("订单数量表").find("产品编号 = \'" & e.oldValue   & "\'")
        If  dt1 IsNot Nothing OrElse dt3 IsNot Nothing Then
            e.Cancel = True
        End If
End Select
[此贴子已经被作者于2020/2/22 16:20:34编辑过]

--  作者:有点蓝
--  发布时间:2020/2/22 16:24:00
--  
最合理的应该到prepareedit事件处理,直接不给编辑,而不是编辑完了再取消编辑

Select Case e.Col.Name
    Case "产品名称","产品编号"
        Dim dt As DataRow
        Dim dt2 As DataRow
        dt = DataTables("数据源表").find(e.Col.Name & " = \'" & e.Row(e.Col.Name)  & "\'")
        dt2 = DataTables("订单数量表").find(e.Col.Name & " = \'" & e.Row(e.Col.Name)  & "\'")
        If dt IsNot Nothing OrElse dt2 IsNot Nothing 
            e.Cancel = True
        End If
End Select