主题:

解决clientdataset 自定义字段无法在前台修改值的问题;数据库里面直接取的字段从前台可以修改,但是自定义的返回字段无法修改。

报错信息:

  1. error1:EDatabaseError with message ‘Field ‘选择’ cannot be modified
  2. 如果仅仅修改cdsA.field[0].ReadOnly=false,在Post的时候会报error2:EDBClient with message ‘Trying to modify read-only field

解决思路:

将一个复制Data的clientdataset做成可写。因为直接赋值cdsA.data=cdsTemp.data会连着datasetprovider的一些东西一起赋值,readonly属性也会赋值

解决方法:

只需要将需要修改但不能修改的clientdataset,传入到此方法之后,即可修改其的字段值。

{
Author:mxd
time:2018.08.03 16:57:43
function:解决clientdataset 连接脱离框架导致自定义字段无法在前台修改值的问题
description:将一个复制Data的clientdataset做成可写。因为直接赋值cdsA.data=cdsTemp.data会连着datasetprovider的一些东西一起赋值,readonly属性也会赋值
error1:EDatabaseError with message 'Field '选择' cannot be modified
如果仅仅修改cdsA.field[0].ReadOnly=false,在Post的时候回报error2
error2:EDBClient with message 'Trying to modify read-only field
}
procedure TDM.SetDstAllFieldCanEdit(cdsA: TClientDataSet);
var cdsB:TClientDataSet;I:Integer;
begincdsB := TClientDataSet.Create(nil);TrycdsA.DisableControls;cdsB.Data := cdsA.Data;cdsA.Close;cdsA.FieldDefs.Clear;for I:=0 to cdsB.FieldDefs.Count - 1 dobeginwith   cdsA.FieldDefs.AddFieldDef   dobeginDataType := cdsB.FieldDefs[I].DataType;Size := cdsB.FieldDefs[I].Size;Name := cdsB.FieldDefs[I].Name;end;end;cdsA.CreateDataSet;with cdsB dobeginFirst;while not Eof dobegincdsA.Append;for I := 0 to Fields.Count - 1 docdsA.Fields[I].Value := Fields[I].Value;Next;end;end;if   cdsA.State   in   [dsInsert,dsEdit]   then   cdsA.Post;cdsA.MergeChangeLog;FinallycdsA.EnableControls;cdsB.Free;End;
end;

Delphi无法修改Clientdataset的字段的解决方法相关推荐

  1. sqlite特性 只能添加字段 不能修改字段 的解决方法 和php sqlite的管理工具 sqlbuddy

    sqlite特性  只能添加字段 不能修改字段 的解决方法 和php sqlite的管理工具 1. php管理工具 sqlbuddy 功能完善 都是 没有 修改字段的变通办法提供,sqlbuddy建立 ...

  2. Linux6.x修改出eth0网卡的解决方法

    Linux6.x修改出eth0网卡的解决方法 参考文章: (1)Linux6.x修改出eth0网卡的解决方法 (2)https://www.cnblogs.com/puloieswind/p/5855 ...

  3. 数据库修改和忘记密码的解决方法(附详细步骤和操作图)

    数据库修改和忘记密码的解决方法(附详细步骤和操作图) 修改密码 如果能登录的话就直接修改密码 登录方式:win+R输入cmd,接着输入mysql -uroot -p,会提示输入密码,如下图: 重置密码 ...

  4. clientdataset 遍历字段_解决DBGridEh遍历记录后不移动当前行位置的方法

    解决DBGridEh遍历记录后不移动当前行位置的方法 在用DBGridEh配合ClientDataSet使用时,需要知道用户选择了哪些记录,可用遍历记录的方法查询选择列是否为真,但在这之后,Clien ...

  5. php mssql扩展SQL查询中文字段名解决方法

    一.问题: 数据库是MS SQLServer2000,要把SQLServer2000里的一张表的数据导入MySQL5,其中SQLServer2000表的字段以简体中文命名(强烈建议不要以中文做为字段名 ...

  6. ipv4改完保存不成功_win7系统没法保存修改后IP地址的解决方法

    很多小伙伴都遇到过win7系统没法保存修改后IP地址的困惑吧,一些朋友看过网上零散的win7系统没法保存修改后IP地址的处理方法,并没有完完全全明白win7系统没法保存修改后IP地址是如何解决的,今天 ...

  7. Ubuntu中修改grub重启出现 Memtest86 解决方法

    如下图所示 解决方法 第一步:按ESC键重启同时按SHIFT键,进入如下界面 第二步:选择第一个选项按Enter进入Ubuntu系统,然后打开终端输入命令sudo vim /etc/default/g ...

  8. php mysql 中文字段名_php mssql扩展SQL查询中文字段名解决方法

    一.问题: 数据库是MS SQLServer2000,要把SQLServer2000里的一张表的数据导入MySQL5,其中SQLServer2000表的字段以简体中文命名(强烈建议不要以中文做为字段名 ...

  9. Microsoft Edge网页调用摄像头失败(设置权限处按钮为灰色不可修改)的原因和解决方法

    在网页登录时,有些网页有调用摄像头进行人脸识别的需求,这个操作在Microsoft Edge中是被禁止的,Microsoft Edge默认禁止http访问的网页调用摄像头和麦克风等的权限. 例如登录某 ...

最新文章

  1. java小程序例子_「小程序JAVA实战」java的聚合项目搭建(30)
  2. Leetcode 125. 验证回文串 解题思路及C++实现
  3. 等了这么久,就给我看这个?
  4. tomcat出现5个using_当猫咪出现这5个迹象,主人就要给猫咪换猫粮了
  5. JS判断相等或者不等于(==、===、!=、!==)运算符
  6. iOS NSString中字符串的删除,替换
  7. mysql几种备份恢复_mysql多种备份与恢复方式一
  8. PostgreSQL 最佳实践 - 在线增量备份与任意时间点恢复
  9. DML、DDL的概念与区别
  10. [MFC] 向文本编辑框写入数据与从其中读取数据
  11. 【数字信号处理】基于matlab GUI数字调音台【含Matlab源码 881期】
  12. 【互动出版网】央视热播BBC纪录片同名图书买二赠一活动
  13. php mail带附件,Pear Mail 发送邮件带附件_PHP教程
  14. 【搬运】各种知乎段子
  15. (最详细)Cloudera Manager安装部署
  16. 申请一个微信小程序有哪些需要注意的事项
  17. Linux游戏市场,Tacoma上的Nixie Pixel以及更多开放游戏新闻
  18. 从零开始WebAPP尝试(四)----登录实现
  19. ClearCase 介绍 1
  20. 细粒度图像分类论文研读-2011

热门文章

  1. 3d激光雷达开发(PassThrough滤波器)
  2. 无人驾驶(ncnn学习)
  3. 南昌大学c语言大作业,南昌大学计算机C语言答案2
  4. mysql表名怎么拼接_自学MySQL第九天
  5. python staticsmodels用法_python自动化之models 进阶操作二
  6. echarts 图例太多放不下怎么办_段码液晶屏笔段太多,引脚放不下怎么办?
  7. zk pivottable java_zookeeper节点类型和java客户端创建zk节点
  8. 输出毫秒_使用AMETEK直流电源实现波形变化的输出
  9. Python基础(使用print()函数输出格式化字符串)
  10. Python清理微信被好友删除的人