社区
地理信息系统
帖子详情
.tab文件中被删除的记录怎么还在?
luyiping
2003-09-15 09:27:32
.tab文件中被删除的记录怎么还在?
我把某图元删了,用mapinfo打开时是灰色的空列
在加如一个图元时怎么会加到这个记录的后面呢?
明明是删掉了,为什么计算ds.RowCount的时候还是吧它加进去的呢?
...全文
126
4
打赏
收藏
.tab文件中被删除的记录怎么还在?
.tab文件中被删除的记录怎么还在? 我把某图元删了,用mapinfo打开时是灰色的空列 在加如一个图元时怎么会加到这个记录的后面呢? 明明是删掉了,为什么计算ds.RowCount的时候还是吧它加进去的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
banner90
2003-10-09
打赏
举报
回复
第一个已经解决了,怎么还不结贴
klbt
2003-10-08
打赏
举报
回复
学习,帮你顶。
shansheng
2003-09-15
打赏
举报
回复
紧缩表,lovelyant原创
三思而行(3S2Go)论坛
vc+mapx 4.5
希望大家多多指教,此函数有一个缺点,对于有索引的图层,紧缩后,索引就没了。请教如何在程序中添加索引?
希望多多交流bodyhfp@163.com
void PackTab(CString strLayername/*需要被紧缩的层名*/)
{
COleVariant sd;
CMapXLayer layer;
CMapXDataset ds;
layer = map->GetLayers().Item(strLayername);
sd.vt = VT_DISPATCH;
sd.pdispVal = layer.m_lpDispatch;
sd.pdispVal->AddRef();
long count = map->GetDatasets().GetCount();
int flag=-1; //数据集中是否存在该层
for(int k=1;k<=count;k++)
{
if(map->GetDatasets().Item(k).GetName()==strLayername)
{
flag=1;
break;
}
}
if(flag==-1)
ds = map->GetDatasets().Add(miDataSetLayer,sd,map->GetLayers().Item(strLayername).GetName());
else
ds = map->GetDatasets().Item(strLayername);
long nreccount = ds.GetRowCount();
long nfeacount = layer.AllFeatures().GetCount();
if(nreccount!=nfeacount) /*是否需要紧缩的判断条件*/
{
CWaitCursor cursor;
// map->GetDatasets().Remove(1);
CMapXLayer layer = map->GetLayers().Item(strLayername);
long layercount = map->GetLayers().GetCount();
long layerindexOrign;
for(int k=1;k<=layercount;k++)
{
if(map->GetLayers().Item(k).GetName()==strLayername)
{
layerindexOrign = k; //该层所在的位置
break;
}
}
VARIANT vtLayer;
vtLayer.vt = VT_DISPATCH;
vtLayer.pdispVal = layer.m_lpDispatch;
vtLayer.pdispVal->AddRef();
CMapXDataset dataSet = map->GetDatasets().Item(layer.GetName());//map->GetDatasets().Add(miDataSetLayer, vtLayer,"pack";
// CString dsname = map->GetDatasets().Item(1).GetName();
CString layername = layer.GetName();
CString layerFilespec = layer.GetFilespec();
////////////////将选中的layer上的内容复制到临时建立的表templayer中(开始)/////////////////////////
CMapXLayerInfo m_LayerInfo;
m_LayerInfo.CreateDispatch(m_LayerInfo.GetClsid());
m_LayerInfo.SetType(miLayerInfoTypeNewTable);
CString tempstr;
layerFilespec.TrimLeft();
layerFilespec.TrimRight();
int pos;
pos = layerFilespec.ReverseFind('\\');
CString routeStr;
routeStr = layerFilespec.Mid(0,pos+1);
tempstr = routeStr+"\\templayer.tab";
VARIANT name;
name.vt=VT_BSTR;
name.bstrVal = tempstr.AllocSysString();
m_LayerInfo.AddParameter("filespec",name);
VARIANT vlayername;
vlayername.vt = VT_BSTR;
vlayername.bstrVal = CString("templayer".AllocSysString();
m_LayerInfo.AddParameter("Name",vlayername);
VARIANT m_Fields;
CMapXFields n_Fields;
n_Fields.CreateDispatch(n_Fields.GetClsid());
n_Fields=dataSet.GetFields();
m_Fields.vt = VT_DISPATCH;
m_Fields.pdispVal = n_Fields.m_lpDispatch;
m_Fields.pdispVal->AddRef();
m_LayerInfo.AddParameter("Fields", m_Fields);
VARIANT m_Features;
CMapXFeatures n_Features=layer.AllFeatures();
m_Features.vt = VT_DISPATCH;
m_Features.pdispVal=n_Features.m_lpDispatch;
m_Features.pdispVal->AddRef();
m_LayerInfo.AddParameter("Features", m_Features);
CMapXLayer packlyr = map->GetLayers().Add(m_LayerInfo.m_lpDispatch);
// map->GetLayers().LayersDlg(COptionalVariant(),COptionalVariant());
//packlyr为加入的临时层对象
//////////////////已将layer复制到临时建立的表templayer中///////////////////////////
map->GetDatasets().Remove(layername); //从Datasets中去除先前帮定的需紧缩的层
map->GetLayers().Remove(layername); //先把原始层(未紧缩的层)从层集中去除
//创建dataset for packlyr
vtLayer.vt = VT_DISPATCH;
vtLayer.pdispVal = packlyr.m_lpDispatch;
vtLayer.pdispVal->AddRef();
dataSet = map->GetDatasets().Add(miDataSetLayer, vtLayer,"pack";
//创建新表
CMapXLayerInfo newlayerInfo;
newlayerInfo.CreateDispatch(newlayerInfo.GetClsid());
newlayerInfo.SetType(miLayerInfoTypeNewTable);
newlayerInfo.AddParameter("filespec",COleVariant(layerFilespec));
newlayerInfo.AddParameter("Name", COleVariant(layername));
n_Fields=dataSet.GetFields();
m_Fields.vt = VT_DISPATCH;
m_Fields.pdispVal = n_Fields.m_lpDispatch;
m_Fields.pdispVal->AddRef();
newlayerInfo.AddParameter("Fields", m_Fields);
CMapXFeatures features = packlyr.AllFeatures();
VARIANT fs;
fs.vt = VT_DISPATCH;
fs.pdispVal=features.m_lpDispatch;
fs.pdispVal->AddRef();
newlayerInfo.AddParameter("features",fs);
newlayerInfo.AddParameter("OverwriteFile",COleVariant("1"; //永久写入原表
CString tempstr1,tempstr2,tempstr3,tempstr4,tempstr5;
tempstr1 = routeStr+"\\"+layername+".tab";
tempstr2 = routeStr+"\\"+layername+".dat";
tempstr3 = routeStr+"\\"+layername+".map";
tempstr4 = routeStr+"\\"+layername+".id";
tempstr5 = routeStr+"\\"+layername+".ind";
DeleteFile(tempstr1);
DeleteFile(tempstr2);
DeleteFile(tempstr3);
DeleteFile(tempstr4);
DeleteFile(tempstr5);
map->GetLayers().Add(newlayerInfo.m_lpDispatch);
map->GetLayers().Move(1,layerindexOrign+1); //把层从添加的位置移回到原来的位置
// map->GetLayers().LayersDlg(COptionalVariant(),COptionalVariant());
//删除临时表
map->GetDatasets().Remove("pack";
map->GetLayers().Remove("templayer";
tempstr1 = routeStr+"\\templayer.tab";
tempstr2 = routeStr+"\\templayer.dat";
tempstr3 = routeStr+"\\templayer.map";
tempstr4 = routeStr+"\\templayer.id";
tempstr5 = routeStr+"\\templayer.ind";
DeleteFile(tempstr1);
DeleteFile(tempstr2);
DeleteFile(tempstr3);
DeleteFile(tempstr4);
DeleteFile(tempstr5);
DataBand(strLayername);
}
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
刷屏,我的最爱!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
navtech
2003-09-15
打赏
举报
回复
的确是这样的。在mapinfo里菜单的选择Table->Maintancence->Pack Table,可以紧缩表。
在MapX5.2.25里有Pack方法,MapX4.5里面就只能自己写了。
Vue3+vite搭建基础架构(11)--- 菜单栏功能和
Tab
页功能实现
本文
记录
了在Vue3+vite项目
中
实现菜单栏和
Tab
页功能的过程。包括
删除
不需要的
文件
、编写全局属性代码、菜单栏和
Tab
页代码等。还解决了浏览器输入地址不打开
Tab
页以及切换
Tab
页参数丢失的问题,最后附上示例项目代码链接。
VS code “
Tab
” 键 无法缩进的问题
本文介绍了一个在VSCode
中
遇到的问题,即
Tab
键在编辑
文件
时不执行缩进,而是移动焦点到其他标签或菜单。文章详细
记录
了解决这一问题的过程,包括尝试
删除
所有
Tab
快捷键未果,最终通过查阅VSCode官方快捷键说明文档找到解决方案,即使用Ctrl+M切换
Tab
行为。
LinUX
删除
单元格
TAb
,Linux下grep命令查找带有
tab
(退格)的字符
这篇博客介绍了如何在Linux环境
中
,通过grep命令结合正则表达式,精确地从日志
文件
delete.log
中
筛选出被
删除
的主帖
记录
。文章提到了使用'grep $''11$'' | wc'或'grep 'CTRL+V,
TAB
11CTRL+V,
TAB
' | wc'这两个命令来统计
删除
的主帖数量,但指出直接使用'grep '11' | wc'或'grep ' 11 ' | wc'无法得到正确结果,原因是
tab
字符需要特殊方式匹配。
php正则表达式
tab
健,Linux下如何使用grep命令查找带有
tab
(退格)的字符
本文介绍如何在Linux环境下使用grep命令精准统计日志
文件
delete.log
中
被
删除
的主帖数量。通过正确的使用
tab
字符匹配,可以有效地过滤出特定类型的帖子
删除
记录
。
java正则表达式
tab
_Linux下如何使用grep命令查找带有
tab
(退格)的字符
本文介绍如何在Linux环境下使用grep命令精准统计日志
文件
delete.log
中
被
删除
的主帖数量。通过正确的使用
tab
字符匹配,可以有效地过滤出特定类型的帖子
删除
记录
。
地理信息系统
2,158
社区成员
8,288
社区内容
发帖
与我相关
我的任务
地理信息系统
它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
复制链接
扫一扫
分享
社区描述
它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章