Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TDataSet [D7, XP]


Alex7 ©   (2006-04-23 16:36:00) 

Уважаемые мастера!  Вопрос такой:

Есть много таблиц: Table1, ......TableN.
В каждой таблице свой обработчик, обращающийся
к одной и той же процедуре "Del".

procedure Table1DeleteError(DataSet: TDataSet; E: EDatabaseError;
 var Action: TDataAction);
begin
Del( );
end;

Хотелось бы заменить множество этих процедур
на что-то более изящное. Интуитивно чувствую,
что может быть один обработчик вроде
procedure DataSetDeleteError, но как это
сделать не соображу. Спасибо.


Anatoly Podgoretsky   (2006-04-24 09:13:00) [1]

jack128 ©   (24.04.06 01:43) [13]
Отмечаем все 15 сразу и устанавливаем или пишем обработчик.


Alex7   (2006-04-24 08:14:00) [2]

> jack128 ©
Большое спасибо. Вот теперь
я понял (и сделал) в чем дело.
Вся беда в том, что на так наз.
"соплю" (в пункте 2) я как-то
не обращал внимания.
Теперь код принял нормальный
вид. Еще раз спасибо.


Германн   (2006-04-24 02:58:00) [3]

Смешно, ей-богу!
Два Мастера Дельфи не могут совместить свои ответы, чтобы получилочь единое целое!


jack128   (2006-04-24 01:43:00) [4]

Alex7   (23.04.06 19:38) [9]
еще раз с самого начала.

Пусть ты кинул на форму 15 таблиц на форму.  Обработчики еще не написал.  

Пункт 1:
Выбираешь Table1, переходишь на закладку Events, дважды кликаешь мышью на событии OnDeleteError. в коде появляется заготовка:

procedure Table1DeleteError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
Del( ); // это ты вписывшь сам.
end;

Пункт2:
теперь на форме выделяешь Table2, перходишшь на закладку Events в инспекторе объектов. выделяешь OnDeleteError, кликаешь на соплю (давишь такую кнопочку с равностронним треугольником, смотрящим своей вершиной вниз),(с)  и из списка выбераешь Table1DeleteError.  

Теперь повторяешь пункт 2 для оставшихся 13 таблиц.


sniknik   (2006-04-24 00:37:00) [5]

> Если бы был какой-то общий TDataSet,
> тогда ясно.
а посмотри на передаваемые в события параметры... которые сам же привел.


Alex7   (2006-04-23 20:04:00) [6]

Наверное, я ошибаюсь, считая,
что событие надо перехватывать
там, где оно происходит.
В данном случае в TTable.
(В свое время я пытался перехватить
OnDeleteError в форме с использованием
конструкции Try...Except - не вышло).
Может быть поэтому мы не понимаем
друг друга.


Johnmen   (2006-04-23 19:45:00) [7]

Честно говоря, я опять перестал понимать...


Alex7   (2006-04-23 19:38:00) [8]

Прошу прощения, но какой объект выбрать?
У меня модуль Данных. Там 15  TTable и
15 TDataSource. И все. Для каждого
свое событие.
Если бы был какой-то общий TDataSet,
тогда ясно. Но его нет (и компонента такого нет)


Alex7   (2006-04-23 19:19:00) [9]

Спасибо. Сейчас попробую.


Johnmen   (2006-04-23 19:09:00) [10]

В Инспекторе объектов переходишь к закладке Events.
Для нужного события свешиваешь соплю (давишь такую кнопочку с равностронним треугольником, смотрящим своей вершиной вниз), выбираешь из списка нужный обработчик.
Естественно, хоть один подходящий уже должен существовать...


Alex7   (2006-04-23 19:02:00) [11]

Тогда я не понял, как это сделать.
Если можно, какой-нибудь пример.


Johnmen   (2006-04-23 18:52:00) [12]

Ну я же сказал, что всем событиям назначить один обработчик!
А у тебя на каждое событие свой обработчик.


Alex7   (2006-04-23 18:37:00) [13]

> Я ничего не понял...
                     !
procedure Table1DeleteError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
Del( );
end;
                     !
procedure Table2DeleteError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
Del( );
end;
........................................
                     !  
procedure TableNDeleteError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
Del( );
end;

Вот так получается. А как упростить?


Johnmen   (2006-04-23 18:18:00) [14]

Я ничего не понял...


Alex7   (2006-04-23 17:35:00) [15]

Так я и делаю. Но событие для каждой таблицы свое.
Поэтому приходится из каждого OnDeleteError обращаться
к одному и тому же обработчику. А это громоздко.


Johnmen   (2006-04-23 17:11:00) [16]

У всех д.б. один и тот же обработчик. Его и укажи для всех событий.


Наверх

Титульная страница Поиск, карта сайта Написать письмо