проблема с feature.Store()

0 голосов
спросил 18 Май, 10 от boom (1,760 баллов) в категории Программные продукты Esri
Здравствуйте!
на компе у меня стоит arcgis 9.3, мне нужно было сделать редактирование поля в слое, сделал так
muWorkspaceEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
workspaceEdit.StartEditOperation();

m_FCursor = m_featureclass.Update(null, true);
feature = m_FCursor.NextFeature();
feature.set_Value(indexEditField, editValue);
feature.Store();

workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);

проверил программку в базе 9.3. работает, редактирует и сохраняет, все нормально.

теперь надо, чтобы она работала и с базой 9.0. проверяю ее же на 9.0, редактирует, после Store() делаю feature.get_Value(indexEditField). выводит новое значение. но после обработки всех значений cursor'a, значения пропадают, т.е. новые значения не сохраняются.

в чем может быть проблема? в разнице версий? если в ней, то надо ставить 9.0, тулкит для 9.0 и писать там?


16 Ответы

0 голосов
ответил 20 Май, 10 от boom (1,760 баллов)
виноват, я делал редактирование в базе 9.3 и 9.0, 9.3 - не версионные, а 9.0 - версионные. Сейчас я рассматриваю базу 9.0, т.е. данные там версионные. если просматривать таблицу в аркгисе, то видно уже перезаписанные данные.
теперь, я так понимаю, если данные версионные, то сохраняется "история" изменений этого поля в табличке A...

мне надо чтобы сохранялись данные сразу, и если это возможно, не хранились в табл А...

и если запускать эту программку на компе, где стоит ArcGis 9.0, то интерфейс IMultiuserWorkspaceEdit не находится и приходится использовать workspaceEdit.StartEditing(false);
0 голосов
ответил 20 Май, 10 от pooperec (10,820 баллов)
1. Разберитесь сначала что такое версионность, у Вас сейчас всё работает правильно.
2. Если Вам ДЕЙСТВИТЕЛЬНО не нужны версионные данные, то просто отмените версионность.
0 голосов
ответил 20 Май, 10 от boom (1,760 баллов)
хорошо, спасибо
0 голосов
ответил 16 Июль, 10 от boom (1,760 баллов)
продолжаю эту тему, полигоны сохранять научился, сохраняет.
теперь пришлось сохранять точки, делаю аналогично

ESRI.ArcGIS.Geodatabase.IFeatureClass pFeatClass = pFeatureLayerInParam.FeatureClass;

            ESRI.ArcGIS.Geodatabase.IDataset pDataset = (IDataset)pFeatClass;

            IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pWorkspace;

            ESRI.ArcGIS.Geodatabase.IMultiuserWorkspaceEdit WorkspaceEdit = (ESRI.ArcGIS.Geodatabase.IMultiuserWorkspaceEdit)pWorkspace;
            WorkspaceEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
            pWorkspaceEdit.StartEditOperation();

            IFeature pLocalFeature = default(IFeature);

            pLocalFeature = pFeatClass.CreateFeature();

            try
            {
                pLocalFeature.Shape = pGeometryOfFeature;
            }
            catch { }

            try
            {

                pLocalFeature.Store();

                iReturnFeatureOID = pLocalFeature.OID;

                IGeometry g = pLocalFeature.Shape;
                pWorkspaceEdit.StopEditOperation();
                pWorkspaceEdit.StopEditing(true);
            }

выдает ошибку
на pLocalFeature.Shape = pGeometryOfFeature; что нет Z индекса


------
pPoint2BeInserted2SDE = (IPoint)SetSpatialRef4Point(pPoint2BeInserted2SDE as IGeometry, iSpatialRefId, pTempFeatLayer);
           
IGeometry pGeomFromFeature = (IGeometry)pPoint2BeInserted2SDE;

private IGeometry SetSpatialRef4Point(IGeometry pGeomInParam, int iSpatialRefId, IFeatureLayer pFeatureLayerInParam)
        {
            IGeometry pReturnGeometry = pGeomInParam;
            ESRI.ArcGIS.Geometry.ISpatialReference sr = (pFeatureLayerInParam.FeatureClass as IGeoDataset).SpatialReference;
            pReturnGeometry.Project(sr);
            return pReturnGeometry;
        }

0 голосов
ответил 16 Июль, 10 от TDenis (42,620 баллов)
Ну раз слой настроен так, что требуется задавать высоту, то и указывайте
IPoint.Z
0 голосов
ответил 16 Июль, 10 от boom (1,760 баллов)
странно, сначала выпадала ошибка, что Z значение не может быть пустым, добавил это
IZAware zA = (IZAware)pPoint2BeInserted2SDE;
zA.ZAware = true;
pPoint2BeInserted2SDE.Z = 0.1;

стала выпадать ошибка, что данный слой не имеет Z значений. убрал, стало сохранять.

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