Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как отследить изменения в DBGrid, Тривиальный вопрос 
V
    Опции темы
php
Дата 23.10.2006, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.2.2003

Репутация: нет
Всего: 3



Как отследить, что произошли изменения в DBGrid добавление или редактирование записи..
--------------------
Джедаи не пройдут..
PM MAIL   Вверх
skyboy
Дата 23.10.2006, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



можно установить обработчик на событие onUpdateData для DataAccess - компонента или на OnDataChange для него же, которое(событие) поинформативнее будет.
PM MAIL   Вверх
Akella
Дата 23.10.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(skyboy @  23.10.2006,  08:17 Найти цитируемый пост)
для DataAccess - компонента или на OnDataChange

да, для OnDataChange лучше всего, т.к. при изменении активной строки тоже это событие срабатывает, только комопнента - TDataSource.
PM MAIL   Вверх
php
Дата 23.10.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.2.2003

Репутация: нет
Всего: 3



Да я делаю это для TDataSource на событии OnDataChange так:

Код

if (DataSet.UpdateStatus = usModified) then ShowMessage('Changed');


Но сообщение это всё время выскакивает как я пытаюсь снова нажать 
на изменённую запись, как сделать чтобы это событие срабатывало один раз ??
--------------------
Джедаи не пройдут..
PM MAIL   Вверх
skyboy
Дата 23.10.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Цитата(php @  23.10.2006,  12:03 Найти цитируемый пост)
как сделать чтобы это событие срабатывало один раз ?? 

не вызвать вывод окошка - ты убираешь фокус из грида, и при возврате в него дейтсвительно вызываешь изменение. ну, или делаешь вид, что изменяешь. если тебе надо для отладки, то выводи в заголовок формы информацию. а то это как выдача сообщения про начало перерисовки, что само провоцирует новую перерисовку и опять - выдачу сообщения, перерисовку, сообщения и т.д. и т.п.
PM MAIL   Вверх
php
Дата 23.10.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.2.2003

Репутация: нет
Всего: 3



Неа сейчас применил логическую переменную для отслеживания изменений
та же беда.


--------------------
Джедаи не пройдут..
PM MAIL   Вверх
skyboy
Дата 23.10.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



php, в смысле - "та же беда"?
PM MAIL   Вверх
php
Дата 24.10.2006, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.2.2003

Репутация: нет
Всего: 3



>skyboy 
Ну вот смотри допустим изменяем запись, событие возникает, логическая переменная
меняется на True, всё нормально, затем допустим нажимаем кнопку сохранить переменной есессно 
присваиваем False тк. данные сохранены, но если просто снова нажать мышью в DBGrid уже на ранее
изменённую запись переменной опять присваивается True т.е событие возникает снова и снова при нажатии
на эту запись, ну нормально нет ?? Мне достаточно и однократного возникновения события.
Как пофиксить это дело ??
--------------------
Джедаи не пройдут..
PM MAIL   Вверх
SergeBS
Дата 24.10.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



php
Дока для TDataSource:
Цитата

Description
Write an OnDataChange event handler to take specific actions when a field in the current record has been edited and an application moves from one field or record to another in a dataset associated with a data source component. For example, methods that can trigger this event include the Next or Prior methods for the dataset.
Data-aware controls notify a data source of a data change because of:
          - Scrolling to a new record.
          - Modifications to a field’s data.
The Field parameter is nil if more than one of the fields changed simultaneously, such as when moving from one record to another. Otherwise, Field indicates the edited field.
OnDataChange is especially useful in applications that must synchronize data display in controls that are not data aware.

Все логично. А тебе надо применять:
TDataset.Modified - изменена
TDataset.State in [dsEdit, dsInsert] - редактируется, свежесоздана 

PM MAIL   Вверх
php
Дата 30.10.2006, 05:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.2.2003

Репутация: нет
Всего: 3



Да действительно то, что нужно. Спасибо SergeBS !
--------------------
Джедаи не пройдут..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0855 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.