Удалить записи

0 голосов
спросил 01 Ноя, 05 от Гость (210,080 баллов) в категории Программные продукты Esri

Добрый день!

Может кто-нибудь подсказать что-то по следующему поводу:

При удалении записей в теме из программы идет полное рассогласование между dbf-файлом и shp, shx-файлами. Удаляю обычным способом: theme1.removerecord(i) в цикле по теме. Записи удаляются в dbf и не удаляются в двух остальных. Ничего крамольного я с записями не делаю, из других программ к файлам не обращаюсь. В чем может быть причина такого рассогласования (ситуация повторяется с разными темами, проектами, программами). До удаления темы выглядят совершенно нормальными, а после, естественно, перестают загружаться. Пробовала лечить - в dbf появляется несколько пустых записей - но это для меня не выход. 

2 Ответы

0 голосов
ответил 01 Ноя, 05 от dindzilin (4,160 баллов)

Пользуешься своим скриптом или это глючат стандартные операции? Если своим, то хотелось бы посмотреть на критические участки. У меня такие баги возникали при одновременном использовании shp 2-мя пользователями на разных компах. Еще вариант, в свойствах файлов shp или shx не стоит ли галочка 'только для чтения' (возможно осталась после копирования файлов c CD)? И вообще, причин может быть много.

0 голосов
ответил 02 Ноя, 05 от Гость (210,080 баллов)

Галочка не стоит. Пробовала выдернуть сетевой шнур - проблема осталась.image

Пользуюсь своими скриптами. Например. В цикле for each по теме читаю записи, допустим точечной темы, создаю на базе этого полигоны,  анализирую некоторые характеристики созданных полигонов, тот что не нужно - удаляю. Ну что-то типа этого (впрочем, примеры бывают самые разные):

lip1={}
lip1.add(tb11)
lip1.add(tb22)
lip1.add(tnb11)
lip1.add(tnb22)

if (kk>1) then
s1old=s1
jjold=jj  'предыдущий полигон
end

p=polygon.make({lip1})
p.clean

jj=ftpol.addrecord
ftpol.setvalue(posh,jj,p)
ftpol.setvalue(poid,jj,nz)
posh1=ftpol.returnvalue(posh,jj)
ftpol.setvalue(poar,jj,posh1.returnarea)
ftpol.setvalue(pope,jj,posh1.returnlength)
s1=ftpol.returnvalue(poar,jj)
nz=nz+1
x111=((spol-s1old)*10000).abs
x222=((spol-s1)*10000).abs
if (x111>=x222) then
ftpol.removerecord(jjold)
else
ftpol.removerecord(jj)
jj=jjold
s1=s1old
end

Ну что-то такого типа. Причем после выполнения скрипта  результат полностью соответствует ожиданиям - и с полигональной темой все нормально. Порча происходит  при сохранении проекта, т.е. при записи покрытия на диск в окончательном виде.

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...