以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]数据导入和录入冲突  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85862)

--  作者:yuyoufei11
--  发布时间:2016/6/4 0:54:00
--  [求助]数据导入和录入冲突
求大神解答:
图片点击可在新窗口打开查看此主题相关图片如下:主窗口.png
图片点击可在新窗口打开查看这是主窗口的三个按钮。订单导入按钮的代码是:
图片点击可在新窗口打开查看此主题相关图片如下:导入代码.png
图片点击可在新窗口打开查看
这个录入按钮代码:
图片点击可在新窗口打开查看此主题相关图片如下:订单录入按钮代码.png
图片点击可在新窗口打开查看


--  作者:yuyoufei11
--  发布时间:2016/6/4 1:02:00
--  
这个是订单明细表DataColChanged代码;
图片点击可在新窗口打开查看此主题相关图片如下:datacolchanged代码.png
图片点击可在新窗口打开查看

这个是录入
图片点击可在新窗口打开查看此主题相关图片如下:订单录入按钮代码.png
图片点击可在新窗口打开查看

我是通过录入按钮复制订单明细表的数据到纸片整理表,同时也通过订单导入按钮导入数据到订单明细表,在通过表事件复制到纸片整理表。
现在的问题是:
图片点击可在新窗口打开查看此主题相关图片如下:错误.png
图片点击可在新窗口打开查看,纸片整理表在通过订单录入时会多出一行,表事件增加一行和录入按钮增加一行。
这个代码要怎么改,改哪里????

--  作者:yuyoufei11
--  发布时间:2016/6/4 1:03:00
--  
最后一个图错了
图片点击可在新窗口打开查看此主题相关图片如下:问题.png
图片点击可在新窗口打开查看

--  作者:Hyphen
--  发布时间:2016/6/4 9:33:00
--  
没看懂到底要做什么?

在订单录入代码中都用Addnew,当然会增加一行

--  作者:yuyoufei11
--  发布时间:2016/6/4 13:24:00
--  
不用Addnew的话代码怎么写,我目的是,导入的和单个通过窗口录入的都可以复制到纸片整理表里去而且双方不冲突
--  作者:Hyphen
--  发布时间:2016/6/4 14:19:00
--  
上例子,说一下操作逻辑
--  作者:yuyoufei11
--  发布时间:2016/6/4 15:45:00
--  
大神帮忙看看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.table


--  作者:Hyphen
--  发布时间:2016/6/4 16:58:00
--  
Dim htdh As WinForm.TextBox = e.Form.Controls("合同单号")
\'Dim zxdm As WinForm.TextBox = e.Form.Controls("纸箱代码")
\'Dim xxms As WinForm.TextBox = e.Form.Controls("箱型描述")
\'If htdh.value="" Or zxdm.value="" Or xxms.value=""Then
\'Dim ddsl As WinForm.Label = e.Form.Controls("订单数量")

If htdh.value=""Then
    MessageBox.Show("请完善订单信息!","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Return
Else
    
    If MessageBox.Show("是否保存?","确认",MessageBoxButtons.OKCancel,MessageBoxIcon.Question) = DialogResult.OK Then
        
        
        If Tables("订单明细").Current("是否订片") = False Then
            Dim nma() As String = {"编号","材质","客户单位","楞型","纸片供应商","箱_长","箱_宽","箱_高","箱型","组合方式","数量"}
            Dim nmb() As String = {"生产单号","纸片材质","纸箱客户","纸片楞型","供应厂商","箱_长","箱_宽","箱_高","箱_型","箱_组","箱_数"}
            Dim dr As DataRow = DataTables("纸片整理").Find("生产单号 = \'" & Tables("订单明细").Current("编号") & "\'")
            If dr Is Nothing Then
                dr = DataTables("纸片整理").AddNew
            End If
            For i As Integer = 0 To nma.Length - 1
                dr(nmb(i)) = Tables("订单明细").Current(nma(i))
            Next
        End If
        For Each dt As DataTable In DataTables
            dt.Save()
        Next
        systemready = False
        Tables("订单明细").AddNew()
        systemready = True
    End If
End If

--  作者:yuyoufei11
--  发布时间:2016/6/4 21:11:00
--  
systemready是什么意思

--  作者:lzzhx
--  发布时间:2016/6/4 21:20:00
--  

暂停执行事件代码

暂停所有事件

Foxtable有一个逻辑型的系统变量,将其设置为False,将停止执行所有事件代码,将其设置为True,将恢复执行所有事件代码,就像一个事件“开关”。

例如希望向一个表中追加大量数据,并要求在追加数据的过程中,不要执行任何事件代码,可以如下编写代码:

SystemReady = False
\'追加数据代码

SystemReady =
True

如果在执行上述代码的过程中发生错误退出,那么SystemReady将始终为False,系统进入锁死状态,不会执行任何事件代码,单击菜单按钮也不会有反应。

所以比较安全的编码方式为:

SystemReady = False
Try
\'追加数据代码
Catch ex
As Exception
    MessageBox.Show(
"追加数据失败")
End
Try
SystemReady =
True

暂停单个事件

如果要暂停单个事件的执行,那么SystemReady是无能为力的。
因为Foxtable并没有针对单个事件的“开关”,不过我们可以自行设计一个这样的“开关”,而且设计过程很简单,只需寥寥几行代码即可:

1、首先我们在全局代码中定义一个Public变量,假定变量名为pause:

Public pause As Boolean

2、然后在某事件的开始位置添加一段代码:

\'判断是否执行事件:
If
pause = True Then
    Return
End If
\'原来事件代码

3、现在我们就可以为此事件设计开关了:

关闭此事件的代码为:

pause = True

开启此事件的代码为:

pause = False