Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2011, 17:24   #1
vso
Новичок
Джуниор
 
Регистрация: 07.07.2011
Сообщений: 2
По умолчанию Как найти след от удаления записи

Добрый день!!!!!

есть TADODataSet, у него свойство LockType = ltBatchOptimistic

У TADODataSet есть свойство UpdateStatus, которое может принимать сл. значения:
  1. usUnmodified
  2. usModified
  3. usInserted
  4. usDeleted

если происходит редактирование или добавление записей, то статус принимает соответствующее значение.

Но если я удаляю запись, то статус не присваивается, хотя из грида она уходит.

Подскажите как узнать что была удалена запись????
vso вне форума Ответить с цитированием
Старый 07.07.2011, 23:43   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

После удаления записи DataSet содержит указатель уже на другую запись, которая не удалялась, или никакую, если записей больше нет. Как тут статутс может быть usDeleted?

Но побороться можно. Посмотреть здесь.
Прик вне форума Ответить с цитированием
Старый 08.07.2011, 09:52   #3
vso
Новичок
Джуниор
 
Регистрация: 07.07.2011
Сообщений: 2
По умолчанию

Спасибо, за отклик...

сразу возникает два вопроса:
  1. Зачем в UpdateStatus предусмотрено состояние usDeleted???? и как достичь этого стояния?
  2. Проверяю состояние чтобы сохранение данных было не мгновенным. Как тогда сохранять изменения если запись удалена???? Чтобы она удалилась не только в моем датасете, но и на сервере????

Хорошо, посоветуйте хоть как сделать!!!!

Почему я решил использовать LockType = ltBatchOptimistic, т.к. у меня информация редактируется в DBMEMO, DBTextEdit и в DBGrid. В Гриде выводятся несколько записей вместе с одной записью выведенной в МЕМО и ТекстЕдите, они туда попадают из разных датасетов, связанных по мастер-детеил. Как известно отредактированная информация сохранится в базе только при переходе курсора на следующую запись.

Таким образом если нам надо отредактировать только информацию в МЕМО или ТектЕдите она не будет никогда сохранена, т.к. переход к другой записи не предусмотрен.

Я и решил сделать кнопку "Сохранить" и по состоянии датасетов давать возможность сохранять данные. Но как выяснилось информация о том что запись была удалена нигде не отражается и опять полностью данные нет возможности сохранять.

Отсюда вопрос, поделитесь опытом как решить эту проблему????

Последний раз редактировалось Stilet; 11.07.2011 в 10:54.
vso вне форума Ответить с цитированием
Старый 17.07.2011, 07:52   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

У любого DataSet есть событие BeforeDelete, которое случается перед удалением записи. В нем можно узнать какая запись будет удалена.

Для того чтобы держать все под контролем при разработке приложений работающих с БД, не используют непосредственное редактирование информации. Т.е. не применяют компоненты из закладки Data Controls (кроме DBGrid и только для отображения данных).

Кнопка "Сохранить" первый шаг на правильной дороге.

Цитата:
сразу возникает два вопроса:
1. Зачем в UpdateStatus предусмотрено состояние usDeleted????
2. и как достичь этого стояния?
Проверяю состояние чтобы сохранение данных было не мгновенным.
3. Как тогда сохранять изменения если запись удалена????
4. Чтобы она удалилась не только в моем датасете, но и на сервере????
Ну, вопросов здесь не два, а все четыре.
Первый можно сразу перадресовать разработчикам.
На второй, ответ: "никак".
На третий нужно спросить в ответ: "а сами то поняли чего спросили?"
На четвертый ответ такой: датасет - это лишь посредник между БД и приложением и его данные - это и есть данные в БД (на сервере).
Отсюда вывод: "удаление данных в датасете" не что иное как удаление данных в БД.

Последний раз редактировалось Прик; 17.07.2011 в 08:03.
Прик вне форума Ответить с цитированием
Старый 18.07.2011, 09:33   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
1. Зачем в UpdateStatus предусмотрено состояние usDeleted????
Виимо поэтому.
В раннее время существовали СУБД не выполняющие физического удаления записей по команде delete, а устанавливающие некий признак удаления И при желании такие записи можно было увидеть и даже ОТМЕНИТЬ удаление по прошествии любого сколь угодно большого времени А точнее до тех пор пока не был явным образом запущен сборщик мусора данной СУБД. Теперь же сбор мусора (удаленные записи) осуществляется автоматически по решению самой СУБД.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение файла после изменения/удаления записи (Delphi) Kurai Помощь студентам 2 15.05.2010 23:21
Очищение DateTimePicker после удаления записи Droid БД в Delphi 9 21.10.2009 15:57
[C++] Программа-справочник, Функция удаления записи из файла umnik90 Общие вопросы C/C++ 1 11.06.2009 16:07
Отмена удаления записи Хитрец БД в Delphi 2 12.04.2009 23:14
как вытащить значение из sql запроса след.вида Tanuska___:) БД в Delphi 3 29.09.2008 15:54