创建ITable不能更新记录的问题
使用如下代码在本地FileGDB中创建一个表:
HRESULT hr;IFieldsPtr ipFields(CLSID_Fields);IFieldsEditPtr ipFieldsEdit(ipFields);{IFieldPtr ipFieldPI(CLSID_Field);IFieldEditPtr ipFieldEditPI(ipFieldPI);ipFieldEditPI->put_Name(_bstr_t(g_strMsgFieldProjectID));ipFieldEditPI->put_Type(esriFieldTypeString);ipFieldEditPI->put_Length(255);ipFieldsEdit->AddField(ipFieldPI);}{IFieldPtr ipFieldFC(CLSID_Field);IFieldEditPtr ipFieldEditFC(ipFieldFC);ipFieldEditFC->put_Name(_bstr_t(g_strMsgFieldFeatureClass));ipFieldEditFC->put_Type(esriFieldTypeString);ipFieldEditFC->put_Length(64);ipFieldEditFC->put_Editable(VARIANT_TRUE);ipFieldsEdit->AddField(ipFieldFC);}{IFieldPtr ipFieldEC(CLSID_Field);IFieldEditPtr ipFieldEditEC(ipFieldEC);ipFieldEditEC->put_Name(_bstr_t(g_strMsgFieldExportCount));ipFieldEditEC->put_Type(esriFieldTypeInteger);ipFieldEditEC->put_Length(16);ipFieldEditEC->put_Editable(VARIANT_TRUE);ipFieldsEdit->AddField(ipFieldEC);}{IFieldPtr ipFieldIC(CLSID_Field);IFieldEditPtr ipFieldEditIC(ipFieldIC);ipFieldEditIC->put_Name(_bstr_t(g_strMsgFieldImportCount));ipFieldEditIC->put_Type(esriFieldTypeInteger);ipFieldEditIC->put_Length(16);_variant_t vtValue;vtValue.vt = VT_INT;vtValue.intVal = 0;ipFieldEditIC->put_DefaultValue(vtValue);ipFieldsEdit->AddField(ipFieldIC);}hr = ipFWS->CreateTable(_bstr_t(g_strMsgTableName), ipFields, NULL, NULL, _T(""), &ipTable);if (FAILED(hr) || NULL == ipTable){return FALSE;}return TRUE;
发现无法更新:
BOOL CCommonFunctions::InsertImportedCount(IWorkspacePtr& ipWS, std::map<CString, long>& mapNameCount)
{if (nullptr == ipWS){return FALSE;}if (mapNameCount.size() == 0){return TRUE;}IFeatureWorkspacePtr ipFWS = ipWS;ITablePtr ipTable = NULL;HRESULT hr = ipFWS->OpenTable(_bstr_t(g_strMsgTableName), &ipTable);if (FAILED(hr) || NULL == ipTable){return FALSE;}long lIndexFeatureClass = -1;long lIndexImportCount = -1;hr = ipTable->FindField(_bstr_t(g_strMsgFieldFeatureClass), &lIndexFeatureClass);hr = ipTable->FindField(_bstr_t(g_strMsgFieldImportCount), &lIndexImportCount);if (0 > lIndexFeatureClass || 0 > lIndexImportCount){return FALSE;}esriICursorPtr ipCursor = NULL;hr = ipTable->Update(NULL, VARIANT_FALSE, &ipCursor);_variant_t vtValue;CString strName = _T("");esriIRowPtr ipRow = NULL;while (S_OK == ipCursor->NextRow(&ipRow) && NULL != ipRow){vtValue.vt = VT_EMPTY;hr = ipRow->get_Value(lIndexFeatureClass, &vtValue);strName = VARIANTtoString(vtValue);if (strName.IsEmpty()){continue;}vtValue.vt = VT_UI4;vtValue.lVal = mapNameCount[strName];if (vtValue.lVal < 0){continue;}hr = ipRow->put_Value(lIndexImportCount, vtValue.lVal);if (FAILED(hr)){continue;}hr = ipCursor->UpdateRow(ipRow); //执行出错,提示参数无效if (FAILED(hr)){continue;}}return TRUE;
}
在ArcMap中打开也无法编辑。
刚开始以为是字段属性问题,于是进行如下设置(创建字段时指定其Editable属性为真):
ipFieldEditIC->put_Editable(VARIANT_TRUE);
发现还是不行。
最后,解决方案是添加OID字段,如下:
{IFieldPtr ipFieldOID(CLSID_Field);IFieldEditPtr ipFieldEditOID(ipFieldOID);ipFieldEditOID->put_Name(_bstr_t(_T("OID")));ipFieldEditOID->put_Type(esriFieldTypeOID);ipFieldsEdit->AddField(ipFieldOID);}
创建ITable不能更新记录的问题相关推荐
- Dynamics CRM2016 Web API之更新记录
本篇继续探索web api,介绍如何通过web api更新记录. 下面是一段简单的更新代码,更新了几个不同类型的字段,entity的赋值和前篇创建时候的一样的. var entity = {};ent ...
- MySQL 设置 创建时间 和 更新时间
在实际应用中,我们时常会需要用到创建时间和更新时间这两个字段,下面记录一下: 第一种 : 命令行创建(推荐) CREATE TABLE `user_info` (`uid` varchar(255) ...
- EIDE助手更新进度(详细更新记录)
本页面不在更新 最新更新记录点击这里查看 2.5 [未发布] 1.修复部分句柄错误 2.工具箱插件增加通用菜单 3.增加NL_ADD_NEW_ELEMENT通知事件 --–对应 #APP_事件_IDE ...
- NetSuite 创建全局库存关系记录
创建全局库存关系记录 创建全局库存关系记录 要创建一个全局库存关系记录: 主要信息 履行 客户退货 删除一个全局库存关系记录 创建全局库存关系记录 要使用公司间跨组织履行功能来履行或接收库存,需要创建 ...
- DeepFaceLab: 更新记录以及版本说明!
DeepFaceLab更新记录以及版本说明 DeepFaceLab 从2018年开始,进入快速迭代更新,所以版本非常多.我们追随这个项目许久,保存了一些有价值的历史版本,并且对软件的更新做一个记录,方 ...
- mysql 更改员工工资_MySQL编辑和更新记录,包括员工工资
UPDATE命令在MySQL中用于更新记录.通过它,SET命令可用于设置新值.让我们首先创建一个表-mysql> create table DemoTable ( EmployeeId int ...
- dropdownlist下拉框变透明_F.js 更新记录
2020-10-10 v7.0.0 +支持复选框的单选框样式. -为表格增加checkboxSelectDisplayType属性,为表格列增加checkboxDisplayType属性(仅用于col ...
- mysql 自动更新时间_如何设置mysql自动更新创建时间和更新时间
做项目时,希望: 新增记录时,mysql自动将系统的当前时间set到创建时间和更新时间这两个字段中. 更新记录时,mysql只update更新时间字段的时间. 设置mysql自动更新创建时间和更新时间 ...
- oracle发票验证,通过使用Oracle SQL脚本进行计算(总发票)的多个表的更新记录...
我有一个SERVICE表,该表存储一个表中的服务数量,然后链接到连接到INVOICE的LINE表.通过使用Oracle SQL脚本进行计算(总发票)的多个表的更新记录 我想要创建一个触发器,根据SER ...
最新文章
- TCP/IP 笔记 - TCP连接管理
- 运维人员 | 需要了解的数据中心的网络威胁
- 空无达摩院——机器智能技术的发展
- C语言经典算法100例-031-判断星期几
- 3t硬盘坏道检测需要多久_卤素检测报告需要多久更新一次
- bigsur正式版clover引导_【微信首发】macOS Catalina 10.15.6 19G2021 正式版 Clover/OC/PE三分区原版镜像...
- 郭麒麟、宋轶主演的《赘婿》1-8集拍得怎么样?
- linux samba
- Eclipse保护色设置
- 安装Apache服务器
- 小白快速入门| springcloud系列之-快速上手feign
- 北京挪动推出神州行5元卡套餐
- Win2008 Server R2 服务器拒绝共享访问
- 润乾统计图超链接使用例子
- oracle表空间缩减操作手册
- TypeScript——理解 infer 关键字!
- 基于docker实现人人影视CVNT虚拟化多开,基于selinum实现自动化点击程序
- 恩布企业IM 1.8 版本,企业内部通讯软件
- 让自己不烦心的心理暗示
- springboot启动报错CommentService required a bean of type ‘com.xxx.xxx.dao.CommentMapper‘ that could not
热门文章
- linux命令删除raid,甲秀之音-Linux环境下删除硬盘中残留的raid信息
- Ipconfig ping tracert netstat arp的使用
- 如何让安卓手机访问内网服务器?
- 学Java好还是前端好?
- AppCompatActivity透明化处理
- Laravel中使用webhook开发Telegram机器人自定义指令
- vt-x+linux子系统,虚拟机安装linux 系统(二 )解决 Intel VT-x 报错
- vue导出excel文件损坏
- iOS之深入解析插件化架构
- 【持续更新】2006-2023历代AMD 服务器Instinct桌面显卡列表,Instinct显卡发布日期