Delphi无法修改Clientdataset的字段的解决方法

主题:

解决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;
begin
    cdsB := TClientDataSet.Create(nil);
    Try
        cdsA.DisableControls;
        cdsB.Data := cdsA.Data;
        cdsA.Close;
        cdsA.FieldDefs.Clear;
        for I:=0 to cdsB.FieldDefs.Count - 1 do
        begin
            with   cdsA.FieldDefs.AddFieldDef   do
            begin
                DataType := cdsB.FieldDefs[I].DataType;
                Size := cdsB.FieldDefs[I].Size;
                Name := cdsB.FieldDefs[I].Name;
            end;
        end;
        cdsA.CreateDataSet;
        with cdsB do
        begin
           First;
           while not Eof do
           begin
               cdsA.Append;
               for I := 0 to Fields.Count - 1 do
                 cdsA.Fields[I].Value := Fields[I].Value;
               Next;
           end;
        end;
        if   cdsA.State   in   [dsInsert,dsEdit]   then   cdsA.Post;
        cdsA.MergeChangeLog;
    Finally
        cdsA.EnableControls;
        cdsB.Free;
    End;
end;
复制代码

 

posted on   癫狂编程  阅读(636)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
好的代码像粥一样,都是用时间熬出来的
点击右上角即可分享
微信分享提示