xudanfu
路人甲
路人甲
  • 注册日期2004-05-30
  • 发帖数48
  • QQ
  • 铜币303枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1643回复:3

[转帖]对shape文件添加属性字段

楼主#
更多 发布于:2004-08-21 20:22
<TABLE border=0 cellPadding=0 cellSpacing=0 height=98 width="100%">

<TR>
<TD class=summary-title height=18>
<DIV align=center>对shape文件添加属性字段 </DIV></TD></TR>
<TR>
<TD height=4 style="PADDING-BOTTOM: 5px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; PADDING-TOP: 5px">
<DIV align=right>作者: gis </DIV></TD></TR>
<TR>
<TD height=26 style="PADDING-BOTTOM: 5px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; PADDING-TOP: 5px"> 
<P>gis 大虾转贴在讨论区的代码,使用后发现对与一些文件名长的shapefile有问题,稍微修改了一下。</P>
<P>这里是用dao实现的,有兴趣的可以用ado改写,本质一样
要求:只能对非加载的shape进行操作,对于加的,必须移除,并且与该层相关的对象必须清空.</P>
<P>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</P>
<P>
  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</P></TD></TR>
<TR>
<TD height=4 style="PADDING-BOTTOM: 5px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; PADDING-TOP: 5px"> </TD></TR>
<TR>
<TD height=4 style="PADDING-BOTTOM: 5px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; PADDING-TOP: 5px">
<DIV align=left>(作者联系方式: )</DIV></TD></TR></TABLE>
喜欢0 评分0
syhkc
路人甲
路人甲
  • 注册日期2003-08-10
  • 发帖数58
  • QQ
  • 铜币244枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-08-22 02:45
谢谢了
举报 回复(0) 喜欢(0)     评分
zwtxtt
路人甲
路人甲
  • 注册日期2004-08-17
  • 发帖数31
  • QQ
  • 铜币197枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2004-08-22 14:26
<P>非常感谢</P><img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
jonawan
路人甲
路人甲
  • 注册日期2004-03-09
  • 发帖数854
  • QQ
  • 铜币22枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2004-09-02 16:27
<img src="images/post/smile/dvbbs/em01.gif" />
啊,恋爱,漂浮的爱情 我被失恋灼烧的躯体 就象搁浅动弹不得的流木 直到如雷电般的你 出现并击中我 我这快流木才又再度 落入爱的急流
举报 回复(0) 喜欢(0)     评分
游客

返回顶部