默认头像
路人甲
路人甲
  • 注册日期2004-03-19
  • 发帖数319
  • QQ
  • 铜币824枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:3986回复:15

[求助]为什么总是出现“VB出现错误,即将关闭”

楼主#
更多 发布于:2005-08-17 23:34
我用VB+AE做了一个地形图的查询小系统,用activebar做的按钮来调用shape文件并弹出查询窗体查询我要的属性图块,是通过赋字段给combobox来查询的。但是当多调几次图并查询后就出现“VB出现错误,即将关闭”,不知道有人遇到这种情况没有,小弟不才,写的代码效率不高,有的窗体都有相同的几段代码,没有写成公用模块调用,有人说是这样原因,但是我的代码也没有多少K啊;还有人说是内存里太多的数据导致错误,要释放内存;还有人说是VB盗版的问题,还请大家指教!谢谢
喜欢0 评分0
心情卡片 一起分享...
默认头像
路人甲
路人甲
  • 注册日期2004-03-19
  • 发帖数319
  • QQ
  • 铜币824枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2005-09-12 08:52

把查询窗体的代码帖出来,希望高人指点!谢谢

Private pMap As IMap
 Private pActiveView As IActiveView
 Private pFeatureLayer As IFeatureLayer
 Private pFeatureSelection As IFeatureSelection
 Private pQueryFilter As IQueryFilter
 Private pCountyEnvelope As IEnvelope
 Private pFeatureCursor As IFeatureCursor
 Private pFeature As IFeature
 Private pLayer As ILayer
 Private pFeatLayer As IFeatureLayer
 Private pfeacls As IFeatureClass
 Private pTableSort As ITableSort
 Private pCuror As ICursor
 Private pRow As IRow
 Private lngFieldIndex As Long
 
 


Private Sub Form_Load()
'On Error GoTo Error_h

       
       Call getlayer(pFeatLayer)
       Set pfeacls = pFeatLayer.FeatureClass

       'Dim pTableSort As ITableSort
       Set pTableSort = New TableSort
       pTableSort.Fields = "镇名"
       Set pTableSort.table = pFeatLayer
       pTableSort.Sort Nothing

       Set pCuror = pTableSort.Rows
       lngFieldIndex = pfeacls.FindField("镇名")
       Set pRow = pCuror.NextRow
       Do While Not pRow Is Nothing
           g_zm.AddItem pRow.Value(lngFieldIndex)
           Set pRow = pCuror.NextRow
       Loop

       g_xzqht.g_zm.ListIndex = 0


'Error_h:
End Sub

Private Sub Form_Unload(Cancel As Integer)

Set g_xzqht = Nothing
Set pFeatLayer = Nothing
Set pfeacls = Nothing
Set pLayer = Nothing
Set pMap = Nothing
Set pActiveView = Nothing
Set pFeatureLayer = Nothing
Set pQueryFilter = Nothing
Set pCountyEnvelope = Nothing
Set pFeatureCursor = Nothing
Set pFeature = Nothing
Set pFeatureSelection = Nothing
Set pTableSort = Nothing
Set pCuror = Nothing
Set pRow = Nothing

End Sub


Private Sub Command1_Click()
'On Error GoTo Error_h

Call SelectMapFeatureAndZoomTo("乡镇区划图", "镇名", g_zm)

'Error_h:
End Sub

Private Sub Command2_Click()
'On Error GoTo Error_h

       Dim msg As String
       msg = MsgBox("你真的要关闭查询窗口吗?", 4, "乡镇区划查询窗口")
       If msg = 6 Then
       g_xzqht.Hide
       End If
       
'Error_h:
End Sub


