Страница 1 из 1

Обработчик события procedure of object не компилируется

СообщениеДобавлено: 26.06.2008 10:39:02
mdimich
В модуле db.sql объявлен тип:
Код: Выделить всё
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"


Пожалуйста, подскажите, как правильно написать, а то я уже весь трафик извел на чтение книг на эту тему.

Re: Обработчик события procedure of object не компилируется

СообщениеДобавлено: 26.06.2008 10:57:05
Bupyc
так надо писать

with TMyErrorEvent.Create do SQLQuery.OnDeleteError := @DataSetError;

Re: Обработчик события procedure of object не компилируется

СообщениеДобавлено: 26.06.2008 11:08:21
mdimich
Спасибо!
А я догадывался, откуда у меня руки растут.....