IFeatureCursor.UpdateFeature不能更新MDB的问题

arcengine,深入理解游标Cursors,实现数据的快速查找,插入,删除,更新 深入理解游标Cursors,实现数据的快速查找,插入,删除,更新1、         查找数据Search Cursors  //by yl landgis@126.com  yanleigis@21cn.com 2008.7.7 [C#] //Create an envelope for the lower right portion of dataIEnvelope envel 阅读详情
       上周有个同事要我帮忙把土地利用图斑的村名写到BLOCK_CODE字段中,因为只能根据空间关系来做,所以最好写程序。刚开始以为这样的小问题,半个小时不到应该就能解决,没想到折腾了一个下午也没有完全搞定。每次执行到UpdateFeature就出错,说数据库被锁定或者只读。实在没有办法了上ESRI的User Forums上查了查,通常别人应该也会碰到和我类似的问题,结果的确找到不少,不过感觉不是正解。他们说要用IFeature.Store代替UpdateFeature,但是UpdateFeature可以批量提交性能会好些,而且也没有找出导致不能更新的根本原因。因为我发现UpdateFeature方法不是所有情况下都不能用,比如我写了一个简单的函数,所有的Feature赋上同样的值是可以的,所以我坚信肯定是别的原因导致这个错误。
       因为村相对于图斑要少得多,一个区县村通常只有近百个,而图斑达数万甚至几十万。如果用区县来选择图斑可以减少查询的次数,速度应该会快一点。所以我采用一个只读的Search Cursor内嵌套可更新的Update Cursor,我发现论坛上的那些人也是这样的模式,有些人说是Update Cursor锁定了表,对象没有释放,但是即便你用完后用Set pCursor = Nothing也于事无补。周末我有空就在思考这个问题,感觉应该把Update Cursor放在外面可能能够解决问题,结果真如我想象的那样,UpdateFeature工作得很好!
    关键代码如下:
    featureCount = 0
    
Set pLCursor = pLandUseFC.Update(Nothing, False)
    
Set pLFeature = pLCursor.NextFeature
    
Do While Not pLFeature Is Nothing
       
        
If IsNull(pLFeature.Value(fldLBlock)) Then
            blockCode 
= ""
        
Else
            blockCode 
= pLFeature.Value(fldLBlock)
        
End If
        
Set pSpatialFilter.Geometry = pLFeature.Shape
        
Set pVCursor = pVillageFC.Search(pSpatialFilter, False)
       
        
Set pVFeature = pVCursor.NextFeature
        
Do While Not pVFeature Is Nothing
            
If Not IsNull(pVFeature.Value(fldVBlock)) Then
                
If blockCode = "" Then
                    blockCode 
= pVFeature.Value(fldVBlock)
                
Else
                    blockCode 
= blockCode & "," & pVFeature.Value(fldVBlock)
                
End If
            
End If
           
            
Set pVFeature = pVCursor.NextFeature
        
Loop
        
        pLFeature.Value(fldLBlock) 
= blockCode
        pLCursor.UpdateFeature pLFeature
        featureCount 
= featureCount + 1
        
If featureCount = 1000 Then
            pLCursor.flush
            featureCount 
= 0
        
End If
        
Set pLFeature = pLCursor.NextFeature
    
Loop
    pLCursor.flush

 
Android 10 根文件系统和编译系统(十):Android.mk编译动态库 配套系列教学视频链接: Android 10.0 AOSP源码编译: 2-AOSP源码开发环境搭建 Android 10.0 根文件系统和编译系统: 3-Android根文件系统和编译系统 说明 系统:AOSP Android10.0 设备:Android模拟器 前言 本文章重点讲解Android.mk如何控制编译源码编译成动态库 ... 阅读详情

相关推荐

从PWM到正弦波:RC低通滤波器的魔法转换之旅

本文详细介绍了如何利用RC低通滤波器将STM32F103生成的PWM信号转换为高质量正弦波的技术原理与实践方法。通过分析滤波器设计、参数计算、硬件实现及Proteus仿真验证,为嵌入式开发者提供了一套完整的PWM转正弦波解决方案,适用于电机控制、音频信号生成等多种应用场景。

jupi8的博客 382

基于C#的ArcEngine二次开发34:使用ConstructUnion方法进行多要素合并

介绍要素合并的实现代码,及复合要素识别与拆分的方法

m1m2m3mmm的博客 3501

海康视觉脚本开发全流程解析

