欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏SuperMap应用与开发SO开发 → 正文
编辑属性数据
07-10-25 10:02:01 作者:未知 出处:超图

功能简介:

    示范在SuperMap Objects 中如何查询和修改数据集中几何对象的属性,在SuperMap Objects 中如何维护属性数据表:增加和删除用户字段。

数据来源:

    所用SuperMap Objects 组件、对象的主要属性和方法:

控  件 及 对 象 属  性 方   法
SuperWorkspace   OpenDatasource
SuperMap Layers,Action,Selection   
soDatasetVector   Query,CreateField,ClearRecordsets
soRecordset RecordCount,FieldCount MoveFirst,Edit,SetFieldValue,Update,
GetFieldValue,GetFieldInfos
soSelection   ToRecordset
soFieldInfos  Item  
soFieldInfo Type,Size,DefaultValue,AutoIncremental  

功能实现:

  • 查看单个记录的全部属性

Private Sub SuperMap_GeometrySelected(ByVal nSelectedGeometryCount As Long)
    Dim objRecordset As soRecordset        
'定义用来接受选择记录的记录集变量
    Dim objFieldInfo As soFieldInfo        
'定义用来读取记录字段信息的字段变量
    Dim i As Integer
    lvwObjAttribute.ListItems.Clear
    Set objRecordset = SuperMap.Selection.ToRecordset(False) 
  '获取选择记录集
    For i = 1 To objRecordset.FieldCount                
'循环添加属性信息
        If Not IsNull(objRecordset.GetFieldValue(i)) Then 
' 判断是否为空
            lvwObjAttribute.ListItems.Add , , objRecordset.GetFieldValue(i)
        Else
            lvwObjAttribute.ListItems.Add , , ""
        End If
        Set objFieldInfo = objRecordset.GetFieldInfo(i) 
'判断是否存在给定字段
        If Not (objFieldInfo Is Nothing) Then
            lvwObjAttribute.ListItems(i).SubItems(1) = objFieldInfo.Name  
'添加字段名称
        End If
    Next
End Sub

  • 浏览数据集全部属性

Dim objDtVector As soDatasetVector
Dim objRecordset As soRecordset

If SuperWorkspace.Datasources(1).Datasets(cmbDataset.Text).Vector = True Then Set objDtVector = SuperWorkspace.Datasources(1).Datasets(cmbDataset.Text)
Set objRecordset = objDtVector.Query("", True)

Dim objFieldIndos As soFieldInfos
Dim i As Integer, j As Integer
Dim vFielVal As Variant
Dim iFieldCount As Integer
Dim nRecordCount As Long
'添加属性信息(包括字段名称和属性值)
Set objFieldIndos = objRecordset.GetFieldInfos()
iFieldCount = objRecordset.FieldCount
nRecordCount = objRecordset.RecordCount

MSFlexGrid1.Cols = iFieldCount
'列数
MSFlexGrid1.Rows = nRecordCount + 1
'行数

MSFlexGrid1.Row = 0
For i = 1 To iFieldCount
    MSFlexGrid1.Col = i - 1
    MSFlexGrid1.Text = objFieldIndos(i).Name
Next
objRecordset.MoveFirst
For i = 1 To nRecordCount
    For j = 1 To iFieldCount
         vFielVal = objRecordset.GetFieldValue(j)
         If Not (IsNull(vFielVal)) Then
              MSFlexGrid1.TextMatrix(i, j - 1) = vFielVal
         End If
    Next
    objRecordset.MoveNext                    
'下一条记录
Next

  • 新建、删除属性字段:SuperMap不提供

'关闭要修改其结构的图层,修改数据表结构必须这样
frmMain.SuperMap.Layers.RemoveAt frmMain.cmbDataset.Text & "@" & "World"
frmMain.SuperMap.Refresh
'选择必填字段,必须给出字段缺省值
If chkRequired.Value = 1 Then
    If Trim$(txtDefault.Text) = "" Then
        MsgBox "请给出字段的缺省值!", vbInformation
        txtDefault.SetFocus
        Exit Sub
    End If
End If
'字段长度不能为零或空,否则提示"字段名非法"
If txtFieldLen.Enabled = True Then
    If (Trim$(txtFieldLen.Text = "")) Then
        MsgBox "字段长度不能为空!", vbInformation
        txtFieldLen.SetFocus
        Exit Sub
     End If
    If (Trim$(txtFieldLen.Text = "0")) Then
        MsgBox "字段长度不能为零!", vbInformation
        txtFieldLen.SetFocus
        Exit Sub
    End If
End If

Dim DS As soDataSource
Dim strDsName As String
Dim DtVector As soDatasetVector

Set DS = frmMain.SuperWorkspace.Datasources.Item(1)
Set DtVector = DS.Datasets.Item(frmMain.cmbDataset.Text)
DtVector.Open
'检查字段名是否合法
If Not (DtVector.IsAvailableFieldName(Trim$(txtFieldName.Text))) Then
    MsgBox "字段名非法!", vbInformation
    DtVector.Close
    txtFieldName.SetFocus
    Exit Sub
End If
'创建新字段
Dim FieldInfo As New soFieldInfo

'以下一段代码是为FieldInfo的各个属性赋值
FieldInfo.Name = txtFieldName.Text
FieldInfo.Type = scfInteger
FieldInfo.Size = 2

If cmbFieldType.Text = "dbBoolean" Then
    FieldInfo.DefaultValue = cmbDefault.Text
'缺省值
    FieldInfo.AllowZeroLength = False
Else
    FieldInfo.DefaultValue = txtDefault.Text
End If
If chkAllowNull.Enabled = True Then
'零长度允许
    FieldInfo.AllowZeroLength = IIf(chkAllowNull = 1, True, False)
End If
If (cmbFieldType.Text = "dbText") Or (cmbFieldType.Text = "dbBoolean") Then
    FieldInfo.AutoIncremental = False
'Text型和Boolean型字段自动编号必为False
Else
    FieldInfo.AutoIncremental = IIf(chkAutomatic = 1, True, False)
'自动排序
End If
FieldInfo.Descending = IIf(chkDescending = 1, True, False)
'降序
FieldInfo.Required = IIf(chkRequired = 1, True, False)    
'必填字段

DtVector.ClearRecordsets                                   'CreateField之前,关闭记录集,这一步很重要。
Dim bResult As Boolean
bResult = DtVector.CreateField(FieldInfo) 
                 '创建字段


(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号