|
|
|
|

对shape文件添加属性字段

gis 大虾转贴在讨论区的代码,使用后发现对与一些文件名长的shapefile有问题,稍微修改了一下。 这里是用dao实现的,有兴趣的可以用ado改写,本质一样要求:只能对非加载的shape进行操作,对于加的,必须移除,并且与该层相关的对象必须清空. Public Sub Field...

作者:GIS来源:GIS空间站|2006年07月01日

gis 大虾转贴在讨论区的代码,使用后发现对与一些文件名长的shapefile有问题,稍微修改了一下。

这里是用dao实现的,有兴趣的可以用ado改写,本质一样
要求:只能对非加载的shape进行操作,对于加的,必须移除,并且与该层相关的对象必须清空.

Public Sub FieldAppender(dbPath As String, _
                        Filename As String, _
                        newFldname As String, _
                        NewFldType As String, _
                        newFldsize As Integer)
On Error GoTo ErrorHandler:
  Dim curFSYS As New Scripting.FileSystemObject
  Dim oldFileName As String
       
  ' 部分dbf文件名较长,DAO无法处理,所以对该数据进行处理
  If Len(Filename) > 8 Then
    curFSYS.CopyFile dbPath & Filename & ".dbf", dbPath & Left(Filename, 8) & ".dbf", True
  End If
  oldFileName = Filename
  Filename = Left(Filename, 8)
    
    
  Dim db As Database
  Dim tdf1 As TableDef, tdf2 As TableDef
  Dim ndx1 As Index, ndx2 As Index
  Dim fld1 As DAO.Field, fld2 As DAO.Field
  Dim sql As String
 
'  Set db = OpenDatabase(dbPath, False, False, "dBase IV;")
  Set db = OpenDatabase(dbPath, False, False, "dBase IV")
  Debug.Print db.Updatable
  Dim i As Integer
 
  For i = 0 To db.TableDefs.Count - 1
    If db.TableDefs(i).Name = Filename Then
      Set tdf1 = db.TableDefs(Filename)
    End If
    DoEvents
  Next i
  If tdf1 Is Nothing Then
    MsgBox "没有找到该shapefile文件。", vbOKOnly
    Exit Sub
  End If
   
  For i = 0 To db.TableDefs.Count - 1
    If db.TableDefs(i).Name = "SHENYU" Then
      sql = "Drop Table Shenyu"
      db.Execute sql
    End If
    DoEvents
  Next i
 
  Set tdf2 = New TableDef
  tdf2.Name = "Shenyu"
 
  For Each fld1 In tdf1.Fields
    Set fld2 = New DAO.Field
    fld2.Name = fld1.Name
    fld2.Type = fld1.Type
    fld2.Size = fld1.Size
    tdf2.Fields.Append fld2
    DoEvents
  Next fld1


  Set fld2 = New DAO.Field
 
  fld2.Name = newFldname
  fld2.Type = NewFldType
  fld2.Size = newFldsize
 
  tdf2.Fields.Append fld2
 
 
  db.TableDefs.Append tdf2
 
 
  sql = "Insert into Shenyu Select * from " & Filename
  db.Execute sql
 
  Set tdf1 = Nothing
 
  sql = "Drop Table " & Filename
  db.Execute sql
 
  tdf2.Name = Filename
  
  ' 将修改后的dbf覆盖原有的dbf
  If Len(oldFileName) > 8 Then
    curFSYS.CopyFile dbPath & Filename & ".dbf", dbPath & oldFileName & ".dbf", True
    curFSYS.DeleteFile dbPath & Filename & ".dbf", True
  End If
 
  db.Close
  Set db = Nothing
  Exit Sub
 
ErrorHandler:
  db.Close
  Set db = Nothing
  Exit Sub
End Sub

上一篇:设置图层的地图提示字段

下一篇:AO开发中的一些小技巧