LocalConstraints / RequiredFields

Discussion of open issues, suggestions and bugs regarding IBDAC (InterBase Data Access Components) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
marcodor
Posts: 29
Joined: Tue 29 Oct 2013 20:30

LocalConstraints / RequiredFields

Post by marcodor » Mon 18 May 2015 07:08

Hello Victor,

I'm trying to insert a record locally, later refreshing it from server, without success.
My model allow multiple edit records at once. When some record is updated/inserted, browser dataset gets notified and it should refresh itself.

Code: Select all

  BDataSet.LocalUpdate := True;
  BDataSet.Options.RequiredFields := False; // LocalConstraints := False;
  BDataSet.Insert;
  BDataSet['ID'] := EDataSet['ID'];
  BDataSet.Post;
  BDataSet.RefreshRecord;
  BDataSet.Options.RequiredFields := True; // LocalConstraints := True;
  BDataSet.LocalUpdate := False;
It stuck in "required fields", throwing an exception on Post.
As I see LocalConstraints nor RequiredFields does not help, fields are explicitly defined.
May I somehow disable constraints (fields required) checks to Post record and later enable them back (as i need Field.Required for direct edit in browser dataset grid)?


-
Dorin

ViktorV
Devart Team
Posts: 3168
Joined: Wed 30 Jul 2014 07:16

Re: LocalConstraints / RequiredFields

Post by ViktorV » Tue 19 May 2015 08:50

To solve the problem, try to set the RequiredFields property before opening connection.

marcodor
Posts: 29
Joined: Tue 29 Oct 2013 20:30

Re: LocalConstraints / RequiredFields

Post by marcodor » Tue 19 May 2015 09:10

Hello Victor,

User may edit record also directly in a grid browser form for "simple" record, but may opt to edit it also in "editor" form. So keeping Required properties for fields is important.

The question is to disable them just for Post & RefreshRecord period.

Deprecated LocalConstraints will be a perfect match for this case. What do you think?
It should not break some backward compatibility.

ViktorV
Devart Team
Posts: 3168
Joined: Wed 30 Jul 2014 07:16

Re: LocalConstraints / RequiredFields

Post by ViktorV » Wed 20 May 2015 10:44

You can implement the needed functionality by yourself. For example:

Code: Select all

procedure UnRequired(DataSet: TDataSet; var ListField: TStringList);
var
  i: Integer;
begin
  for i := 0 to DataSet.Fields.Count -1 do
    if DataSet.Fields[i].Required then begin
      ListField.Add(DataSet.Fields[i].FieldName);
      DataSet.Fields[i].Required := False;
    end;
end;

procedure Required(DataSet: TDataSet; ListField: TStringList);
var
  i: Integer;
begin
  for i := 0 to ListField.Count -1 do
      DataSet.FieldByName(ListField[i]).Required := True;
end;

var
  ListRequiredField: TStringList;
begin
  ListRequiredField := TStringList.Create;
  BDataSet.LocalUpdate := True;
  UnRequired(BDataSet, ListRequiredField);
  BDataSet.Insert;
  BDataSet['ID'] := EDataSet['ID'];  
  BDataSet.Post;
  BDataSet.RefreshRecord;
  Required(BDataSet, ListRequiredField);
  BDataSet.LocalUpdate := False;
end;

marcodor
Posts: 29
Joined: Tue 29 Oct 2013 20:30

Re: LocalConstraints / RequiredFields

Post by marcodor » Thu 21 May 2015 17:33

Hello Victor,
Thanks for spending time, coding this sample.
I implemented this using TList, where elements points directly to TField to speedup access.
Anyway, please consider, maybe it make sense to implement it in your library.
Or something like DisableConstraints/EnableConstraints
Thanks!

ViktorV
Devart Team
Posts: 3168
Joined: Wed 30 Jul 2014 07:16

Re: LocalConstraints / RequiredFields

Post by ViktorV » Fri 22 May 2015 10:17

If you want us to implement the feature, please post it at our user voice forum: http://devart.uservoice.com/forums/1046 ... e-firebird If the suggestion gets a lot of votes, we will consider the possibility to implement it.

Post Reply