Foxtable(狐表)用户栏目专家坐堂 → 保存为什么这么慢?


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

主题:保存为什么这么慢?

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


加好友 发短信
等级:小狐 帖子:333 积分:2759 威望:0 精华:0 注册:2012/5/8 11:06:00
保存为什么这么慢?  发帖心情 Post By:2012/12/17 8:01:00 [只看该作者]

我在保存按钮中设置如下代码:

For Each dt As DataTable In DataTables
  If dt.HasChanges Then
       dt.save()
   End If
Next

每次点完保存后,至少要反应5秒,不知道什么原因。我把其它表中“beforesavedatarow”事件中能减少的都减少了,还是不行?

求助狐爸!


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/17 9:16:00 [只看该作者]

 5秒的话,是有点慢。几方面的原因。

 1,网络原因,如果是远程数据库的话,会出现这种情况。

 2,可能是代码连锁反应的问题,在可能触发的事件里写入 msgbox("xxx"),看一下都触发了哪些事件。

 3,贴出你beforesavedatarow的事件代码。

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


加好友 发短信
等级:小狐 帖子:333 积分:2759 威望:0 精华:0 注册:2012/5/8 11:06:00
  发帖心情 Post By:2012/12/17 10:48:00 [只看该作者]

关键不是远程数据,是本机的


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/12/17 10:51:00 [只看该作者]

还得看看你修改或增加的行数有多少。


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


加好友 发短信
等级:小狐 帖子:333 积分:2759 威望:0 精华:0 注册:2012/5/8 11:06:00
  发帖心情 Post By:2012/12/17 10:54:00 [只看该作者]

Dim dr As DataRow=e.DataRow
If dr.Isnull("身份证号") Or dr.Isnull("单位代码") Then
    MessageBox.Show("身份证号或单位代码没填!")
    e.cancel=True
End If

 

'本代码用于教师护士提高10%

If dr("工资类型")="事业专技" And dr("是否提高") = True Then
    on error resume Next
    Dim zwje As Double:dim jbje As Double
    If dr("工资相当职级")<>"干部见习期" And dr("工资相当职级")<>"工人试用期"Then
        Dim drxj As DataRow=DataTables("薪级标准").DataRows(1)
        If dr.IsNull("工资相当职级")=False And dr.IsNull("薪级_级别")=False Then
            zwje=jszwje(dr("工资相当职级"))*1.1
            jbje =drxj("级别" & dr("薪级_级别"))*1.1
            If zwje> Int(zwje) Then
                zwje=Int(zwje)+1
            End If
            If jbje> Int(jbje) Then
                jbje=Int(jbje)+1
            End If
            dr("职务或岗位工资") = zwje
            dr("薪级_工资额")  =jbje
        End If
    Else
        zwje=jxqgz(dr("工资类型"),dr("最高学历"))*1.1
        If  zwje > Int(zwje) Then
            zwje=Int(zwje)+1
        End If
        dr("见习工资")=zwje
    End If
End If

'以下用于计算公积金,医保,房贴
If left(dr("工资类型"),2)="机关" Then
    on error resume Next
    dr("公积金")=(dr("职务或岗位工资")+dr("级别工资_工资额")+dr("工作性津贴")+dr("生活补贴")) * 0.12
    dr("医疗保险")=(dr("职务或岗位工资")+dr("级别工资_工资额")+dr("工作性津贴")+dr("生活补贴")) * 0.02
    If dr("参加工作时间")< #01/01/1998# Then
        dr("住房补贴")=(dr("职务或岗位工资")+dr("级别工资_工资额")+dr("工作性津贴")+dr("生活补贴")) * 0.024
    Else
        dr("住房补贴")=Nothing
    End If
Else
    dr("公积金")=(dr("职务或岗位工资")+dr("薪级_工资额")+dr("工作性津贴")+dr("生活补贴")) * 0.12
    dr("医疗保险")=(dr("职务或岗位工资")+dr("薪级_工资额")+dr("工作性津贴")+dr("生活补贴")) * 0.02
    If dr("参加工作时间")< #01/01/1998# Then
        dr("住房补贴")=(dr("职务或岗位工资")+dr("级别工资_工资额")+dr("工作性津贴")+dr("生活补贴")) * 0.024
    Else
        dr("住房补贴")=Nothing
    End If
End If

 


'以下代码用于生成人员编号
If dr("单位代码") <> "" Then
    on error resume Next
    Dim drdw As DataRow=DataTables("单位基本信息").find("单位代码='"& dr("单位代码") &"'")
    Dim dwjc As String
    If drdw IsNot Nothing Then
        dwjc =drdw("单位简称")
        If len(dwjc)> 4 Then
            dwjc=left(dwjc,4)
        End If
    End If
    Dim bh As String=getpy(dwjc,True)
    If dr("人员编号").StartsWith(bh) = False Then
        Dim flt As String:dim idx As Integer:dim max As String
        flt="单位代码='"& dr("单位代码") &"'"
        max = e.DataTable.Compute("Max(人员编号)",flt) '取得最大编号
        If max > "" Then '如果存在最大单据编号
            idx = CInt(max.substring(max.Indexof("0"),3))+ 1 '获得最大单据编号的后四位顺序号,并加1
        Else
            idx = 1 '否则顺序号等于1
        End If
        dr("人员编号")=bh & format(idx,"000")
    End If
End If

'以下代码清除操作日志
Dim tv As Date = dr("操作日志")
Dim tp As TimeSpan = Date.Today - tv
If tp.TotalDays >= 7 Then '如果已经超过7天
    dr("操作日志") = #01/01/0001# '则清空
End If


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


加好友 发短信
等级:小狐 帖子:333 积分:2759 威望:0 精华:0 注册:2012/5/8 11:06:00
  发帖心情 Post By:2012/12/17 10:54:00 [只看该作者]

以上是beforesavedatarow事件代码

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/12/17 10:56:00 [只看该作者]

删除beforesavedatarow中的全部代码,先确定是不是这个事件造成的,如果是的,在考虑优化或者转移到别的事件中。

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


加好友 发短信
等级:小狐 帖子:333 积分:2759 威望:0 精华:0 注册:2012/5/8 11:06:00
  发帖心情 Post By:2012/12/17 10:59:00 [只看该作者]

好的,我试试看

 


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


加好友 发短信
等级:小狐 帖子:333 积分:2759 威望:0 精华:0 注册:2012/5/8 11:06:00
  发帖心情 Post By:2012/12/17 15:36:00 [只看该作者]

没的情况,删掉还那样!


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


加好友 发短信
等级:三尾狐 帖子:771 积分:6388 威望:0 精华:0 注册:2011/12/1 14:47:00
  发帖心情 Post By:2012/12/17 15:40:00 [只看该作者]

看看是不是表达式的影响:

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


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