Foxtable(狐表)用户栏目专家坐堂 → 不好意思,程序死机问题,测试了一天,不能解决,来求助。


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

主题:不好意思,程序死机问题,测试了一天,不能解决,来求助。

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


加好友 发短信
等级:狐神 帖子:6842 积分:43288 威望:0 精华:0 注册:2009/3/2 14:07:00
不好意思,程序死机问题,测试了一天,不能解决,来求助。  发帖心情 Post By:2011/4/15 14:45:00 [只看该作者]

请先设置好外部数据源

运行“存货报表”的窗口,目标框选择“手册名称”、“批号”和“仓库名称”,都能运行;选择“存货代码”程序就死了。

我从早上到现在一直在调试,都搞不好,还请各位出手。

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

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

[此贴子已经被作者于2011-4-15 14:44:48编辑过]

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/4/15 15:06:00 [只看该作者]

我的过程,先把代码改为:

 

'限定试用期
If vars("截止日期")>vars("测试")
    vars("截止日期")=vars("测试")
End If
If vars("起始日期")=Nothing Or vars("截止日期")=Nothing
    MessageBox.Show("请设置起始日期和截止日期!")
    Return
End If
'定义变量及赋值
Dim t As Table=Tables("" & e.Form.name & "_table1")
vars("操作表")=Tables("" & e.Form.name & "_table1")
t.sort="" '有用
t.ClearSubtotal
DataTables("存货报表").DataRows.Clear()

Dim s As String
s=e.Form.controls("cb1").text
Dim cmd As New SQLCommand
Dim dt As DataTable
For Each cn As Connection In Connections
    If vars("外部数据源")=cn.Name
        cmd.ConnectionName =vars("外部数据源")
    End If
Next
cmd.CommandText = "SELECT DISTINCT " & s & " From {数据库}"
dt = cmd.ExecuteReader()

messagebox.show(1)

Dim f As New Filler
f.SourceTable = dt '指定数据来源
f.SourceCols = "" & s & "" '指定数据来源列
f.DataTable = DataTables("存货报表") '指定数据接收表
f.DataCols ="" & s & ""  '指定数据接收列
'f.ExcludeNullValue=True
'f.filter="" & filter & " 公司名称='" & _公司名称 & "'"
f.Fill() '填充数据

messagebox.show(2)

For Each dr0 As DataRow In dt.DataRows
    DataTables("过度表").Fill("Select " & s & ", sum(数量) As 数量,sum(金额) As 金额 From {数据库} where " & s & "='" & dr0("" & s & "") & "' and 单据类型 Like '%入库%' and 日期<=#" & vars("起始日期") & "# Group by " & s & "","" & vars("外部数据源") & "",True)
    For Each dr As Row In T.Rows
        Dim r As DataRow
        r = DataTables("过度表").Find("" & s & "='" & dr(s) & "'") '找出编号为03的产品
        If r IsNot Nothing
            dr("数量1")=r("数量")
            dr("期初数量")=dr("数量1")-dr("数量2")
            dr("期末数量")=dr("期初数量")+dr("入库数量")-dr("出库数量")
        End If
    Next
Next
messagebox.show(3)

 

然后执行测试,结果显示到2的时候没有反应,说明问题出在第三段,然后分析第三段代码:

 

For Each dr0 As DataRow In dt.DataRows
    DataTables("过度表").Fill("Select " & s & ", sum(数量) As 数量,sum(金额) As 金额 From {数据库} where " & s & "='" & dr0("" & s & "") & "' and 单据类型 Like '%入库%' and 日期<=#" & vars("起始日期") & "# Group by " & s & "","" & vars("外部数据源") & "",True)
    For Each dr As Row In T.Rows
        Dim r As DataRow
        r = DataTables("过度表").Find("" & s & "='" & dr(s) & "'") '找出编号为03的产品
        If r IsNot Nothing
            dr("数量1")=r("数量")
            dr("期初数量")=dr("数量1")-dr("数量2")
            dr("期末数量")=dr("期初数量")+dr("入库数量")-dr("出库数量")
        End If
    Next
Next

 

可以看出,你遍历了dt中的所有行,而且每行都执行一次fill, 这是一个非常低效的设计,Fill加载一个表,当你选择存货代码时,dt表中的数据有13000多行,要执行fill方法13000多次,等于是加载13000多个表,平时的系统有几十个表,打开项目都很慢,而你执行一次操作等于要加载13000个表,慢是非常正常的。


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


加好友 发短信
等级:狐神 帖子:6842 积分:43288 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2011/4/15 15:16:00 [只看该作者]

慢是可以理解的,但死程序就不能理解了。

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/4/15 15:34:00 [只看该作者]

哈哈,不是死,是慢,一直在高速运行,没有办法做出相应,你等24小时可能会ok.

 

图片点击可在新窗口打开查看


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


加好友 发短信
等级:狐神 帖子:6842 积分:43288 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2011/4/15 16:11:00 [只看该作者]

如果按“手册名称”、“存货代码”为分组列,“期初数量”、“入库数量”、“出库数量”和“期末数量”为统计列,如何写代码,速度可以容忍的?

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/4/15 16:20:00 [只看该作者]

因为此时行数不多。

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


加好友 发短信
等级:狐神 帖子:6842 积分:43288 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2011/4/15 16:32:00 [只看该作者]

以下是引用lihe60在2011-4-15 16:11:00的发言:
如果按“手册名称”、“存货代码”为分组列,“期初数量”、“入库数量”、“出库数量”和“期末数量”为统计列,如何写代码,速度可以容忍的?

但是,有这个需求!

 

现在有上万种产品,总不能让领导少发明些产品品种!!!

[此贴子已经被作者于2011-4-15 16:33:54编辑过]

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


加好友 发短信
等级:狐神 帖子:6842 积分:43288 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2011/4/15 16:35:00 [只看该作者]

以下是引用狐狸爸爸在2011-4-15 15:34:00的发言:

哈哈,不是死,是慢,一直在高速运行,没有办法做出相应,你等24小时可能会ok.

 

图片点击可在新窗口打开查看

如果让领导等24个小时,软件就会被否掉的。


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/4/15 16:36:00 [只看该作者]

呵呵,既然事实和理论已经证明这个设计不行,你就调整思路啊。

FoxTable自身的统计速度,不也曾经有过上千倍的提升吗,设计嘛,就得不断地摸索调整。

[此贴子已经被作者于2011-4-15 16:38:45编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6842 积分:43288 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2011/4/15 16:39:00 [只看该作者]

按“手册名称”、“存货代码”为分组列,“期初数量”、“入库数量”、“出库数量”和“期末数量”为统计列

 

我今天想了一整天,想破了脑袋,也没有想出来。还要贺老师出马。

[此贴子已经被作者于2011-4-15 16:55:48编辑过]

 回到顶部
总数 14 1 2 下一页