本文详细解析了海康机器视觉平台(VM)中脚本模块的开发全流程。从创建第一个脚本模块入手,深入讲解了输入参数、输出参数与内部变量的定义与区别,并提供了C#脚本编写、公用函数调用、代码结构组织以及编译调试的实用指南。旨在帮助开发者掌握海康视觉脚本开发的核心技巧,高效实现复杂的自定义视觉逻辑处理。

beer8的博客 603

关于使用featurecursor.updatefeature批量更新要素时遇到的问题

IFeatureLayer zdlyr = AEmethod.FindFeatLyr(this.axMapControl1.Map, "ZD");             IFeatureCursor zdcs = zdlyr.Search(null, false);             for (IFeature zdfeat = zdcs.NextFeature(); zdfeat !

wd_chenzihui的博客 2712

C++ 核电站

问题描述 一个核电站有n个放核物质的坑,排列在一条直线上。如果连续m个坑中放入核物质就会发生爆炸,所以某些坑中不能放核物质。 本题的任务:对于给定的n和m,求不发生爆炸的放置核物质的方案总数。 输入格式 第一行两个正整数n和m,之间用一个空格隔开。2≤n≤50,2≤m≤5。 输出格式 一行一个正整数,表示方案总数。 输入样例 4 3 输出样例 13 数据规模与约定 2≤n≤50,2≤m≤5 CODE #include<bits/stdc++.h> using namespace

HybridCOW_HORSE的博客 1806

从零构建企业级多智能体系统:LangGraph 全流程实战 + 部署指南(含代码与架构图)

> 在大模型应用爆发的今天,如何构建一个可协作、可调试、可部署的多智能体系统?LangGraph 正在成为工程师的新宠。本文从原理剖析、流程建模、代码实战到前后端部署,手把手带你用 LangGraph 构建一个企业级 AI 助理系统,整合财务分析、法务审阅、报告生成与图表可视化等 Agent 模块,全面打通从用户输入到报告输出的全链路闭环。适合有工程思维的 AI 架构师、Agent 研发人员、以及大模型项目实践者。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3451

GIS数据的查找,插入,删除,更新(ArcEngine)

1、查找数据 1)、利用FeaturCursor进行空间查询 //利用构造的Envelope(矩形框),查找和Envelope相交的FeatureClass的要素集 //结果数据利用循环FeatureCursor.nextFeature获得 IEnvelope envelope =newEnvelopeClass(); envelope.PutCoords(508786, 68119...

weixin_30568715的博客 391

基于深度学习DNN LSTM网络的光伏发电量预测 完整代码数据 可直接运行

基于深度学习DNN LSTM网络的光伏发电量预测 完整代码数据 可直接运行

2079

ArcEngine实现矢量数据的属性标准化(20190706)

1

weixin_41607453的博客 633

Xilinx平台Aurora IP介绍(汇总篇)

Aurora IP核使用超简单的,COME ON!

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 2万+

Oracle DG库手动注册归档日志的两种方法

有的时候由于网络或各种原因,Oracle DG库服务器上可能缺少部分归档日志文件,导致DG库的MRP进程一直处于状态。此时我们可以手动从主库或其他DG拷贝归档日志到当前DG服务器,并对日志文件进行手动注册。

Sebastien23的博客 730

ArcGIS之更新数据

某个有20万数据的图层,更新一个字段,将DLMC 内的值“水田”修改为“田地”,其中“DLMC='水田'”的数据有1.5万。做如下测试 一、IWorkspace.ExecuteSQL 在更新大数据量时挺快,但不支持空间筛选。某些情況下可能不支持IWorkspace.ExecuteSQL这个方法,执行前最好先使用IWorkspaceProperty判断是否支持Ex...

漓涂 4949

实战:利用 Agent Harness 自动化 PPT 制作

本文将带你从零开始,用轻量级Agent编排框架,结合主流大模型(GPT-4o、通义千问、文心一言等),搭建一套全自动化的PPT生成工作流:从用户输入自然语言需求,到需求解析、大纲生成、内容填充、数据匹配、排版美化、导出成品,全程不需要手动操作,最快10分钟就能产出符合要求的PPT。我们不会讲晦涩的Agent理论,所有步骤都有可直接运行的代码示例,哪怕你只有基础的Python语法基础,也能跟着一步步做出能用的自动PPT工具。

AI Agent Harness Engineering 571

ArcGIS Engine效率探究——要素的添加和删除、属性的读取和更新

