首页 > Windows开发 > 详细

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

时间:2020-09-08 15:07:52      阅读:191      评论:0      收藏:0      [点我收藏+]

主题:

解决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;

 

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

原文:https://www.cnblogs.com/jijm123/p/13631842.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!