trying to use BeforePost event

Discussion of open issues, suggestions and bugs regarding MyDAC (Data Access Components for MySQL) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
Willo
Posts: 34
Joined: Thu 24 Aug 2006 18:29

trying to use BeforePost event

Post by Willo » Fri 07 Dec 2012 21:29

Hi;

im trying to log record changes using Myquery's BeforePost event; but i cant make it to work, the event never gets executed.

Here's my code on the event:

Code: Select all

procedure TFpagos.MyqinsertaBeforePost(DataSet: TDataSet);
var
     x : integer;
     xname : string;

     xvalnuevo : string;
     xvalviejo : string;
begin
     for x:=0 to (MyQinserta.Fields.Count-1) do
     begin
          xname := MyQinserta.Fields.Fields[x].FullName;

          if (MyQinserta.Fields.Fields[x].DataType = ftdatetime) or (MyQinserta.Fields.Fields[x].DataType = ftdate) or (MyQinserta.Fields.Fields[x].DataType = fttime) then
          begin
               if MyQinserta.Fieldbyname(xname).OldValue = null then
                    xvalviejo := ''
               else
                    xvalviejo := Datetimetostr(MyQinserta.Fieldbyname(xname).OldValue);

               if MyQinserta.Fieldbyname(xname).NewValue = null then
                    xvalnuevo := ''
               else
                    xvalnuevo := Datetimetostr(MyQinserta.Fieldbyname(xname).NewValue);
          end;


          if (MyQinserta.Fields.Fields[x].DataType = ftsmallint) or (MyQinserta.Fields.Fields[x].DataType = ftinteger) or (MyQinserta.Fields.Fields[x].DataType = ftlargeint) then
          begin
               if MyQinserta.Fieldbyname(xname).OldValue = null then
                    xvalviejo := ''
               else
                    xvalviejo := Inttostr(MyQinserta.Fieldbyname(xname).OldValue);

               if MyQinserta.Fieldbyname(xname).NewValue = null then
                    xvalnuevo := ''
               else
                    xvalnuevo := Inttostr(MyQinserta.Fieldbyname(xname).NewValue);
          end;

          if (MyQinserta.Fields.Fields[x].DataType = ftfloat) or (MyQinserta.Fields.Fields[x].DataType = ftcurrency) then
          begin
               if MyQinserta.Fieldbyname(xname).OldValue = null then
                    xvalviejo := ''
               else
                    xvalviejo := Floattostr(MyQinserta.Fieldbyname(xname).OldValue);

               if MyQinserta.Fieldbyname(xname).NewValue = null then
                    xvalnuevo := ''
               else
                    xvalnuevo := Floattostr(MyQinserta.Fieldbyname(xname).NewValue);
          end;

          if (MyQinserta.Fields.Fields[x].DataType = ftstring) then
          begin
               if MyQinserta.Fieldbyname(xname).OldValue = null then
                    xvalviejo := ''
               else
                    xvalviejo := MyQinserta.Fieldbyname(xname).OldValue;

               if MyQinserta.Fieldbyname(xname).NewValue = null then
                    xvalnuevo := ''
               else
                    xvalnuevo := MyQinserta.Fieldbyname(xname).NewValue;
          end;

          If MyQuery1.Fieldbyname(xname).NewValue <> MyQuery1.Fieldbyname(xname).oldValue Then
               Dm.Bitacora('Editor de registros','Cambio dato de pago '+xname+'  va:'+xvalviejo+'  nv:'+xvalnuevo,'Record :'+inttostr(MyQuery1.RecNo),MyQuery1.SQL.text);
     end;
end;


Im tried with INSERT and UPDATE.

Im using delphi 7 and Mydac 7.1.4

TIA

AndreyZ

Re: trying to use BeforePost event

Post by AndreyZ » Mon 10 Dec 2012 09:52

Hello,

The BeforePost event occurs before an application posts changes for the active record to the database. BeforePost is triggered when an application calls the Post method. Here is a code example that demonstrates usage of the BeforePost event.

Code: Select all

procedure TForm1.Button1Click(Sender: TObject);
begin
  MyQuery1.SQL.Text := 'select * from tablename';
  MyQuery1.Open;
  MyQuery1.Edit;
  MyQuery1.FieldByName('stringfieldname').AsString := 'test';
  MyQuery1.Post;
end;

procedure TForm1.MyQuery1BeforePost(DataSet: TDataSet);
begin
  ShowMessage('BeforePost');
end;
For more information, please read the BeforePost event description in the Delphi help.

Post Reply