|
功能简介:
示范在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 |
|
|
|
 |
|
'关闭要修改其结构的图层,修改数据表结构必须这样
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) '创建字段
|
(本文已被浏览 次) | | |