- Код: Выделить всё
- TDataSetErrorEvent = procedure(DataSet: TDataSet; E: EDatabaseError; var DataAction: TDataAction) of object;
и класс TDataSet, от которого наследуется TSQLQuery со следующими объявлениями:
- Код: Выделить всё
- TDataSet = class(TComponent)
 private
 FOnDeleteError: TDataSetErrorEvent;
 ...
 public
 property OnDeleteError: TDataSetErrorEvent read FOnDeleteError write FOnDeleteError;
 ...
Мне нужно установить свой обработчик события OnDeleteError. для этого я делаю следующее (поскольку процедурный тип объявлен как of object, делаю его членом класса):
- Код: Выделить всё
- {$mode objfpc}{$H+}
 Uses ibconnection, sqldb, sysutils, db;
 type
 TMyErrorEvent = class
 public
 procedure DataSetError (DataSet: TDataSet; E: EDatabaseError; var DataAction: TDataAction);
 end;
 ...
 procedure TMyErrorEvent.DataSetError (DataSet: TDataSet; E: EDatabaseError; var DataAction: TDataAction);
 begin
 DataAction := daAbort; // for test only
 end;
 var
 SQLQuery : TSQLQuery;
 ...
 begin
 ...
 with TMyErrorEvent.Create do SQLQuery.OnDeleteError := DataSetError; // тут ошибка компиляции
 ...
 end;
... и получаю ошибку компиляции:
Free Pascal Compiler version 2.2.0 [2007/11/30] for x86_64
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Linux for x86-64
Compiling test.pas
test.pas(103,40) Error: Wrong number of parameters specified for call to "DataSetError"
Пожалуйста, подскажите, как правильно написать, а то я уже весь трафик извел на чтение книг на эту тему.