Public Sub SelectMapFeatureAndZoomTo(shpfile As String, fieldname As String, fieldvalue As String)
 'Public Sub SelectMapFeatures()
 
 Set pMap = Form1.MapControl1.ActiveView.FocusMap
 
 Set pActiveView = pMap
 
 'For simplicity sake let's use the first layer in the map
   
   Call getlayer(pFeatureLayer)
       
       
 If pFeatureLayer Is Nothing Then
   MsgBox "不能找到x120!"
   Exit Sub
 End If
  Set pFeatureSelection = pFeatureLayer 'QI
 
 'Create the query filter
  Set pQueryFilter = New QueryFilter
  pQueryFilter.WhereClause = fieldname + " = '" + fieldvalue + "'"

 'Invalidate only the selection cache
 'Flag the original selection
 pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing
 'Perform the selection
 pFeatureSelection.SelectFeatures pQueryFilter, esriSelectionResultNew, False
 'Flag the new selection
 pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing
 
 
 Set pFeatureCursor = pFeatureLayer.Search(pQueryFilter, False)
 
 Set pFeature = pFeatureCursor.NextFeature
 If pFeature Is Nothing Then
 MsgBox fieldname + "不存在,重新选择"
 Else
 Set pCountyEnvelope = pFeature.Extent
 Set pActiveView = pMap
 pActiveView.Extent = pCountyEnvelope.Envelope
 pActiveView.Refresh
 End If
End Sub


Public Sub getlayer(pFeatLayer As IFeatureLayer)
 'Dim player As ILayer
 Dim intCount As Integer
       
       For intCount = 0 To Form1.MapControl1.LayerCount - 1
           Set pLayer = Form1.MapControl1.Map.Layer(intCount)
           If TypeOf pLayer Is IFeatureLayer Then
               If pLayer.Name = "乡镇区划图" Then
                   Set pFeatLayer = pLayer
                   Exit For
               End If
           End If
       Next
End Sub

心情卡片 一起分享...
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-03-19
  • 发帖数319
  • QQ
  • 铜币824枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2005-08-31 14:47
看来13楼的情况都差不多啊
心情卡片 一起分享...
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2003-09-15
  • 发帖数74
  • QQ
  • 铜币325枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-08-31 11:38

木白林:我是说把你程序界面帖出来,看看有什么菜单、功能等,我参考以下

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2003-10-20
  • 发帖数58
  • QQ
  • 铜币317枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-08-31 10:55

我也是用activebar和ao做的系统,每个函数我都做了错误捕捉,也就是说如果发生错误,会报告哪个函数出了问题,但很多时候,例如当我一次调入多个图的时候,vb会退出,而这种错误也不是每次都有,也没有返回我的函数出错信息。就是说系统非常不稳定。我也都释放了变量,set nothing 等,还是这样。

能告诉我怎样解决吗?

无知者无畏
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-03-19
  • 发帖数319
  • QQ
  • 铜币824枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2005-08-31 09:09
一个工程文件,全部帖出来很大的,你说说你是什么情况?
心情卡片 一起分享...
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2003-09-15
  • 发帖数74
  • QQ
  • 铜币325枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2005-08-30 16:05

木白林:把做的东西帖突出来看一下,兄弟也在做类似的事,你的有什么功能?让俺也参考一下拉

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2003-10-20
  • 发帖数58
  • QQ
  • 铜币317枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2005-08-30 15:12
请问楼主问题解决了吗,怎样解决的?我也遇到同样的问题。
无知者无畏
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-03-19
  • 发帖数319
  • QQ
  • 铜币824枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2005-08-20 20:24
还有人说在form_unload中使用 set 窗体名=nothing,我用了之后,感觉好象情况好点了,但是反复调了5、6次后还是出现错误,总感觉是不是调的那接近10M的图调进内存就删不掉了呢?
心情卡片 一起分享...
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-03-19
  • 发帖数319
  • QQ
  • 铜币824枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2005-08-20 00:49
我这样试了一下,打开一层查询后并删除后,等个几十秒再打开另外一个层,这样一直下去,居然到了十多次都没有出现错误,这个是为什么呢?
心情卡片 一起分享...
举报 回复(0) 喜欢(0)     评分
上一页
默认头像

返回顶部