![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]У всех д.б. один и тот же обработчик. Его и укажи для всех событий.