TDataSetBeforeInsert (Delphi)

From RAD Studio Code Examples
Jump to: navigation, search

Description

This example uses the BeforeInsert event to do data validation. If the StrToInt function raises an exception, the edit control's contents are set to a valid value so that the assignment to the INTEGER field in the dataset will succeed. Continuing after the exception causes a '0' to be placed in the PORTA field.

DataSet design

This example requires a ClientDataSet, a DBGrid, a DataSource, and a DBNavigator. Name the ClientDataSet as CDS. Set the DataSet property in the DataSource to CDS and name that DataSource as DS. Set the DataSource in the DBNavigator to DS the DataSource in the DBGrid to DS. Right-click CDS and select the Fields Editor, then right-click in the Field Editor form and create two fields by selecting "new field".

In the field configuration window, set the name to HOST; the Component value will automatically be set to CDSHOST. Set the field type to String. In the field configuration window for the second field, set the name to PORTA; the Component value will automatically be set to CDSPORTA. Set the field type to Integer. The file used to load CDS must have an attribute name of HOST with an attribute type of String and an attribute name of PORTA with an attribute type of Integer. Add DB, DBCtrls, Grids, DBGrids, and DBClient to the uses clause.

Code

{$IFNDEF UNICODE}
uses SwSystem;
{$ENDIF}

procedure TForm1.Button3Click(Sender: TObject);
begin
  CDS.Insert;
  CDS.FieldByName('PORTA').AsInteger := StrToInt(Edit1.Text);
  CDS.Post;
end;

procedure TForm1.CDSBeforeInsert(DataSet: TDataSet);
begin
  try
  { Make sure the edit field can be converted to Integer--
   this will raise an exception if it cannot. }
    StrToInt(Edit1.Text);
  except
    Edit1.Text := '0';
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
{$IFDEF UNICODE}
  CDS.LoadFromFile(GetCurrentDir + '\CDS.XML');
{$ELSE}
  CDS.LoadFromFile(gsAppPath + 'CDS.XML');
{$ENDIF}
end;

Uses