Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Редактирование записи БД, Помогите сдклать выбор 
:(
    Опции темы
Jakob
Дата 12.4.2009, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Посоветуйте спецы, как лучше организовать редактирование записи БД

Имеем подключение к BD и таблицу Table
Определенные поля (3 шт) записи выводятся в Grid через источник TableSrc (TDataSource)
Полная запись имеет порядка 20 полей
Редактирование записи будет производиться в модальной форме

В голове рродилась идея просто редактировать данные с помощью компонет TDBEdit, TDBLookupComboBox, etc...
привязанных к Table через TableSrc

Все как бы хорошо, только на модальной форме есть пара кнопок "Ok" и "Cancel"
Раз копоненты редактирования напрямую привязаны к таблице - то изменение данных в модальной форме сразу отображаются в Grid-е

С "Ok" все понятно.... smile

Возникает вопрос как обработать кнопку "Cancel" - т.е. вернуть данные измененные пользователем в первоначальный вид

1) Сделать RollBack - закрывает BD. Приходиится переоткрывать вручную.

2) Сделать RollBackRetaining данные данной транзакции отменяются. Но. При редактировании в модельном окне данные отобразились в Grid. И после закрытия модального окна омеют измененный вид в Grid-е. Хотя в БД изменения не провелись (отменились)

     Эти два метода конечно можно доработать - но для малых объемов. Переоткрывать постоянно большую таблицу, да еще и по сети считаю не корректно...

3) Пришел в голову пока писал первые два. Может открывать отдельную транзакцию для редактирования с ее собственными Commit и RollBack
 
4) Самый трудоемкий в сфере организации. Он описан неодднократно в книгах и в интернете
 - на модальную форму ложаться стандартные елементы редактирования
 - перед открытием окна редактирования выполняется команда Table.Edit
 - элементам редактирования присваиваются значания полей записи
 - по кнопке "Ок" загоняем измененные данные в поля записи и выполняем Table.Post
 - по кнопке "Cancel" просто выполняем Table.Cancel

В этом методе все наверное будет работать и все прозрачно и понятно. Но вот как быть в таких случаях с полями связки Master-Detail

Может у кого есть мысли по этому поводу и советы по существу
Буду признателен

Заранее спасибо
Валицкий Яков Германович
ICQ: 60289599


PM MAIL   Вверх
Akella
Дата 12.4.2009, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Цитата
Возникает вопрос как обработать кнопку "Cancel" - т.е. вернуть данные измененные пользователем в первоначальный вид


примерно так:
Код

...
  with tPrep do begin
     Edit;
     fmPrepEdit:=TfmPrepEdit.Create(self);
     fmPrepEdit.Caption:='Изменить препарат';

     if fmPrepEdit.Showmodal=mrOK then
      begin

        Post;
        FlushBuffers;


      end else  begin


        Cancel;

      end;
       FreeAndNil(fmPrepEdit);
  end;//with
....


Это сообщение отредактировал(а) Akella - 12.4.2009, 21:32
PM MAIL   Вверх
Akella
Дата 13.4.2009, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Цитата(Jakob @  12.4.2009,  19:48 Найти цитируемый пост)
4) Самый трудоемкий в сфере организации. Он описан неодднократно в книгах и в интернете

 - перед открытием окна редактирования выполняется команда Table.Edit

 - элементам редактирования присваиваются значания полей записи
 - по кнопке "Ок" загоняем измененные данные в поля записи и выполняем Table.Post
 - по кнопке "Cancel" просто выполняем Table.Cancel


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

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.0651 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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