- Код: Выделить всё
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"
Пожалуйста, подскажите, как правильно написать, а то я уже весь трафик извел на чтение книг на эту тему.