Форум: "Прочее";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];
ВнизПаттерн наблюдатель Найти похожие ветки
← →
картман © (2009-09-28 15:13) [0]Всем привет!
Есть фрейм с DBGrid. Входит в различные формы. Как сделать обновление всех экземпляров? Т.е. как(когда) мне добавлять их в список наблюдателей?
← →
clickmaker © (2009-09-28 15:16) [1]при создании формы
при закрытии удалять
← →
Сергей М. © (2009-09-28 15:21) [2]Подключи все гриды к одному и тому де DataSource
← →
картман © (2009-09-28 15:27) [3]
> Сергей М. © (28.09.09 15:21) [2]
не кошерно
> clickmaker © (28.09.09 15:16) [1]
Спасибо, но... как-то вот не так... а вдруг я забуду это сделать? Хотелось бы, нечто вроде:
constructor TMyObserver.Create(aSubject);
begin
aSubject.AddObserver....
end;
← →
Сергей М. © (2009-09-28 15:33) [4]
> не кошерно
Чтой-то вдруг ?
← →
картман © (2009-09-28 15:38) [5]
> Сергей М. © (28.09.09 15:33) [4]
В приложении синхронизированные телодвижения гридов будут очень неудобны для работы
← →
clickmaker © (2009-09-28 15:42) [6]constructor TMyFrame.Create(aSubject);
begin
inherited;
aSubject.AddObserver(Self);
end;
← →
Игорь Шевченко © (2009-09-28 15:42) [7]
> Есть фрейм с DBGrid. Входит в различные формы. Как сделать
> обновление всех экземпляров?
> В приложении синхронизированные телодвижения гридов будут
> очень неудобны для работы
????
← →
Сергей М. © (2009-09-28 15:43) [8]А что тогда подразумевается под "обновлением" ?
← →
картман © (2009-09-28 15:52) [9]
> clickmaker © (28.09.09 15:42) [6]
>
> constructor TMyFrame.Create(aSubject);
> begin
> inherited;
> aSubject.AddObserver(Self);
>
> end;
>
как я aSubject передам в DesignTimes?
> Игорь Шевченко © (28.09.09 15:42) [7]
логика работы с программой такая - требуется независимое положение курсора... не то, чтобы требуется - пользователю будет так удобнее
← →
Inovet © (2009-09-28 15:57) [10]> [9] картман © (28.09.09 15:52)
>
> > clickmaker © (28.09.09 15:42) [6]
> >
> > constructor TMyFrame.Create(aSubject);
> > begin
> > inherited;
> > aSubject.AddObserver(Self);
> >
> > end;
> >
>
> как я aSubject передам в DesignTimes?
>
>
> > Игорь Шевченко © (28.09.09 15:42) [7]
>
> логика работы с программой такая - требуется независимое
> положение курсора... не то, чтобы требуется - пользователю
> будет так удобнее
Разные DataSet делай
← →
Сергей М. © (2009-09-28 16:04) [11]
> требуется независимое положение курсора
Если использовать TXXXClientDataset, то можно воспользоваться функциональностью CloneCursor
← →
картман © (2009-09-28 16:17) [12]
> Сергей М. © (28.09.09 16:04) [11]
Прошу прощения, TADOClientDataSet существует в природе?
← →
Leonid Troyanovsky © (2009-09-28 16:19) [13]
> картман © (28.09.09 15:52) [9]
> Inovet © (28.09.09 15:57) [10]
> Сергей М. © (28.09.09 16:04) [11]
А пользователю, на самом деле, будет удобно?
И чего обновлять-то будем?
Паттерн, паттерн.
--
Regards, LVT.
← →
Сергей М. © (2009-09-28 16:30) [14]
> TADOClientDataSet существует в природе?
Нет.
Но существует TCustomADODataSet, у которого есть метод Clone - возможно он поможет в решении.
> Leonid Troyanovsky © (28.09.09 16:19) [13]
> пользователю, на самом деле, будет удобно?
Это надо у пользователя спросить)
ТЗ мы в глаза не видели)
← →
картман © (2009-09-28 16:38) [15]
> Сергей М. © (28.09.09 16:30) [14]
> ТЗ мы в глаза не видели)
я тоже не видел( и вряд ли когда увижу - если только в ретроспективе)
> Это надо у пользователя спросить)
спрашивал - ответ положительный)
> Но существует TCustomADODataSet, у которого есть метод Clone
> - возможно он поможет в решении.
он клонирует набор данных, со всеми атрибутами и проч.
← →
oxffff © (2009-09-28 16:42) [16]
> картман © (28.09.09 15:13)
> Всем привет!
>
> Есть фрейм с DBGrid. Входит в различные формы. Как сделать
> обновление всех экземпляров?
Взять и сделать.
← →
Сергей М. © (2009-09-28 16:45) [17]А тебе и надо клон, иначе манипуляции с курсором оригинального НД будут отражаться во всех виз.контролах, ассоциированных с оригинальным НД
← →
картман © (2009-09-28 16:58) [18]
> oxffff © (28.09.09 16:42) [16]
я не Цезарь(
> Сергей М. © (28.09.09 16:45) [17]
как мне сообщать клонам, что им пора обновить свои данные? Их надо держать в массиве, как я понимаю. Вопрос в том, как мне их в него помещать.
← →
картман © (2009-09-28 17:00) [19]
> картман © (28.09.09 16:58) [18]
> Вопрос в том, как мне их "правильнее" в него помещать.
← →
Сергей М. © (2009-09-28 17:08) [20]
> картман © (28.09.09 16:58) [18]
> как мне их в него помещать
Массив в принципе не обязателен, хотя, возможно, он и будет удобней.
Обращение примерно такое:
for i := 0 to Screen.FormCount - 1 do
if Screen.Forms[i] is TMyForm then
NextDataSet := TMyForm(Screen.Forms[i]).MyFrame.MyADODataSet;
← →
картман © (2009-09-28 17:17) [21]
> Сергей М. © (28.09.09 17:08) [20]
не шоколадно
← →
Игорь Шевченко © (2009-09-28 18:05) [22]Ты так и не сказал, что тебе нужно. Как минимум, что ты понимаешь под понятием обновление
← →
картман © (2009-09-28 18:11) [23]
> Игорь Шевченко © (28.09.09 18:05) [22]
id := DataSet.FieldByNAme("ID").AsInteger;
DataSet.Close;
DataSet.Open;
DataSet.Locate("ID", id);
← →
Сергей М. © (2009-09-28 19:43) [24]
> не шоколадно
Ну тады ублажай себя сам)
← →
картман © (2009-09-28 20:19) [25]
> Сергей М. © (28.09.09 19:43) [24]
>
>
> > не шоколадно
>
>
> Ну тады ублажай себя сам)
Спасибо.
...
Однозначно, этот форум все-таки учит)))
← →
Игорь Шевченко © (2009-09-29 00:02) [26]картман © (28.09.09 18:11) [23]
А dataset у каждого грида свой, но их надо одновременно обновить ? В одном изменили, а в других отобразить это изменение ?
В подобном варианте я бы посоветовал изменяющему модулю отправлять обычное сообщение главной форме, а та бы рассылала всем остальным. Кому надо - обработает сообщение и обновится, кому не надо - проигнорирует.
← →
test © (2009-09-29 06:33) [27]Сергей М. © (28.09.09 17:08) [20]
Игорь Шевченко © (29.09.09 00:02) [26]
Скинуть их всех на форму DataModule и перебором менять. Зачем по формам то скакать?
картман © (28.09.09 20:19) [25]
Осел может нести мешки хлеба, но дай бог переварить ему хоть одну буханку. (с)Конфуций
Ум подобен желудку важно не то, сколько туда положить, а сколько переварил. (С) Не знаю
← →
Юрий Зотов © (2009-09-29 07:16) [28]Паттерн "Наблюдатель"...
Эва... круто-то как! Правда, проблемы возникают... с написанием обыкновенного цикла... зато модно... паттерн!
:o)
И как раньше без паттернов программы писали? Непонятно. И ведь работали.
А паттерн "Наблюдатель" надо переименовать. Не может правильно работать программа, если в ней observer имеется...
:o)
← →
test © (2009-09-29 08:39) [29]Юрий Зотов © (29.09.09 07:16) [28]
А раньше наверное такое писали про классы. ))
← →
Сергей М. © (2009-09-29 08:56) [30]
> test © (29.09.09 06:33) [27]
> Зачем по формам то скакать?
Можно и не скакать.
Достаточно бродкаста, если формы верхнеуровневые.
← →
Игорь Шевченко © (2009-09-29 10:46) [31]test © (29.09.09 06:33) [27]
Фреймы с гридами на датамодуль или кого ?
← →
test © (2009-09-29 11:47) [32]Игорь Шевченко © (29.09.09 10:46) [31]
DataSet"s
← →
Игорь Шевченко © (2009-09-29 11:51) [33]test © (29.09.09 11:47) [32]
> Скинуть их всех на форму DataModule и перебором менять.
> Зачем по формам то скакать?
А смысл ?
Насколько я понял автора, инициатива обновления должно исходить от фреймов.
Впрочем, мне пофиг, автор придет, прояснит
← →
Юрий Зотов © (2009-09-29 11:58) [34]> test © (29.09.09 08:39) [29]
> А раньше наверное такое писали про классы.
Дело не классах, и не в паттернах, как таковых. И то, и другое - штука сама по себе хорошая и знать их надо, тут как раз спору нет.
Дело в том, что прежде, чем говорить о классах или паттернах, нужно освоить программирование так, чтобы не возникало вопросов типа "а когда регистрировать наблюдателя?". Нужно четко понимать, что регистрация - это всего лишь внесение в список, а уведомления - это проход по списку. И как ты ни обзывайся - наблюдателем, слушателем, паттерном или классом, но пока суть не усвоишь, толку от всех этих красивых слов не будет.
И если уж говорить о том, что было раньше, то раньше любая книжка по основам программирования начиналась с основ - с двоичной математики. Кстати, и паттерны те же были, только их так не называли, а называли проще - стандартные решения. Сейчас же встречается такое: выпускник ВУЗа знает много красивых слов, названий, технологий, аббревиатур и т.п., но работать реально не может. Потому что нетвердо владеет главным - основами.
Вот и на работе у нас был парень - аж целый доклад о паттернах сделал, но когда мне (и не мне одному) волею судеб пришлось разбираться в его коде, то восторгу не было конца. Левой рукой чешет человек правое ухо, причем постоянно. Или другой случай: предлагают соискателю спроектировать простейшую БД - так он на это берет пару дней (15 минут было бы более чем достаточно), а потом показывает чудо: ФИО юзеров у него хранятся в трех таблицах (вместо справочника и ссылок на него, естественно) - ну и другие подобные вещи (например, связку "многие ко многим" просто не знает, как выяснилось). А те же здешние тематические конфы? Слезы.
Паттерны, классы... даже великий Шумахер, прежде, чем садиться за руль "Формулы" наверняка освоил сначала обыкновенный велосипед.
← →
test © (2009-09-29 12:37) [35]Игорь Шевченко © (29.09.09 11:51) [33]
Дык и обновления там же выполнять в DataModule, вообще всю часть работы с БД туда закинуть и спокойненько обновлять. Зачем расскидывать работу с БД по всему функционалу? Отлаживать тяжело,
Автор уже не придет, ему паттерн не подсказали ))
Юрий Зотов © (29.09.09 11:58) [34]
Ну не любая, К. Боон "Паскаль для всех", Н. Вирт "Алгоритмы + структуры данных = программы". Хотя в принципе не спорю. ИМХО учат сразу на "формулах" вместо велосипедов отсюда и перекос.
← →
Игорь Шевченко © (2009-09-29 12:46) [36]test © (29.09.09 12:37) [35]
Мы говорим о разном. Я предлагаю возможное решение для случая, если необходимо обновить произвольное количество фреймов с гридами (не обязательно с гридами), вне зависимости, где находятся dataset"ы (не обязательно dataset"ы), связанные с гридами на этих фреймах.
Так как известно, что фреймы могут быть только на формах, то разумно пользоваться механизмом сообщений, то есть, заказчик обновления отсылает сообщение главной форме, а та посылает собщение всем формам - кому надо, тот обновится, кому не надо - проигнорирует.
← →
test © (2009-09-29 13:09) [37]Игорь Шевченко © (29.09.09 12:46) [36]
Я предлагаю обновить DataSet"s, на одной форме DataModule остальны автоматом будут показывать состояние DataSet"a. Где и на какой форме они находиться пусть Дельфи думает.
← →
test © (2009-09-29 13:09) [38]Игорь Шевченко © (29.09.09 12:46) [36]
Ну не люблю я внутрении сообщения делать.
← →
Игорь Шевченко © (2009-09-29 13:35) [39]test © (29.09.09 13:09) [37]
Да нефиг гадать, ждем автора
← →
картман © (2009-09-29 13:57) [40]
> Игорь Шевченко © (29.09.09 00:02) [26]
Да, именно так и сделаю.
> test © (29.09.09 06:33) [27]
наверное? надо было упомянуть, что приложение MDI
> Юрий Зотов © (29.09.09 07:16) [28]
А, если я откажусь от пузырьковой сортировки массива с мильеном эл-тов - Вы это тоже мотивируете моим неумением работать с циклами? Я хотел узнать как лучше, только и всего.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.005 c