|
sunny1160 :
对表结构修改的几个疑问! Private Sub Command1_Click() Dim lyr As MapXLib.Layer Dim lyr_new As MapXLib.Layer Dim lyrInfo As New MapXLib.LayerInfo Dim lyrInfo_new As New MapXLib.LayerInfo Dim flds As New MapXLib.Fields Dim flds_new As New MapXLib.Fields Dim dst As MapXLib.Dataset With CommonDialog1 .DialogTitle = "Choose the place to save the new table" .Filter = "MapInfo Table(*.tab)|*.tab" .ShowSave End With flds.AddIntegerField "MapInfo_No" '建立一个表 lyrInfo.Type = miLayerInfoTypeNewTable lyrInfo.AddParameter "FileSpec", CommonDialog1.FileName lyrInfo.AddParameter "Name", CommonDialog1.FileTitle lyrInfo.AddParameter "Fields", flds Set lyr = Map1.Layers.Add(lyrInfo, 1) '把这个表添加到当前图层集中去 'Set dst = Map1.DataSets.Add(miDataSetLayer, lyr) 'Set lyr = Nothing Dim m_sName As String '在上表的基础上对它添加新字段,并把这个新表临时存放在另一路径下 Set flds_new = flds m_sName = CommonDialog1.FileTitle flds_new.AddStringField "quanshu", 10, True flds_new.AddNumericField "center_x", 10, 4 lyrInfo_new.Type = miLayerInfoTypeNewTable lyrInfo_new.AddParameter "FileSpec", "E:\mapinfo\newfold\" + CommonDialog1.FileTitle lyrInfo_new.AddParameter "Name", "123" lyrInfo_new.AddParameter "Fields", flds_new Set lyr_new = Map1.Layers.Add(lyrInfo_new) Set lyr = Nothing '删除原表 Map1.Layers.Remove (1) Kill CommonDialog1.FileName Dim lyrInfo_3 As New MapXLib.LayerInfo '把新表复制到原表的路径下 Dim lyr_3 As MapXLib.Layer Dim flds_3 As MapXLib.Fields Dim m_sFileName As String m_sFileName = Left$(CommonDialog1.FileTitle, Len(CommonDialog1.FileTitle) - 4) Set flds_3 = flds_new lyrInfo_3.Type = miLayerInfoTypeNewTable lyrInfo_3.AddParameter "FileSpec", CommonDialog1.FileName lyrInfo_3.AddParameter "Fields", flds_3 Set lyr_3 = Map1.Layers.Add(lyrInfo_3) Map1.Layers.Remove (lyr_new.Name) '删除临时文件夹中的表 Kill "E:\mapinfo\newfold\" + m_sFileName + ".tab" Kill "E:\mapinfo\newfold\" + m_sFileName + ".ind" Kill "E:\mapinfo\newfold\" + m_sFileName + ".dat" Kill "E:\mapinfo\newfold\" + m_sFileName + ".map" Kill "E:\mapinfo\newfold\" + m_sFileName + ".id" End Sub ****************************************************************************** 以上的只是对表结构进行改动,表里没有数据。试过以后是可以实现的。 我想请教的问题是: 1、以上方法对表的复制操作实在是太麻烦了,翻来倒去地弄得人都胡涂了。不知道还有没有什么比较好的方法实现表的复制吗? 2、如果表中存在数据的话,通过layinfo.addparameter "features",layer.allfeaturesd的方法可以实现表中数据的复制吗?
James.Liu :
1,自古华山一条路,目前来说,这是唯一方法
2,可以,但是原表结构字段需是新表结构的子集才行 |