Foxtable(狐表)用户栏目专家坐堂 → 狐爸,我要崩溃了,你进来看看吧,2段代码的执行顺序问题


  共有7531人关注过本帖树形打印复制链接

主题:狐爸,我要崩溃了,你进来看看吧,2段代码的执行顺序问题

帅哥哟,离线,有人找我吗?
晕了快扶我
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7046 威望:0 精华:0 注册:2013/3/4 18:02:00
狐爸,我要崩溃了,你进来看看吧,2段代码的执行顺序问题  发帖心情 Post By:2013/3/6 16:33:00 [显示全部帖子]

=============下面2段代码是在我导入数据窗口里的

Dim r1 As Row = Tables("待出库产品选择_客户订单主表").Current
Dim cmd As New SQLCommand
cmd.C
cmd.CommandText="select VendorCode From {客户资料主表} Where 简称 = '" & r1("客户名称") & "'"
Dim dm As String = cmd.ExecuteScalar
Dim Result As DialogResult
Result = MessageBox.Show("确定所选物料无误吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
    Dim r2 As Row  = Tables("销售出库单主表").AddNew
    r2("客户名称")=r1("客户名称")
    r2("订单号码")=r1("订单号码")
    r2("供应商代码") = dm
    For Each r As Row In Tables("待出库产品选择_客户订单子表").GetCheckedRows
        Dim r3 As Row  = Tables("销售出库单主表.销售出库单子表").AddNew()
        r3("客户订单编号") = r("客户订单编号")
        r3("料号")=r("OPN")
        r3("物料编码")=r("CPN")
        r3("品名")=r("客户品名")
        r3("规格")=r("客户规格")
        r3("单位")=r("单位")
        r3("数量_订单数")=r("数量")
        r3("单价")=r("单价")
        r3("数量_本次交")=r("未交数")
    Next
    e.Form.Close
Else
    e.Cancel = True
End If

=====================================这些代码是写在窗口的一个导入数据按钮里的

If  Tables("待出库产品选择_客户订单主表").Current Is Nothing Then Return
DataTables("销售出库单子表").LoadFilter="客户订单编号 = '" & Tables("待出库产品选择_客户订单主表").Current("客户订单编号") & "'"
DataTables("销售出库单子表").load()
DataTables("客户订单主表").LoadFilter = "客户订单编号 = '" & Tables("待出库产品选择_客户订单主表").Current("客户订单编号")  & "'"
DataTables("客户订单主表").Load()
If DataTables("客户订单主表").DataRows.Count = 0 Then '如果订单表没有数据
    DataTables("客户订单子表").LoadFilter = "客户订单编号 Is Null" '不加载订单明细
Else
    Dim ids As String
    For Each dr1 As DataRow In DataTables("客户订单主表").DataRows
        ids = ids & ",'" & dr1("客户订单编号") & "'"
    Next
    ids= ids.Trim(",")
    DataTables("客户订单子表").LoadFilter = "客户订单编号 In (" & ids & ")"
End If
DataTables("客户订单子表").LoadTop = ""
DataTables("客户订单子表").Load()

=============以上代码是动态加载我所需要的表的

第二段代码我不知道放哪里,才能够先动态加载我需要的表,然后再执行我导入数据的代码

如果我直接放在导入数据的按钮代码的前面,因为.load命令的执行会让表刷新,第二段代码会出错

我放在窗口的Before close事件里,又无法在我导入数据前执行,导致数据无法在导入后正确的被刷新


 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7046 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/6 16:53:00 [显示全部帖子]

以下是引用muhua在2013-3-6 16:38:00的发言:

您做个全局变量,进行判断。

 

把控件的事件移到BeforClose中,点击按钮时改变全局变量值,通过全局变量来判断是否需要执行。

 

执行完后全局变量记得恢复原值。

 

不懂,说下判断的思路吧...我除了会用判断窗口名来用全局变量,对全局变量一直半懂不懂


 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7046 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/6 17:00:00 [显示全部帖子]

以下是引用狐狸爸爸在2013-3-6 16:52:00的发言:

我理解不了你这个问题。

 

为什么不将数据加载和数据处理分开?

单独做个加载功能,让用户选择要处理的产品、客户、订单,加载之后开始处理。

处理完毕之后保存,需要的话,再次单击加载按钮,重新选择并加载要处理的数据。

狐爸爸,我的业务流程系统设计得很简单

客户订单---出库单

出库单在新增的时候有个导入窗口,导入的窗口里是筛选过的客户没有交完的订单,业务流程里一共三个窗口,如果单独做一个按钮来加载这些订单,经常有操作员会忘记去点,导致出错啊,所以肯定是自动加载这些方便些啊,你说的单独加载,我确实不知道该到哪里去加载这些数据


 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7046 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/6 17:37:00 [显示全部帖子]

狐爸,坦白说,我也觉得蛮痛苦的,我也不知道论坛的高手们是如何贴合自己公司实际来走 客户订单到出库单,完了可以统计各项未出库,已出库数据的【动态加载数据的条件下】

我公司是贸易型公司,对外的业务流程非常简单,客户订单-出库单

系统重新设计后全部用动态加载数据的方式【公司的办公电脑很渣,全部加载之前用过,开程序到全部加载完数据要2分钟,数据库现在大概400M的样子,每天增加600K的样子,也许跟自己之前有些代码不合理也有关系】

 

客户订单由2个表组成,主表的关键字段是【客户订单编号】 子表的关键字段是【客户订单编号】和【产品料号】【订单数】【累交数】【未交数】

【订单数】,【累交数】,【未交数】,这3个字段加进去的目的一是方便业务员知道自己的订单哪些没交,哪些交完,以及具体的数量,另外就是通过这3个字段来做一个统计表,做出客户应交未交的明细

出库单由2个表组成,主表的关键字段是【客户订单编号】和【出库单号】,子表的关键字段是【客户订单编号】和【产品料号】【订单数】【累交数】【未交数】

 

实际的操作是,业务员输入客户订单后,仓库人员在新增出库单的时候,通过一个【导入】的按钮导入通过筛选的没有交完的订单明细,筛选的条件就是通过【订单数】【累交数】【未交数】【客户订单编号】和【产品料号】来筛选,(这个思路跟置顶帖的视频做的是一样的,只不过他是用的全部加载的做法,我是动态加载,涉及到把后台数据加载到前台来)

这里有个比较特殊的要求是在新增,编辑,删除出库单或者出库单子表的时候,同一订单的出库单明细要同步更新,要同步更新的理由也很简单,第一是客户有要求,必须知道累交量和未交量,第二就是经常有仓库可能录错单的情况,举个例子,一张订单20个,分了2次出,如果不更新的情况,第一次出了10个,第一张出库单的累交就是10个,第二次出了10个,不更新,累交还是10个,未交还是10个,仓库人员事情一多,也会忘记,导致数据出错,反复出库

 

设计思路大体就是这样,请高手指点一下吧,自己不是专业的程序员,只是对公司的流程还有人员操作习惯比较熟悉


 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7046 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/6 17:38:00 [显示全部帖子]

以下是引用狐狸爸爸在2013-3-6 17:07:00的发言:

窗口都是通过代码打开的,你可以将打开窗口的按钮代码设置的,窗口类型设置为模式窗口,打开窗口的代码设置为:

 

'加载某个表的数据

'Forms("窗口").Open

 

如果要根据这个窗口的处理结果,加载另一个表的数据,可以在这个窗口的BeforeClose事件中加上加载数据的代码。

 

 

从来没有人在这个问题上如此痛苦的哦,要不完成地描述一下你的结构和设计思路,最好配合一个简单的例子。

或者等下次更新,以为我记得你说过,似乎ExcuteReader生成的表能够保存的话,你的问题就好解决了,而这个功能我们已经加上。

 

 

狐爸,新增出库单的时候,我出库单主表的当前行是空行,因为我主表的客户订单编号和客户名称之类的都是直接导入的

'加载某个表的数据 这个只有在我打开导入订单这个窗口后才能有加载条件啊

'Forms("窗口").Open


 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7046 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/6 17:50:00 [显示全部帖子]

以下是引用狐狸爸爸在2013-3-6 17:14:00的发言:

没有必要刻意追求动态加载,最好一次加载所有可能需要处理的数据,除非数据量非常的大。

数据量非常大的时候,也不会处理过程中,一个一个订单来动态加载明细,而且加载一批单子和其明细。

实际操作过程中,通过筛选或关联,而不是加载,来提取每个单子要处理的数据

 

你这样每条记录都涉及到动态加载的设计,是不合理的。

 

[此贴子已经被作者于2013-3-6 17:17:22编辑过]

关键是就是这个“最好一次加载所有可能需要处理的数据”,我也晕了,有没有高手来指点一下..实在是不知道咋弄了

或者,狐狸爸爸,快更新吧图片点击可在新窗口打开查看!系统等着上线呢!


 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7046 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/6 17:56:00 [显示全部帖子]

以下是引用muhua在2013-3-6 17:54:00的发言:

出库更新,入库更新,出错了也更新,这个本来就已经有的东西,把出入库明细处理好,

 

然后对订单进行统计处理就可以的了,这么简单的问题搞得这么复杂,真不知道您为什么要这样累着。

新的理由也很简单,第一是客户有要求,必须知道累交量和未交量,

客户有要求啊...


 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7046 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/6 17:58:00 [显示全部帖子]

以下是引用狐狸爸爸在2013-3-6 17:57:00的发言:

嫌合成Update语句麻烦,不想等下次更新,那么我给你一个简单的办法。

 

1、另外增加一个外部表,数据同样来自出库单明细,但是初始不加载任何数据,表名可以领取,假定为“临时出库单”,后台的表是出库单明细即可。

 

关于不加载任何数据,看看:

http://www.foxtable.com/help/topics/1998.htm

 

2、这个表可以隐藏,因为用户不需要操作他,只是用于更新后天数据而已。
为了隐藏这个表,在AfterOpenProject事件中加上代码:

Tables("临时出库单").Visible = False

 

3、当你需要更新某订单的出库单明细,代码:

 

Dim Filter As String

Filter = “合成的加载条件,你已经会了”

DataTables("临时出库单").LoadFilter = Filter
DataTables("临时出库单").Load

For Each dr As DataRow in DataTables("临时出库单").DataRows

     '逐行修改各列的值

Next
DataTables("临时出库单").Save()

 

这样你可以不动现有的设计,又能直接更新后台数据。

 

 

收到!马上弄!


 回到顶部