以文本方式查看主题

-  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分钟以上才可以完成同步。同步其他表很正常。