以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 同步2万多行的表,foxtable就会假死,可否解决? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=18964) |
-- 作者:yacity -- 发布时间:2012/4/23 15:58:00 -- 同步2万多行的表,foxtable就会假死,可否解决? 实际使用foxtable的过程中,打开foxtable的时候加载所有的表所有的数据,大约用时15秒左右。同步一个2万多行的表,foxtable就会假死,打开任务栏看到 foxtable 无响应,一直要等20分钟左右才同步完一个2万多行的表。这是什么原因?可否在一分钟内同步一个10万行左右的表?
很奇怪的是 出货单 表用于记录 单位信息,出货日期,出货单号,出货总额等。共1万行左右 。同步该表只需要几秒钟 而出货记录表,记录出货详细信息,主要是 单位编号,产品编号,数量单价总额等,信息不会比出货单多得很离谱,就2万行左右。最多就是出货单表的2-4倍。可是一同步出货记录表,foxtable就假死。不知道什么原因。 [此贴子已经被作者于2012-4-23 16:02:23编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2012/4/23 16:03:00 -- 同样的工具,不同的代码,效率相差何止百倍千倍。 我打开一个2万行的表,单击菜单中的“同步当前表”,用时不过几秒而已。
|
-- 作者:程兴刚 -- 发布时间:2012/4/23 16:04:00 -- 1、估计是执行的事件太多吧?或者您将某些代码放在了不该放的地方! 2、最好不要同步整表,打开时也不必要全部加载所有表,随着操作进度逐步加载和同步,也许是最佳的选择! (具体要看文件) |
-- 作者:yacity -- 发布时间:2012/4/23 16:09:00 -- 是的 我也是这样想的。 可是我看到一个很好的例子(商家宝进销存)竟然没人能指导一下作者怎么做出来的。 具体看我的帖子
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=18394&replyID=&skin=1 [此贴子已经被作者于2012-4-23 16:17:35编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2012/4/23 16:19:00 -- 其实帮助就是最好的指导老师,几乎包括所有的技能。
|
-- 作者:yacity -- 发布时间:2012/4/23 16:31:00 -- 出货记录表的代码 同步2万行,假死。
chuhuo_StartEdit
If e.Col.Name = "chanpinid" Then e.Cancel = True Forms("销售选产品").Open() End If
chuhuo_DataColChanged
Select Case e.DataCol.Name
Case "shuliang","danjia" Dim dr As DataRow=e.DataRow dr("zonger") =dr("shuliang")*dr("danjia") dr("fuzhu")=dr("shuliang")*guanxi4/guanxi3
Case "fuzhu" Dim dr As DataRow=e.DataRow dr("shuliang")=dr("fuzhu")/guanxi4*guanxi3
Case "chanpinid" \'发生变化的列
Dim dr As DataRow Dim Filter As String Filter = "[chanpinid] = \'" & e.DataRow("chanpinid") & "\' And [kehuid] = \'" & e.DataRow("kehuid") & "\' and [danjia]> 0" dr = DataTables("chuhuo").Find(Filter & "and [_Identify] < " & e.DataRow("_Identify"),"chuhuodate desc") \' If dr IsNot Nothing Then \'如果找到 \'将找到的内容填入到正在输入的行中. e.DataRow("danjia") = dr("danjia") Else e.DataRow("danjia")=0 End If
Case "hongchong" \'复制数据到库存流水 Dim dr As DataRow=e.DataRow If e.DataRow("hongchong") = True
Dim nma() As String = {"chuhuodate","chanpinid","shuliang","chuhuodan"} \'A表数据来源列 Dim nmb() As String = {"rdate","chanpinid","shuliang","bianhao"} \'B表数据接收列 Dim drs As DataRow = DataTables("kucun").AddNew For i As Integer = 0 To nma.Length - 1 drs(nmb(i)) = e.DataRow(nma(i)) Next drs("beizhu") = "销售红冲"
Else If e.DataRow("hongchong")= False And e.DataRow("shuliang")>0
Dim nma() As String = {"chuhuodate","chanpinid","shuliang","chuhuodan"} \'A表数据来源列 Dim nmb() As String = {"rdate","chanpinid","shuliang","bianhao"} \'B表数据接收列 Dim drs As DataRow = DataTables("kucun").AddNew For i As Integer = 0 To nma.Length - 1 drs(nmb(i)) = e.DataRow(nma(i)) Next drs("beizhu") = "销售反红冲" drs("shuliang") = -drs("shuliang")
End If DataTables("kucun").save
End Select
chuhuo_DrawCell
If e.Row("hongchong") = True Then e.Style = "红冲" End If
出货单表 1万行 同步该表 大概几秒钟 代码如下
chuhuodan_StartEdit
If e.Col.Name = "chuhuodan" Then e.Cancel = True Forms("查看出货单").Open() End If
If e.col.name="hongchong" AndAlso e.Row("shoukuan")>0 Then messagebox.show("已收款账单不能红冲!","提示",messageboxbuttons.ok,messageboxicon.Information) e.cancel=True End If
If e.Col.Name = "hongchong" AndAlso e.Row("hongchong") = True AndAlso user.name<>"开发者" Then MessageBox.Show("不能反红冲!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) e.Cancel= True
End If
chuhuodan_DataColChanged
\'Select Case e.DataCol.Name \'Case "chuhuodate" \'Dim dr As DataRow = e.DataRow \'Dim s As String = dr("_Identify") \'dr("chuhuodan") = "XS" & s.PadLeft(6,"0")
\'End Select
Select Case e.DataCol.Name
Case "hongchong"
DataTables("chuhuodan").save DataTables("chuhuo").save End Select
chuhuodan_DrawCell
If e.Row("hongchong") =True Then e.Style = "红冲" End If
chuhuodan_PrepareEdit
If User.Group<>"财务部" Then Select Case e.col.name Case "chuhuodate","kehuname","kehuid","tel1","dizhi","diqu","beizhu","addtime","adduser","wancheng" e.cancel=True End Select End If
If (e.Row("wancheng") = True Or e.Row("hongchong")=True) AndAlso User.group<> "财务部" Then Select Case e.Col.Name Case "wancheng","hongchong" e.Cancel = True End Select End If
chuhuodan_DataColChanging
Select Case e.DataCol.Name
Case "hongchong" If e.DataRow("hongchong") = False
Dim Result As DialogResult Result = MessageBox.Show("您确定要红冲吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If Result = DialogResult.no Then
e.Cancel = True
End If
Else
Dim Result As DialogResult Result = MessageBox.Show("您确定要反红冲吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If Result = DialogResult.no Then
e.Cancel = True End If
End If
End Select
chuhuodan_DataRowAdding
Dim dr As DataRow = e.DataRow Dim s As String = dr("_Identify") dr("chuhuodan") = "XS" & s.PadLeft(6,"0") dr("chuhuodate")=mydate
出货记录的代码有问题吗?
[此贴子已经被作者于2012-4-23 16:34:12编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2012/4/23 17:00:00 -- 你可以看看: http://www.foxtable.com/help/topics/2218.htm
|
-- 作者:yacity -- 发布时间:2012/4/24 9:56:00 -- 这个 SystemReady = False 是放在什么地方呢? |
-- 作者:狐狸爸爸 -- 发布时间:2012/4/24 9:57:00 -- SystemReady = False 同步数据的代码 SystemReady = True |
-- 作者:yacity -- 发布时间:2012/4/24 10:04:00 -- 一样的结果。 按理说 如果代码出现问题。那么打开项目的时候应该也是很长时间的。 可是 情况是 打开项目 大概10多秒。 单单同步一个2万行的表就假死。大概要20分钟以上才可以完成同步。同步其他表很正常。 |