1. 要素的添加 ArcGIS Engine中,主要有两个方法用于要素的添加: Using IFeatureClass.CreateFeature followed by IFeature.StoreUsing IFeatureClass.CreateFeatureBuffer with an insert cursor  批量插入feature,

杨千羽的学习历程 2142

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ArcEngine中featurecursor分别在sde数据库和gdb数据库下的遍历问题

问题描述 //一般的循环遍历步骤 IFeatureCursor featureCursor = featureClass.Search(null,false); IFeature feature = null; while((feature = featureCursor.NextFeature())!=null) { } 以上是常用的循环遍历的步骤,最后遍历到feature...

550

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

UpdateFeature

Updating features This topic explains how to updates features in a geodatabase feature class. Two approaches are shown, one that updates an individual feature using the IFeature.Store method, and o

kone666 1867

IFeatureCursor.UpdateFeature()方法,在写入数据时,报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏的解决方法,亲测有效

在AE开发中,进行数据属性表更新时,用到IFeatureCursor.UpdateFeature()方法,在写入数据时,报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 测试数据为shp数据,这时只要将加上将数据的工作空间打开,开始编辑,最后再关闭编辑,就不会再报错了。 IDataset dataset = (IDataset)dltb_pfs; IWorkspace workspace = dataset.Workspace; ..

qq_36196621的博客 783

通过IFeatureBuffer操作要素,进行要素的插入和更新(要素存储、储存)

通过IFeatureBuffer操作要素,进行要素的插入和更新 public void Updatefeature() { IFeatureClass fc = null; IFeatureCursor feaCursor = null; IFeature pFea = null; ...

坐听风雨 1544

IFeatureClass.Update 修改Feature

Update opens an update cursor on the features specified by an attribute and/or spatial query as specified in an IQueryDef. If a number of features selected by a particular query are to be updated and

旅途 5157

向ArcSDE中的FeatureClass添加要素常用函数

一、1.打开ArcSDE中的FeatureClass:OpenFeatureClass(String) —> 得到featureClass对象 2. 创建游标IFeatureCusor :featureClass.insert(true); 3. 创建IFeatureBuffer :featureClass.CreateFeatureBuffer(); ...

tudou23115的专栏 578

c#操作access,update语句不执行的解决办法

1首先试试下面的方法: 参数位置必须和赋值顺序相同才行,否则更新时就会出现数据无法更新但是也不报错的怪现象。        例如:update tablename set [a]=@a1,[b]=@a2 where [id]=@a3        那么你在加参数时,也必须先加@a,再加@b,最后加@id.也就是说必须要  cmd.Parameters.AddWithValue(“@a1”,

cnceohjm的专栏 3069

ArcEngine向要素类中插入数据,采用效率更高的IFeatureBuffer接口

对于ArcEngine重复地向要素类中添加数据,一般的方法是 1通过IFeatureClass.FeatureClass.CreateFeature()方法返回一个IFeature对象, 2再通过IFeature接口下的set_Value(int index,object obj)方法属性赋值等 3设置IFeature.shape属性 4最后再通过IFeature.store()方法进行存...

mezhaha的博客 2071

IFeatureCursor

IFeatureCursor接口可用来访问要素类的一系列要素。虽然它没有继承ICursor接口,但它的操作和ICursor一样。 Cursor:存储在内存中的来自于一个Table或者featureclass的记录集合。Cursor对象允许在一个单个对象中管理记录集,单个移动对象,不允许返回以前的位置。NextRow,NextFeature方法第一次调用时,实际指向第一条记录,之后每一次调用都是指

点滴的累积,不断的成长! 7940

修改Feature的属性表的值

首先要获取Featureclass,利用Featureclass获取IWorkspace和IWorkspaceEdit:                 IWorkspace workspace = ((IDataset)pFeatureClass).Workspace;                 IWorkspaceEdit workspaceEdit = workspace as

面朝大海,春暖花开 4195

ArcGIS Engine中如何往已有要素类中插入数据

您在Engine程序开发过程中是否遇到过要将新获取的数据向已有要素类中插入?对于数据插入的几种方法您是否清楚?各种方法的效率您对比过吗?今天我们讨论的话题为Engine中如何往已有要素类中插入数据,上述问题的答案会为您一一揭晓。一、往已有要素类中插入数据的几种方式及其优缺点:1,IFeatureClass.CreateFeature配合IFeature.Store使用。该方法在调用Store时会触发

xinying180的博客 1万+
上一篇: 跨域JavaScript脚本访问
下一篇: IsSimple与IsKnownSimple
complayer
博客等级 码龄25年 16粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值