使用如下代码在本地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不能更新记录的问题相关推荐

  1. Dynamics CRM2016 Web API之更新记录

    本篇继续探索web api,介绍如何通过web api更新记录. 下面是一段简单的更新代码,更新了几个不同类型的字段,entity的赋值和前篇创建时候的一样的. var entity = {};ent ...

  2. MySQL 设置 创建时间 和 更新时间

    在实际应用中,我们时常会需要用到创建时间和更新时间这两个字段,下面记录一下: 第一种 : 命令行创建(推荐) CREATE TABLE `user_info` (`uid` varchar(255) ...

  3. EIDE助手更新进度(详细更新记录)

    本页面不在更新 最新更新记录点击这里查看 2.5 [未发布] 1.修复部分句柄错误 2.工具箱插件增加通用菜单 3.增加NL_ADD_NEW_ELEMENT通知事件 --–对应 #APP_事件_IDE ...

  4. NetSuite 创建全局库存关系记录

    创建全局库存关系记录 创建全局库存关系记录 要创建一个全局库存关系记录: 主要信息 履行 客户退货 删除一个全局库存关系记录 创建全局库存关系记录 要使用公司间跨组织履行功能来履行或接收库存,需要创建 ...

  5. DeepFaceLab: 更新记录以及版本说明!

    DeepFaceLab更新记录以及版本说明 DeepFaceLab 从2018年开始,进入快速迭代更新,所以版本非常多.我们追随这个项目许久,保存了一些有价值的历史版本,并且对软件的更新做一个记录,方 ...

  6. mysql 更改员工工资_MySQL编辑和更新记录,包括员工工资

    UPDATE命令在MySQL中用于更新记录.通过它,SET命令可用于设置新值.让我们首先创建一个表-mysql> create table DemoTable ( EmployeeId int  ...

  7. dropdownlist下拉框变透明_F.js 更新记录

    2020-10-10 v7.0.0 +支持复选框的单选框样式. -为表格增加checkboxSelectDisplayType属性,为表格列增加checkboxDisplayType属性(仅用于col ...

  8. mysql 自动更新时间_如何设置mysql自动更新创建时间和更新时间

    做项目时,希望: 新增记录时,mysql自动将系统的当前时间set到创建时间和更新时间这两个字段中. 更新记录时,mysql只update更新时间字段的时间. 设置mysql自动更新创建时间和更新时间 ...

  9. oracle发票验证,通过使用Oracle SQL脚本进行计算(总发票)的多个表的更新记录...

    我有一个SERVICE表,该表存储一个表中的服务数量,然后链接到连接到INVOICE的LINE表.通过使用Oracle SQL脚本进行计算(总发票)的多个表的更新记录 我想要创建一个触发器,根据SER ...

最新文章

  1. TCP/IP 笔记 - TCP连接管理
  2. 运维人员 | 需要了解的数据中心的网络威胁
  3. 空无达摩院——机器智能技术的发展
  4. C语言经典算法100例-031-判断星期几
  5. 3t硬盘坏道检测需要多久_卤素检测报告需要多久更新一次
  6. bigsur正式版clover引导_【微信首发】macOS Catalina 10.15.6 19G2021 正式版 Clover/OC/PE三分区原版镜像...
  7. 郭麒麟、宋轶主演的《赘婿》1-8集拍得怎么样?
  8. linux samba
  9. Eclipse保护色设置
  10. 安装Apache服务器
  11. 小白快速入门| springcloud系列之-快速上手feign
  12. 北京挪动推出神州行5元卡套餐
  13. Win2008 Server R2 服务器拒绝共享访问
  14. 润乾统计图超链接使用例子
  15. oracle表空间缩减操作手册
  16. TypeScript——理解 infer 关键字!
  17. 基于docker实现人人影视CVNT虚拟化多开,基于selinum实现自动化点击程序
  18. 恩布企业IM 1.8 版本,企业内部通讯软件
  19. 让自己不烦心的心理暗示
  20. springboot启动报错CommentService required a bean of type ‘com.xxx.xxx.dao.CommentMapper‘ that could not

热门文章

  1. linux命令删除raid,甲秀之音-Linux环境下删除硬盘中残留的raid信息
  2. Ipconfig ping tracert netstat arp的使用
  3. 如何让安卓手机访问内网服务器?
  4. 学Java好还是前端好?
  5. AppCompatActivity透明化处理
  6. Laravel中使用webhook开发Telegram机器人自定义指令
  7. vt-x+linux子系统,虚拟机安装linux 系统(二 )解决 Intel VT-x 报错
  8. vue导出excel文件损坏
  9. iOS之深入解析插件化架构
  10. 【持续更新】2006-2023历代AMD 服务器Instinct桌面显卡列表,Instinct显卡发布日期