以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  执行速度很慢,请老师优化!  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=14108)

--  作者:20090530
--  发布时间:2011/11/8 17:09:00
--  执行速度很慢,请老师优化!

烦请优化:

 

If (e.DataCol.name="文化程度" Or e.DataCol.name="等级" Or e.DataCol.name="专业") And e.DataRow("姓名")<>Nothing
With  DataTables("人员基本信息表")
.ReplaceFor("文化程度1", 0,"[姓名]<>\'  \'")
      .ReplaceFor("文化程度1", 12,"[文化程度] = \'AA\'")
      .ReplaceFor("文化程度1", 10,"[文化程度] = \'AB\'")
      .ReplaceFor("文化程度1", 8,"[文化程度] = \'CCC\'")
      .ReplaceFor("文化程度1", 6,"[文化程度] = \'VF\'")
      .ReplaceFor("文化程度1", 6,"[文化程度] = \'AK\'")
      .ReplaceFor("文化程度1", 4,"[文化程度] = \'BK\'")
      .ReplaceFor("文化程度1", 0,"[文化程度] = \'CZ\'")
      .ReplaceFor("文化程度1", 0,"[文化程度] = \'XX\'")

.ReplaceFor("等级1", 0,"[姓名]<>\'  \'")
      .ReplaceFor("等级1", 13,"[等级] = \'A\'")
      .ReplaceFor("等级1", 10,"[等级] = \'B\'")
      .ReplaceFor("等级1", 8,"[等级] = \'C\'")
      .ReplaceFor("等级1", 6,"[等级] = \'D\'")

.ReplaceFor("专业1", 0,"[姓名]<>\'  \'")
      .ReplaceFor("专业1", 12,"[专业] = \'AA\'")
      .ReplaceFor("专业1", 10,"[专业] = \'BB\'")
      .ReplaceFor("专业1", 6,"[专业] = \'CC\'")

End With

Dim dr As DataRow=e.DataRow
dr("maxl")=math.max(math.max(dr("专业1"),dr("等级1")),dr("文化程度1"))

End If

 

慢的原因是?谢谢!


--  作者:狐狸爸爸
--  发布时间:2011/11/8 17:13:00
--  
传表,说明设计目的设计思路。
--  作者:20090530
--  发布时间:2011/11/8 17:39:00
--  
根据文化程度、等级、专业的分类赋予文化程度1、等级1、专业1相应的值,并求出文化程度1、等级1、专业1的最大值。谢谢!
--  作者:程兴刚
--  发布时间:2011/11/8 17:49:00
--  
最好上传文件,换思路也许更好,这样重复地执行ReplaceFor不如遍历所有行,最好是看看RaiseDataColChanged这样应该更快,搞不定的话上传文件!
--  作者:hhbb
--  发布时间:2011/11/8 18:07:00
--  
這樣的設計,慢是必然的:相應每一行的變化,都要更新全表(其實只更新變化的行就行)!

--  作者:20090530
--  发布时间:2011/11/8 19:06:00
--  
以下是引用20090530在2011-11-8 17:39:00的发言:
根据文化程度、等级、专业的分类赋予文化程度1、等级1、专业1相应的值,并求出文化程度1、等级1、专业1的最大值。谢谢!

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


--  作者:狐狸爸爸
--  发布时间:2011/11/9 8:06:00
--  

感觉你是怎么慢就怎么来,你这样写,速度比正常速度慢了何止千倍万倍。

下面是正常的代码:

 

Select Case e.DataCol.Name
    Case "文化程度"
        Select Case e.NewValue
            Case "CZ","XX"
                e.DataRow("文化程度1") = 0
            Case "AA"
                e.DataRow("文化程度1") = 12
            Case "AB"
                e.DataRow("文化程度1") = 10
            Case "CCC"
                e.DataRow("文化程度1") = 8
            Case "VF" ,"AK"
                e.DataRow("文化程度1") = 6
            Case "BK"
                e.DataRow("文化程度1") = 4
        End Select
    Case "等级"
        Select Case e.NewValue
            Case "A"
                e.DataRow("等级1") = 13
            Case "B"
                e.DataRow("等级1") = 10
            Case "C"
                e.DataRow("等级1") = 8
            Case "D"
                e.DataRow("等级1") = 6
        End Select
    Case "专业"
        Select Case e.NewValue
            Case "AA"
                e.DataRow("专业1") = 12
            Case "BB"
                e.DataRow("专业1") = 10
            Case "CC"
                e.DataRow("专业1") = 6
        End Select
End Select
If (e.DataCol.name="文化程度" Or e.DataCol.name="等级" Or e.DataCol.name="专业") And e.DataRow.IsNull("姓名") = False Then
    Dim dr As DataRow = e.DataRow
    dr("maxl")=math.max(math.max(dr("专业1"),dr("等级1")),dr("文化程度1"))
End If

 

建议你细看开发指南中的《编程基础》和《foxtable编程》这两章,当然《使用指南》也必须看透,因为会用是开发的基础。

[此贴子已经被作者于2011-11-9 8:08:19编辑过]

--  作者:20090530
--  发布时间:2011/11/9 8:06:00
--  
附件如下
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:863.table


--  作者:狐狸爸爸
--  发布时间:2011/11/9 8:09:00
--  
看7楼
--  作者:20090530
--  发布时间:2011/11/9 8:18:00
--  

您的是很快,我当初也用select case就是没您的简化:

 

If (e.DataCol.name="xl" Or e.DataCol.name="dj" Or e.DataCol.name="zc") And e.DataRow("xm") <> Nothing
  Dim dr As String
  dr= trim(e.DataRow("xl"))

  Dim dj As String
  dj= trim(e.DataRow("dj"))

  Dim zc As String
  zc= trim(e.DataRow("zc"))

  Dim pp As DataRow=e.DataRow

  Select Case dr
    Case "高中"
      e.DataRow("xl1")=1
    Case "初中"
      e.DataRow("xl1")=2
    Case Else
      e.DataRow("xl1")=0
  End Select

  Select Case dj
    Case "高级"
      e.DataRow("dj1")=1
    Case "初中"
      e.DataRow("dj1")=2
    Case Else
      e.DataRow("dj1")=0
  End Select

  Select Case zc
    Case "高级"
      e.DataRow("zc1")=1
    Case "初中"
      e.DataRow("zc1")=2
    Case Else
    e.DataRow("zc1")=0
  End Select

pp("maxl") = math.max( math.max(pp("xl1"),pp("dj1")),pp("zc1"))
End If

 

 

因记录少,没比较速度,我后面想replacefor 类似于foxpro的replace,就改用了replacefor ,请教速度慢的原因?