Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共11 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

标题:执行速度很慢,请老师优化!

1楼
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

 

慢的原因是?谢谢!

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

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

7楼
狐狸爸爸 发表于: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编辑过]
8楼
20090530 发表于:2011/11/9 8:06:00
附件如下
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:863.table

9楼
狐狸爸爸 发表于:2011/11/9 8:09:00
看7楼
10楼
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 ,请教速度慢的原因?

共11 条记录, 每页显示 10 条, 页签: [1] [2]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .02490 s, 4 queries.