默认头像
路人甲
路人甲
  • 注册日期2004-07-17
  • 发帖数19
  • QQ
  • 铜币191枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2549回复:6

mapbasic中关于取层的问题????谢谢

楼主#
更多 发布于:2004-07-31 13:03

include "mapbasic.def" include "menu.def" include "icons.def"

declare sub main dim i,j,m,n as integer dim a,b as string dim myobj as obj

sub main n=mapperinfo(frontwindow(),MAPPER_INFO_LAYERS)   '得到已经打开的地图窗                                                                                     口中的层的数量n(即表的数量)。 for i=1 to n

a=layerinfo(frontwindow(0),i,LAYER_INFO_NAME)     '得到第i层的(表的)名字 m=tableinfo(a,TAB_INFO_NROWS)                          '得到第i层的表的行数 m

for j=1 to m fetch rec j from a b=objectinfo(a.obj,OBJ_INFO_TEXTSTRING)                '得到第j行的对象的 if ((b like "%公司%") or (b like "%厂%") or len(b)=1) then  '字符串如果该 select obj from a where rowid=j                                      '字符串与条件相符 myobj=a.obj                                                                 ' 合则把他们挑出来   insert into cuijie(obj) value(myobj)                                   '放到另一个表中 delect from a where rowid=j                                            '(cuijie中), end if                                                                           '并且删除原来的对象 next

next end sub

程序的大概意思就是:各个层(注记层)放在一个窗口中,然后分别选择各个层, 把每个层中的注记的字符串符合条件的挑出来,放到一个指定的层中,然后把原来选 中的对象从层(表)中删除。

总是通不过,又不知道是为什么,有人帮忙看看么??谢谢各位大哥。

喜欢0 评分0
默认头像
路人甲
路人甲
  • 注册日期2004-04-30
  • 发帖数62
  • QQ
  • 铜币265枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-08-04 10:36

编译通不过?select obj from a where rowid=j可以删掉

举报 回复(0) 喜欢(0)     评分
默认头像
论坛版主
论坛版主
  • 注册日期2003-07-30
  • 发帖数319
  • QQ
  • 铜币19枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2004-08-04 11:57

你这样编程极不妥当。 ------------------------------------------------------------------------ for j=1 to m fetch rec j from a b=objectinfo(a.obj,OBJ_INFO_TEXTSTRING)                '得到第j行的对象的 if ((b like "%公司%") or (b like "%厂%") or len(b)=1) then  '字符串如果该 select obj from a where rowid=j                                      '字符串与条件相符 myobj=a.obj                                                                 ' 合则把他们挑出来   insert into cuijie(obj) value(myobj)                                   '放到另一个表中 delect from a where rowid=j                                            '(cuijie中), end if                                                                           '并且删除原来的对象 next ---------------------------------------------------------------- 首先你不应该用fetch rec j from a语句,如果表中有空记录你就比较麻烦,其次你至少要对对象进行一下判断[点/线/面/文字],再使用objectinfo(a.obj,OBJ_INFO_TEXTSTRING)函数,第三你一条记录一条记录的删除增加麻烦更大,一是大量耗费资源,二是增加了程序运行的不稳定性,你可以在程序运行前或程序运行中给表增加一个字段,如何对象符合条件的话可以在增加的字段上做一个记号,在整个表历遍后再整体将符合条件的记录一次性加入到另一个表和删除。

[url=http://www.sohi.cn]北京搜海书店,做中国3S书籍最齐全,服务最好的品牌书店。看看我们的网站,现在有什么新书!!![/url]
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-04-30
  • 发帖数62
  • QQ
  • 铜币265枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2004-08-04 14:41

受教!

举报 回复(0) 喜欢(0)     评分
默认头像
论坛版主
论坛版主
  • 注册日期2003-07-30
  • 发帖数319
  • QQ
  • 铜币19枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2004-08-09 13:06
不客气,难得有认真问题的帖子。
[url=http://www.sohi.cn]北京搜海书店,做中国3S书籍最齐全,服务最好的品牌书店。看看我们的网站,现在有什么新书!!![/url]
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-07-17
  • 发帖数19
  • QQ
  • 铜币191枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2004-08-09 19:39

加精华拉?谢谢头,

贴字沉了几天就没回来看,难的有人这么耐心指点,谢谢。

程序我修改通过了,但是不大明白为什么,就是在第2个循环内改为以下的。 for j=1 to m select obj from a where rowid=j b=objectinfo(selection.obj,OBJ_INFO_TEXTSTRING)               if ((b like "%公司%") or (b like "%厂%") or len(b)=1)then                         myobj=selection.obj                                             insert into cuijie(obj) value(myobj)                   delect from a where rowid=j                             end if       next          

就是把 b=objectinfo(a.obj,OBJ_INFO_TEXTSTRING)和 myobj=a.obj这两句中的a.obj都改为selection.obj 我有点不大明白,什么时候使用tablename.obj,什么时候 使用selection.obj这样的表达啊,有什么区别么?? 使用selection.obj的时候每次操作或者每次循环都能取到当前的 选择集么??谢谢

举报 回复(0) 喜欢(0)     评分
默认头像
论坛版主
论坛版主
  • 注册日期2003-07-30
  • 发帖数319
  • QQ
  • 铜币19枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2004-08-10 11:24

select * from a where object into seltab m=selectioninfo(sel_info_nrows) fetch first from seltab for j=1 to m myobj=seltab.obj                                             b=objectinfo(myobj,OBJ_INFO_TEXTSTRING)               if ((b like "%公司%") or (b like "%厂%") or len(b)=1)then                         ...                   end if       next  

[url=http://www.sohi.cn]北京搜海书店,做中国3S书籍最齐全,服务最好的品牌书店。看看我们的网站,现在有什么新书!!![/url]
举报 回复(0) 喜欢(0)     评分
默认头像

返回顶部