[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 383
  • Last Modified:

Problem in a Component derived from TClientDataSet using TStrings

Hello ,

      I want to create a Custom Component based on the TClientDataset class. I want my new component to be able to hold some strings in a TstringList. I have used the same technique in some other components and worked fine. No when I am trying to open the TStrings Editor in the Object Inspector the following error message appears "Could not assign a nil to a TRichEditStrings". What may be wrong ?

Thank you in advance.
TMySecondClientDataset = class(TClientDataSet)
  private
    FFileGroups: TStrings;
  protected
    constructor Create(AOwner : TComponent);
    destructor Destroy;
  public
  published
    property FileGroups: TStrings read FFileGroups write FFileGroups;
  end;
 
constructor TMySecondClientDataset.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FFileGroups := TStringList.Create;
end;
 
destructor TMySecondClientDataset.Destroy;
begin
  FFileGroups.Free;
end;

Open in new window

0
ikaros23
Asked:
ikaros23
  • 4
  • 3
1 Solution
 
Geert GruwezOracle dbaCommented:
you need a setter to check for nil
type
  TMySecondClientDataset = class(TClientDataSet)
  private
    FFileGroups: TStrings;
    procedure SetFileGroups(const Value: TStrings);
  public
  published
    property FileGroups: TStrings read fFileGroups write SetFileGroups;
  end;
 
procedure TMySecondClientDataset.SetFileGroups(const Value: TStrings);
begin
  fFileGroups.BeginUpdate;
  try
    if Assigned(Value) then 
      fFileGroups.Assign(Value)
    else 
      fFileGroups.Clear;
  finally
    fFileGroups.EndUpdate;
  end;  
end;

Open in new window

0
 
ikaros23Author Commented:
I tried your solution but nothing happened :(. In another component that I have created (derived from TADOQuery) The same technique worked fine . Why would I need a setter procedure in this one ? I am very confused :( ......
0
 
Geert GruwezOracle dbaCommented:
did you assign nil ?

you want to assign the content of the list ,
not the list itself
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
ikaros23Author Commented:
Your setter procedure was right. What I though was right in the components I told you I have used the same technique proved to be wrong.I had written a property editor to access the strings . when I used the default the same error occurred. Although I have used a slightly different approach than the one you suggested (taken by FSQL property of ADOQuery) , I am accepting your solution , because its essentially the same. Thank you very much,
0
 
Geert GruwezOracle dbaCommented:
but why then a B grade ?
0
 
ikaros23Author Commented:
Sorry for the B . I am new to the experts and placed a B by mistake ... SORRYYYY :(
0
 
Geert GruwezOracle dbaCommented:
lol, no need to apologize, i was just wandering why ...
just follow the guide lines.
post a A, when accept,
post a B when you had to solve yourself and further investigation didn't help
post a C ... nobody likes this ...
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now