乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 108|回复: 9

树视图和 AutoCAD 块的速度问题

[复制链接]

3

主题

33

帖子

1

银币

初来乍到

Rank: 1

铜币
45
发表于 2006-2-27 12:24:51 | 显示全部楼层 |阅读模式
AutoCAD 2004 VB6 activeX 控件使用 ACAD 可停靠容器
我在使用中断管理应用程序时遇到了一些速度问题
这是应用程序的要点,如果有人有一些想法,我将
在稍后进行更详细的介绍。
当控件在 AutoCAD 中运行时,AutoCAD dwg 会查询
与我们的自动中断系统的 ODBC 连接(它仅接听电话并显示断电的帐户的灵活网格

如果有任何帐户已中断,则会将它们添加到两个树视图之
一(如果调度程序已将其放在”Bucket“它进入treeview2,如果不是,它进入treeview1)
”Bucket“是一个中断,
如果树视图中不存在键,它就会向DWG添加块,显示中断的位置
,它查询另一个数据库以获取断电的极点或服务的句柄,然后使用
句柄获取块的插入点
,这很好,直到在刷新触发之前有 400 个或更多调用(每分钟刷新一次)
他们希望能够从存储桶切换到未分配的中断
存储桶视图:
如果根节点展开 = False,则在中断的中心点显示存储桶块
,否则

在示例存储桶名称中显示每个调用的所有设备和服务节点

|
    >设备
|  |
|   >调用
|的帐户   >调用
>设备
|的
帐户         >调用
未分配视图的帐户:
如果扩展的根节点=false 不显示树的该部分的任何内容
,则在
示例
变电站电路|中显示每个呼叫的所有设备和服务
节点
    >设备
|  |
|   >调用
|的帐户   >调用
>设备
|的
帐户         >称为
切换过程的帐户 当有400多个中断呼叫时,
我们每天有多达3500个在严重的冰暴期间每天有多达3500个呼叫
只是让我知道谁在帮助,我将开始发布您认为需要的任何内容的
代码

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

3

主题

33

帖子

1

银币

初来乍到

Rank: 1

铜币
45
发表于 2006-2-27 13:28:07 | 显示全部楼层
下面是更新应用程序的一些代码。每次刷新都会发生这种情况。
  1. Sub UpdateOutages()
  2. Dim rsTemp As DAO.Recordset
  3. Dim rsSSTemp As DAO.Recordset
  4. Dim strSQL As String
  5. Dim MyOutage As clsOutageLocation
  6. Dim strDev As String
  7. Dim ndLocation As MSComctlLib.Node
  8. Dim ndDevice As MSComctlLib.Node
  9. Dim ndBucket As MSComctlLib.Node
  10. Dim intcnt As Integer
  11. On Error GoTo Err_Control
  12. 'STATUS Field Values and Description
  13. '1        Active Record(Power Is Off)
  14. '2        Power Restored
  15. '3        Call Back
  16. '4        No Response
  17. '5        Still Out of Power
  18. '6        Undialable
  19. '7        Error
  20. '8        Max Dial
  21. strSQL = "Select * from VIEW_RECORDS WHERE [STATUS] = 1 OR [STATUS] = 5 Order by [SUBSTATION],[CIRCUIT],[MAPNUM]"
  22. Set rsTemp = OpenRSPorche(strSQL)
  23. 'Add Outages to the collection
  24. Do Until rsTemp.EOF
  25.       Set MyOutage = New clsOutageLocation
  26.       If IsNull(rsTemp.Fields("MAPNUM")) = False Then
  27.            MyOutage.Location = rsTemp.Fields("MAPNUM")
  28.            If Len(rsTemp.Fields("DEVICE")) > 10 Then
  29.                 strDev = Left(rsTemp.Fields("DEVICE"), 3) & "-" & Mid(rsTemp.Fields("DEVICE"), 4, 2) & "-" & Mid(rsTemp.Fields("DEVICE"), 6, Len(rsTemp.Fields("DEVICE")) - 5)
  30.            Else
  31.                 strDev = IIf(rsTemp.Fields("DEVICE") = " ", "Unknown", rsTemp.Fields("DEVICE"))
  32.            End If
  33.            MyOutage.Device = strDev
  34.            MyOutage.SubCir = IIf(Len(rsTemp.Fields("SUBSTATION")) = 2, rsTemp.Fields("SUBSTATION") & "-0" & rsTemp.Fields("CIRCUIT"), "0" & rsTemp.Fields("SUBSTATION") & "-0" & rsTemp.Fields("CIRCUIT"))
  35.            If IsNull(rsTemp.Fields("BUCKET_NAME")) = False Then
  36.                 MyOutage.Bucket = rsTemp.Fields("BUCKET_NAME")
  37.            Else
  38.                 MyOutage.Bucket = ""
  39.            End If
  40.            AddOutageToCollection MyOutage, colOutages
  41.       End If
  42.       rsTemp.MoveNext
  43. Loop
  44. 'check to see if any need to be deleted
  45. If colOutages Is Nothing Then
  46.       ResetBlockScale
  47.       Timer2.Enabled = False
  48. Else
  49.       Timer2.Enabled = True
  50.       For Each MyOutage In colOutages
  51.            rsTemp.FindFirst "MAPNUM = '" & MyOutage.Location & "'"
  52.            If rsTemp.NoMatch = True Then
  53.                 RemoveOutage MyOutage
  54.                 colOutages.Remove MyOutage.Location
  55.            End If
  56.       Next
  57. End If
  58. If cmdView.Caption = "Click to View Buckets" Then
  59.       TreeView1(0).Visible = True
  60.       If TreeView1(1).Nodes.Count > 0 Then
  61.            cmdView.Enabled = True
  62.            ClearBuckets
  63.            InsertBuckets
  64.            HideBuckets
  65.       Else
  66.            cmdView.Enabled = False
  67.       End If
  68. Else
  69.       If TreeView1(1).Nodes.Count > 0 Then
  70.            cmdView.Enabled = True
  71.            TreeView1(1).Visible = True
  72.            ClearBuckets
  73.            InsertBuckets
  74.            ShowBuckets
  75.       Else
  76.            cmdView.Enabled = False
  77.            cmdView.Caption = "Click to View Buckets"
  78.            TreeView1(0).Visible = True
  79.       End If
  80. End If
  81.   
  82. Exit_Here:
  83. Exit Sub
  84. Err_Control:
  85. Select Case Err.Number
  86.       Case Else
  87.            LogError Err.Number, Err.Description, "UpdateOutages", "OutageTree.ctl"
  88.            Resume Next
  89. End Select
  90. End Sub
  91. Private Function AddOutageToCollection(Outage As clsOutageLocation, col As Collection) As Boolean
  92. Dim bKeyExists As Boolean
  93. Dim tempOutage As clsOutageLocation
  94. On Error GoTo addOutageToCollection_Error
  95. bKeyExists = False
  96. col.Add Outage, Outage.Location  ' "" Then
  97.            'Propably need to Add the Blocks in the AddNodeToTree Sub
  98.            AddNodeToTree 1, Outage.Bucket, Outage.Device, Outage.Location, Outage
  99.       Else
  100.            'Propably need to Add the Blocks in the AddNodeToTree Sub
  101.            AddNodeToTree 0, Outage.SubCir, Outage.Device, Outage.Location, Outage
  102.       End If
  103. Else
  104.       Set tempOutage = col.Item(Outage.Location)
  105.       If tempOutage.Bucket  Outage.Bucket Then
  106.            'delete the old outage in the tree add it to the correct tree and bucket
  107.            RemoveOutage tempOutage
  108.            tempOutage.Bucket = Outage.Bucket
  109.            tempOutage.Device = Outage.Device
  110.            tempOutage.SubCir = Outage.SubCir
  111.            If tempOutage.Bucket  "" Then
  112.                 AddNodeToTree 1, tempOutage.Bucket, tempOutage.Device, tempOutage.Location, Outage
  113.            Else
  114.                 AddNodeToTree 0, tempOutage.SubCir, tempOutage.Device, tempOutage.Location, Outage
  115.            End If
  116.       End If
  117. End If
  118. ExitHere:
  119.     bKeyExists = False
  120.     On Error GoTo 0
  121.     Exit Function
  122. addOutageToCollection_Error:
  123.     Select Case Err.Number
  124.     Case 457 'the key already exists
  125.         bKeyExists = True
  126.         Resume Next
  127.     Case Else
  128.         LogError Err.Number, Err.Description, "AddOutageToCollection", "OutageTree.ctl"
  129.         Resume ExitHere
  130.     End Select
  131. End Function
  132. Private Sub AddNodeToTree(intTreeIndex As Integer, strSC As String, strDev As String, strLoc As String, Outage As clsOutageLocation)
  133. Dim strBucketKey As String
  134. Dim strDeviceKey As String
  135. Dim strLocKey As String
  136. Dim bKeyExist As Boolean
  137. Dim varInsPnt As Variant
  138. Dim strLocList As String
  139. Dim strAttValue As String
  140. Dim strType As String
  141. Dim rsSSTemp As DAO.Recordset
  142. Dim strHandle As String
  143. Dim blnTreeVisible As Boolean
  144. On Error GoTo Err_Control
  145. strBucketKey = strSC
  146. strDeviceKey = strSC & strDev
  147. strLocKey = Outage.Location
  148. 'Add Sub-Cir
  149. TreeView1(intTreeIndex).Nodes.Add Key:=strBucketKey, Text:=strSC
  150. Set nd = TreeView1(intTreeIndex).Nodes(strBucketKey)
  151. nd.Tag = "SCS"
  152. If bKeyExist = False Then
  153.       'Add The Block if it is a bucket
  154.       If Outage.Bucket  "" Then
  155. '           If GetCenter(Outage.Bucket, varInsPnt) = True Then
  156. '                AddBlocks varInsPnt, "OutageCalls", "Flag", Outage.Bucket, Outage.Bucket
  157. '           End If
  158.       Else
  159.            nd.Expanded = True
  160.       End If
  161. End If
  162. bKeyExist = False
  163. 'Add Device
  164. TreeView1(intTreeIndex).Nodes.Add strSC, tvwChild, strDeviceKey, strDev
  165. Set nd = TreeView1(intTreeIndex).Nodes(strDeviceKey)
  166. nd.Tag = "DEV"
  167. If bKeyExist = False Then
  168.       If Outage.Bucket = "" Then
  169.            nd.Expanded = True
  170.       End If
  171.       'Add The Block
  172.       strLocList = "Select * from SSMap WHERE [Location] LIKE '*" & strDev & "*'"
  173.       strAttValue = strDev
  174.       If InStr(2, strDev, "RC") > 2 Then
  175.            strType = "RC"
  176.       ElseIf InStr(2, strDev, "FU") > 2 Then
  177.            strType = "FU"
  178.       Else
  179.            strType = ""
  180.       End If
  181.       If strType  "" Then
  182.            Set rsSSTemp = OpenRSSSMap(strLocList)
  183.            If rsSSTemp.BOF = False Or rsSSTemp.EOF = False Then
  184.                 rsSSTemp.MoveFirst
  185.                 strHandle = rsSSTemp.Fields("Handle")
  186.                 AddBlocks HandleToInsertionPoint(strHandle), "OutageCalls", strType, strAttValue, strSC
  187.            End If
  188.       End If
  189. End If
  190. bKeyExist = False
  191. 'Add Location
  192. TreeView1(intTreeIndex).Nodes.Add strSC & strDev, tvwChild, strLocKey, strLoc
  193. Set nd = TreeView1(intTreeIndex).Nodes(strLocKey)
  194. nd.Tag = "LOC"
  195. If bKeyExist = False Then
  196.       If Outage.Bucket = "" Then
  197.            nd.Expanded = True
  198.       End If
  199.       'Add The Block
  200.       strLocList = "Select * from SSMap WHERE [Location] LIKE '*" & strLoc & "*'"
  201.       strAttValue = strLoc
  202.       strType = "SER"
  203.       Set rsSSTemp = OpenRSSSMap(strLocList)
  204.       If rsSSTemp.BOF = False Or rsSSTemp.EOF = False Then
  205.            rsSSTemp.MoveFirst
  206.            strHandle = rsSSTemp.Fields("Handle")
  207.            AddBlocks HandleToInsertionPoint(strHandle), "OutageCalls", strType, strAttValue, strSC
  208.       End If
  209. End If
  210. bKeyExist = False
  211. Exit_Here:
  212. Exit Sub
  213. Err_Control:
  214. Select Case Err.Number
  215.       Case 35602
  216.            'Duplicate key is not unique
  217.            bKeyExist = True
  218.            Err.Clear
  219.            Resume Next
  220.      Case Else
  221.            LogError Err.Number, Err.Description, "AddNodeToTree", "OutageTree.ctl"
  222.            Resume Exit_Here
  223. End Select
  224. End Sub
  225. Sub RemoveOutage(Outage As clsOutageLocation)
  226. Dim strDev As String
  227. Dim ndLocation As MSComctlLib.Node
  228. Dim ndDevice As MSComctlLib.Node
  229. Dim ndBucket As MSComctlLib.Node
  230. On Error GoTo Err_Control
  231. 'Remove From Treeview Here and Blocks
  232. If Outage.Bucket  "" Then
  233.       Set ndLocation = TreeView1(1).Nodes(Outage.Location)
  234.       Set ndDevice = ndLocation.Parent
  235.       If ndDevice.Children = 1 Then
  236.            Set ndBucket = ndDevice.Parent
  237.            If ndBucket.Children = 1 Then
  238.                 'Remove Bucket,Device, & Location
  239.                 RemoveBucket Outage.Bucket
  240.                 RemoveDevice Outage.Device
  241.                 RemoveLocation Outage.Location
  242.                 TreeDeleteSection 1, ndBucket
  243.            Else
  244.                 'Remove Device & Location
  245.                 RemoveDevice Outage.Device
  246.                 RemoveLocation Outage.Location
  247.                 TreeDeleteSection 1, ndDevice
  248.            End If
  249.       Else
  250.            'Remove Location
  251.            RemoveLocation Outage.Location
  252.            TreeDeleteSection 1, ndLocation
  253.       End If
  254. Else
  255.       Set ndLocation = TreeView1(0).Nodes(Outage.Location)
  256.       Set ndDevice = ndLocation.Parent
  257.       If ndDevice.Children = 1 Then
  258.            Set ndBucket = ndDevice.Parent
  259.            If ndBucket.Children = 1 Then
  260.                 'Remove Bucket,Device, & Location
  261.                 RemoveDevice Outage.Device
  262.                 RemoveLocation Outage.Location
  263.                 TreeDeleteSection 0, ndBucket
  264.            Else
  265.                 'Remove Device & Location
  266.                 RemoveDevice Outage.Device
  267.                 RemoveLocation Outage.Location
  268.                 TreeDeleteSection 0, ndDevice
  269.            End If
  270.       Else
  271.            'Remove Location
  272.            RemoveLocation Outage.Location
  273.            TreeDeleteSection 0, ndLocation
  274.       End If
  275. End If
  276. Exit_Here:
  277. Exit Sub
  278. Err_Control:
  279. Select Case Err.Number
  280.       Case Else
  281.            LogError Err.Number, Err.Description, "RemoveOutage", "OutageTree.ctl"
  282.            Resume Next
  283. End Select
  284. End Sub

回复

使用道具 举报

3

主题

33

帖子

1

银币

初来乍到

Rank: 1

铜币
45
发表于 2006-2-27 13:38:07 | 显示全部楼层
以下是在treeviews
  1. Private Sub cmdView_Click()
  2. 'Toggles between the treeviews
  3. Select Case cmdView.Caption
  4.       Case "Click to View Buckets"
  5.            TreeView1(0).Visible = False
  6.            TreeView1(1).Visible = True
  7.            ToggleTrees 0
  8.            cmdView.Caption = "Click to View Unassigned"
  9.       Case "Click to View Unassigned"
  10.            TreeView1(1).Visible = False
  11.            TreeView1(0).Visible = True
  12.            ToggleTrees 1
  13.            cmdView.Caption = "Click to View Buckets"
  14. End Select
  15. End Sub
  16. Public Sub ToggleTrees(intTreeToShow As Integer)
  17. Dim MyOutage As clsOutageLocation
  18. Dim BucketsOn As Boolean
  19. Dim NodeX As MSComctlLib.Node
  20. Dim intcnt As Integer
  21. Dim intNodecnt As Integer
  22. On Error GoTo Err_Control
  23. 'Maybe do this for each tree
  24. 'Then For each node.parent is nothing
  25. 'Show or Hide blocks by node.text
  26. For intcnt = 0 To 1
  27.       If TreeView1(intcnt).Nodes.Count > 0 Then
  28.            For intNodecnt = 1 To TreeView1(intcnt).Nodes.Count
  29.                 Set NodeX = TreeView1(intcnt).Nodes(intNodecnt)
  30.                 If NodeX.Parent Is Nothing Then
  31.                      If intTreeToShow = intcnt Then
  32.                           'Show the blocks
  33.                           If intTreeToShow = 0 Then
  34.                                ShowBlocks NodeX.Text
  35.                           Else
  36.                                If NodeX.Expanded = True Then
  37.                                     'Show the Locations & Devices
  38.                                     ShowBlocks NodeX.Text
  39.                                Else
  40.                                     'Hide the Locations & Devices
  41.                                     HideBlocks NodeX.Text
  42.                                End If
  43.                           End If
  44.                      Else
  45.                           'Hide the Blocks
  46.                           HideBlocks NodeX.Text
  47.                      End If
  48.                 End If
  49.            Next
  50.       End If
  51. Next
  52. If intTreeToShow = 0 Then
  53.       HideBuckets
  54. End If
  55. ' Another way I tried it that was not fast enough
  56. ' If intTreeToShow = 1 Then BucketsOn = True
  57. '
  58. ' For Each MyOutage In colOutages
  59. '      If MyOutage.Bucket = "" Then
  60. '           If BucketsOn Then
  61. '                'Hide These
  62. '                HideBlocks MyOutage.SubCir
  63. '           Else
  64. '                'Show These
  65. '                Set NodeX = TreeView1(0).Nodes(MyOutage.SubCir)
  66. '                If NodeX.Expanded = True Then
  67. '                     'Hide the bucket show the Locations & Devices
  68. '                     ShowBlocks MyOutage.SubCir
  69. '                Else
  70. '                     'Show the Bucket hide the Locations & Devices
  71. '                     HideBlocks MyOutage.SubCir
  72. '                End If
  73. '           End If
  74. '      Else
  75. '           If BucketsOn Then
  76. '                'Show These
  77. '                Set NodeX = TreeView1(0).Nodes(MyOutage.Bucket)
  78. '                If NodeX.Expanded = True Then
  79. '                     'Show the Locations & Devices
  80. '                     ShowBlocks MyOutage.Bucket
  81. '                Else
  82. '                     'Hide the Locations & Devices
  83. '                     HideBlocks MyOutage.Bucket
  84. '                End If
  85. '           Else
  86. '                'Hide These
  87. '                HideBlocks MyOutage.Bucket
  88. '           End If
  89. '      End If
  90. ' Next
  91. ExitHere:
  92. Exit Sub
  93. Err_Control:
  94. Select Case Err.Number
  95.       Case Else
  96.            LogError Err.Number, Err.Description, "AddOutageToCollection", "OutageTree.ctl"
  97.            Resume ExitHere
  98. End Select
  99. End Sub
  100. Public Function HideBlocks(strBucket As String) As Boolean
  101. Dim objSelSet As AcadSelectionSet
  102. Dim objEnt As AcadEntity
  103. Dim objBlkRef As AcadBlockReference
  104. Dim intType(0 To 1) As Integer
  105. Dim varData(0 To 1) As Variant
  106. Dim varAtts As Variant
  107. Dim objAttRef As AcadAttributeReference
  108. Dim intLoop As Integer
  109. On Error GoTo Err_Control
  110. Set objSelSet = Thisdrawing.PickfirstSelectionSet
  111. intType(0) = 0: varData(0) = "INSERT"
  112. intType(1) = 2: varData(1) = BlockAttributeFilter("BUCKET")
  113. objSelSet.Select Mode:=acSelectionSetAll, FilterType:=intType, FilterData:=varData
  114. For Each objEnt In objSelSet
  115.       If TypeOf objEnt Is AcadBlockReference Then
  116.            Set objBlkRef = objEnt
  117.            If objBlkRef.HasAttributes Then
  118.                 varAtts = objBlkRef.GetAttributes
  119.                 For intLoop = LBound(varAtts) To UBound(varAtts)
  120.                      Set objAttRef = varAtts(intLoop)
  121.                      If objAttRef.TagString = "BUCKET" Then
  122.                           If strBucket = objAttRef.TextString Then
  123.                                If objBlkRef.Name = "Flag" Then
  124.                                     objBlkRef.Visible = True
  125.                                Else
  126.                                     objBlkRef.Visible = False
  127.                                End If
  128.                           End If
  129.                      End If
  130.                 Next intLoop
  131.            End If
  132.       End If
  133. Next
  134. ACADApp.Update
  135. Set objSelSet = Nothing
  136. Set objEnt = Nothing
  137. Set objBlkRef = Nothing
  138. HideBlocks = True
  139. Exit_Here:
  140. Exit Function
  141. Err_Control:
  142. Select Case Err.Number
  143.       Case Else
  144.            LogError Err.Number, Err.Description, "HideBlocks", "modACAD.bas"
  145.            HideBlocks = False
  146.            Resume Exit_Here
  147. End Select
  148. End Function
  149. Public Function ShowBlocks(strBucket As String) As Boolean
  150. Dim objSelSet As AcadSelectionSet
  151. Dim objEnt As AcadEntity
  152. Dim objBlkRef As AcadBlockReference
  153. Dim intType(0 To 1) As Integer
  154. Dim varData(0 To 1) As Variant
  155. Dim varAtts As Variant
  156. Dim objAttRef As AcadAttributeReference
  157. Dim intLoop As Integer
  158. Dim interr As Integer
  159. On Error GoTo Err_Control
  160. Set objSelSet = Thisdrawing.PickfirstSelectionSet
  161. intType(0) = 0: varData(0) = "INSERT"
  162. intType(1) = 2: varData(1) = BlockAttributeFilter("BUCKET")
  163. objSelSet.Select Mode:=acSelectionSetAll, FilterType:=intType, FilterData:=varData
  164. For Each objEnt In objSelSet
  165.       If TypeOf objEnt Is AcadBlockReference Then
  166.            Set objBlkRef = objEnt
  167.            If objBlkRef.HasAttributes Then
  168.                 varAtts = objBlkRef.GetAttributes
  169.                 For intLoop = LBound(varAtts) To UBound(varAtts)
  170.                      Set objAttRef = varAtts(intLoop)
  171.                      If objAttRef.TagString = "BUCKET" Then
  172.                           If strBucket = objAttRef.TextString Then
  173.                                If objBlkRef.Name = "Flag" Then
  174.                                     objBlkRef.Visible = False
  175.                                Else
  176.                                     objBlkRef.Visible = True
  177.                                End If
  178.                           End If
  179.                      End If
  180.                 Next intLoop
  181.            End If
  182.       End If
  183. Next
  184. ACADApp.Update
  185. Set objSelSet = Nothing
  186. Set objEnt = Nothing
  187. Set objBlkRef = Nothing
  188. ShowBlocks = True
  189. Exit_Here:
  190. Exit Function
  191. Err_Control:
  192. Select Case Err.Number
  193.       Case Else
  194.            LogError Err.Number, Err.Description, "HideBlocks", "modACAD.bas"
  195.            ShowBlocks = False
  196.            Resume Exit_Here
  197. End Select
  198. End Function
  199. Public Function HideBuckets() As Boolean
  200. Dim objSelSet As AcadSelectionSet
  201. Dim objEnt As AcadEntity
  202. Dim objBlkRef As AcadBlockReference
  203. Dim intType(0 To 1) As Integer
  204. Dim varData(0 To 1) As Variant
  205. Dim varAtts As Variant
  206. Dim objAttRef As AcadAttributeReference
  207. Dim intLoop As Integer
  208. Dim interr As Integer
  209. On Error GoTo Err_Control
  210. Set objSelSet = Thisdrawing.PickfirstSelectionSet
  211. intType(0) = 0: varData(0) = "INSERT"
  212. intType(1) = 2: varData(1) = "Flag"
  213. objSelSet.Select Mode:=acSelectionSetAll, FilterType:=intType, FilterData:=varData
  214. For Each objEnt In objSelSet
  215.       If TypeOf objEnt Is AcadBlockReference Then
  216.            Set objBlkRef = objEnt
  217.            If objBlkRef.Name = "Flag" Then
  218.                 objBlkRef.Visible = False
  219.            End If
  220.       End If
  221. Next
  222. ACADApp.Update
  223. Set objSelSet = Nothing
  224. Set objEnt = Nothing
  225. Set objBlkRef = Nothing
  226. HideBuckets = True
  227. Exit_Here:
  228. Exit Function
  229. Err_Control:
  230. Select Case Err.Number
  231.       Case Else
  232.            LogError Err.Number, Err.Description, "HideBuckets", "modACAD.bas"
  233.            HideBuckets = False
  234.            Resume Exit_Here
  235. End Select
  236. End Function
  237. Public Function ShowBuckets() As Boolean
  238. Dim objSelSet As AcadSelectionSet
  239. Dim objEnt As AcadEntity
  240. Dim objBlkRef As AcadBlockReference
  241. Dim intType(0 To 1) As Integer
  242. Dim varData(0 To 1) As Variant
  243. Dim varAtts As Variant
  244. Dim objAttRef As AcadAttributeReference
  245. Dim intLoop As Integer
  246. Dim interr As Integer
  247. On Error GoTo Err_Control
  248. Set objSelSet = Thisdrawing.PickfirstSelectionSet
  249. intType(0) = 0: varData(0) = "INSERT"
  250. intType(1) = 2: varData(1) = "Flag"
  251. objSelSet.Select Mode:=acSelectionSetAll, FilterType:=intType, FilterData:=varData
  252. For Each objEnt In objSelSet
  253.       If TypeOf objEnt Is AcadBlockReference Then
  254.            Set objBlkRef = objEnt
  255.            If objBlkRef.Name = "Flag" Then
  256.                 objBlkRef.Visible = True
  257.            End If
  258.       End If
  259. Next
  260. ACADApp.Update
  261. Set objSelSet = Nothing
  262. Set objEnt = Nothing
  263. Set objBlkRef = Nothing
  264. ShowBuckets = True
  265. Exit_Here:
  266. Exit Function
  267. Err_Control:
  268. Select Case Err.Number
  269.       Case Else
  270.            LogError Err.Number, Err.Description, "ShowBuckets", "modACAD.bas"
  271.            ShowBuckets = False
  272.            Resume Exit_Here
  273. End Select
  274. End Function

之间切换的大多数代码
回复

使用道具 举报

9

主题

25

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
61
发表于 2006-2-27 18:36:37 | 显示全部楼层
Chuck,
我已经使用过几次树视图,发现它对于大型数据库来说非常慢。
如果可以改用简单的列表框,则列表框会快得多。
要避免的另一件事是使用for/next或do/while循环来读取数据库。 相反,将数据库传输到VBA中的数组,这将快得多。
还更改
对于每个 objEnt 在 objSelSet 如果
TypeOf objEnt 是 AcadBlockReference 然后

对于每个 objBlockReference 在 objSelSet 中,因为你的选择集已经是块引用 “Inserts”
你有没有测试过代码,看看你的最长延迟在哪里?
弗雷德·卡斯蒂略
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-2-28 02:00:28 | 显示全部楼层
如果您对objselset中的每个objblkref执行此操作,您会在下一个objblkref上得到一个恼人的错误
当填充树时,我有格式为
map number Device Sub Circuit Bucket Status
的记录,因此最简单的方法就是尝试添加节点并捕捉错误
如果您将treeview visible设置为false以添加节点,则速度很快
只有2个atts Bucket和Outage
我想我昨晚创建时想到了解决方案
节点并插入块我需要保存句柄到节点的标签值
根节点Tag = SCS|handle
设备节点Tag = DEV|handle
调用In节点Tag = LOC|handle
然后只需为treeview中的每个节点做一个
set objent = thisdrawing。 HandleToObject(right(Tag,len(Tag)-4))
objent . visible = True/False
块的搜索需要很长时间
每次遇到新的根节点时,它都必须搜索同一组块。
这样,我只处理正确节点的blockref for >不再搜索YAAAAAA
感谢大家的回复。稍后我会让你们知道它是如何运作的。
回复

使用道具 举报

3

主题

33

帖子

1

银币

初来乍到

Rank: 1

铜币
45
发表于 2006-2-28 02:58:13 | 显示全部楼层
Chuck
目前的最后一句话:
请记住,树控件有32'767个节点的限制
回复

使用道具 举报

3

主题

33

帖子

1

银币

初来乍到

Rank: 1

铜币
45
发表于 2006-2-28 09:30:18 | 显示全部楼层
废话。!
希望有了2个树状视图,我就没事了。
我想我需要检查vb加速器树状视图控件。
回复

使用道具 举报

3

主题

33

帖子

1

银币

初来乍到

Rank: 1

铜币
45
发表于 2006-2-28 09:43:04 | 显示全部楼层
所有问题都得到了满意的解决。
速度很好。我们用1000个电话对其进行了测试。
树视图中大约 2000 个节点。没有问题!!
我更改了所有块子和函数以使用
Thisdrawing.HandleToObject
还检查RsTemp.Fields(“Location”)与中断Collection
Add 如果密钥不存在
,那么对于每个中断,请查找First MyOutage。位置
如果noMatch=True,则删除MyOutage
他们现在喜欢该应用程序!!!
谢谢你
回复

使用道具 举报

3

主题

33

帖子

1

银币

初来乍到

Rank: 1

铜币
45
发表于 2006-2-28 09:48:25 | 显示全部楼层
这是我使用树控件(主数据轨道开关数据库)的一个作品的剪辑。由于
超过60,000个数据集,点击节点时会填充sub:

回复

使用道具 举报

3

主题

33

帖子

1

银币

初来乍到

Rank: 1

铜币
45
发表于 2006-3-9 00:15:05 | 显示全部楼层
太好了,当事情进展缓慢的时候,我们将不得不做更多的检查。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 06:35 , Processed in 1.252222 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表