powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TDataSource.OnDataChange
17 сообщений из 17, страница 1 из 1
TDataSource.OnDataChange
    #32324682
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

D5sp1+ado patch

TDataChangeEvent = procedure(Sender: TObject; Field: TField)

в хелпе написано:
Data-aware controls notify a data source of a data change because of:

Scrolling to a new record.
Modifications to a field’s data.

но ещё он происходит, когда меняется TDataSet.Fields[].Visible
причём можно было бы ожидать, что Field: TField должно быть в этом случае не nil, всё-таки одно поле меняем. Нет, там nil :-(. Смотрел исходники, но ничего, что могло бы указывать на обход этого не заметил

Что делать?
кроме:
1 сохранять/обнулять/восстанавливать OnDataChange в обработчике
2 TDataSet.OnScroll/TDBGrid.OnCellClick/TDBGrid.OnKeyUp
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324714
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем проблема то, чего нужно чтобы было и что делается вообще?

-- Tygra's --
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324724
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть грид и TEdit
по первому нужно ходить, а во втором отображать текущую запись

TDBEdit не предлагать:-)
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324730
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы отображать, и TDBText хватило бы...
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324745
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему не предлагать?

DataSet.OnScroll

-- Tygra's --
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324751
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
//есть грид и TEdit
//по первому нужно ходить, а во втором отображать текущую запись

это упрощённо, просто не используется грид для редактирования, оно всё вынесено на отдельную панель

поэтому нужна возможность ходить по гриду, а показывать в панели
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324757
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то мне это опять напоминает бодягу про DBAware vs NonDBAware controls.
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324760
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
несколько ошибся-TDataSet.AfterScroll
его не предлагать потому, что это евент датасета

по определённым причинам(слишком много объяснять) датасеты трогаться не должны
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324765
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 pkarklin

вопрос конкретный, а "бодяга" призвана убедить в том, что можно сделать совсем по другому

надо заставить заработать это, а не переделывать всё
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324767
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, датасеты трогаться не должны, а навигация по связанным контролам выполняться будет? Так не бывает!
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324775
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иногда лучше переделать все - читай сделать правильно - чем заставить это (ни это конкретно) работать.
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324894
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Малиновский Владимир

TDataSource.OnDataChange подходит В ДАННОМ СЛУЧАЕ лучше, чем TDataSet.AfterScroll, потому, что есть TDataSet.DisableControls

2 pkarklin

согласен, что иногда лучше переделать всё правильно, хотя это общие слова
а как правильно В ДАННОМ СЛУЧАЕ?
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324901
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то ты замутил. Датасет имеет задизабленные контролс, а ты по связанному с ним гриду ректирование выполняешь?
Хоть бы описал задачу поподробнее, вдаваясь, так сказать, в интимные подробности...
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324904
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как тут обойти, что генериться компонентами дельфи. Задачу бы по-подробней описал.
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324924
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задача обычная(для меня)

упрощённо:
1 на форме лежит грид и панель с не дб визуализаторами
2 ходим по гриду, данные из него надо отображать в этой панели
3 редактирования в гриде нет ибо его квери ридонли
4 нажимаем на кнопку добавить/изменить
5 редактируем едиты
6 кнопка ОК записывает всё в базу через хранимку

раньше всё работало на TDBGrid.OnCellClick+OnKeyUp, но это не позволяло ловить передвижение полосой прокрутки, вот я решил переделать

AfterScroll не работает ещё и при .Open квери, только при реальном скролле

остался только OnDataChange, но с ним возникли проблемы из-за возможно глюка/фичи VCL, которая этот евент выдаёт не только на скролл и изменение данных, как в хелпе, но ещё и на изменение поля из FieldList. При смене Query.Fields[].Visibile тоже евентится, при чём ...Field : TField) в евенте=nil, хотя логичнее равенство изменяемому полю.

Спасибо всем, уже решилось за счёт проверки FieldList.Updated, т.е пришлось написать так

with DBG.DataSource.DataSet do
begin
if ( State <> dsBrowse ) or assigned ( Field ) or TFieldList2 ( FieldList ).Updated then exit ;
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32324988
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай квери не readonly и придет счастте

-- Tygra's --
...
Рейтинг: 0 / 0
TDataSource.OnDataChange
    #32325008
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 tygra

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

всякие BeforePost и т.д.

бр-р-р...
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TDataSource.OnDataChange
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]