RAD Studio
ContentsIndex
PreviousUpNext
Executing an Update Statement

The ExecSQL method for an update component manually applies updates for the current record. Unlike the Apply method, ExecSQL does not bind parameters in the SQL statement before executing it. The ExecSQL method is most often called from within a handler for the OnUpdateRecord event (when using the BDE) or the BeforeUpdateRecord event (when using a client dataset). 

Because ExecSQL does not bind parameter values, it is used primarily when the update object's SQL statements do not include parameters. You can use Apply instead, even when there are no parameters, but ExecSQL is more efficient because it does not check for parameters. 

If the SQL statements include parameters, you can still call ExecSQL, but only after explicitly binding parameters. If you are using the BDE to cache updates, you can explicitly bind parameters by setting the update object's DataSet property and then calling its SetParams method. When using a client dataset to cache updates, you must supply parameters to the underlying query object maintained by TUpdateSQL. For information on how to do this, see Using an update component's Query property.

Warning: If you use the dataset's UpdateObject property to associate dataset and update object, ExecSQL is called automatically. In that case, do not call ExecSQL in an OnUpdateRecord or BeforeUpdateRecord event handler as this will result in a second attempt to apply the current record's update.
OnUpdateRecord and BeforeUpdateRecord event handlers indicate the type of update that needs to be applied with an UpdateKind parameter of type TUpdateKind. You must pass this parameter to the ExecSQL method to indicate which update SQL statement to use. The following code illustrates this using a BeforeUpdateRecord event handler:

procedure TForm1.BDEClientDataSet1BeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet;
          DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean);
begin
  with UpdateSQL1 do
  begin
    DatabaseName := (SourceDS as TDBDataSet).DatabaseName;
    SessionName := (SourceDS as TDBDataSet).SessionName;
    ExecSQL(UpdateKind);
    Applied := True;
  end;
end;

 

void __fastcall TForm1::BDEClientDataSet1BeforeUpdateRecord(TObject *Sender,
   TDataSet *SourceDS, TCustomClientDataSet *DeltaDS, TUpdateKind UpdateKind, bool &Applied)
{
  TDBDataSet *pSrcDS = dynamic_cast<TDBDataSet *>(SourceDS);
  UpdateSQL1->DatabaseName = pSrcDS->DatabaseName;
  UpdateSQL1->SessionName = pSrcDS->SessionName;
  UpdateSQL1->ExecSQL(UpdateKind);
  Applied = true;
}

If an exception is raised during the execution of the update program, execution continues in the OnUpdateError event, if it is defined.

Name 
Description 
The Query property of an update component provides access to the query components that implement its DeleteSQL, InsertSQL, and ModifySQL statements. In most applications, there is no need to access these query components directly: you can use the DeleteSQL, InsertSQL, and ModifySQL properties to specify the statements these queries execute, and execute them by calling the update object's Apply or ExecSQL method. There are times, however, when you may need to directly manipulate the query component. In particular, the Query property is useful when you want to supply your own values for parameters in the SQL... more 
Copyright(C) 2008 CodeGear(TM). All Rights Reserved.
What do you think about this topic? Send feedback!