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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2011, 14:25   #1
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию DBGrid и обновление данных в БД

Здравствуйте, у меня есть БД Access, подключено все через ADOTAble.
На форме1 у меня происходит добавление данных в БД через кнопку "обновить", на ней же можно и отредактировать эти данные.
И эти же данные появляются в DBgrid, где заполняюся данные по этим записям, только другие поля.
Запись через DBgride у меня стоит такая:
Код:
procedure TForm4.DBGrid2Exit(Sender: TObject);    
begin
     if DBGrid2.EditorMode or DBGrid2.DataSource.DataSet.Modified then
     begin
       DBGrid2.DataSource.DataSet.Post;
       Form1.ADOTable13.Close;
       Form1.ADOTable13.Open;        
     end;
end;
Все работает и "Обновить" и процедура DBgrid. Но проблема в том, что, если данные сначала отредактировать в DBgrid, а потом, например, изменив что-то через форму1 и нажав "обновить", выскакивает ошибка: Невозможно найти строку для обновления, данные были изменены ранее.
Не могу понять, что ему не нравится.... Подскажите, пожалуйста, замучала эта ошибка уже))
a_n_n_a вне форума Ответить с цитированием
Старый 02.08.2011, 18:02   #2
KAMENYKA
Пользователь
 
Аватар для KAMENYKA
 
Регистрация: 06.12.2007
Сообщений: 87
По умолчанию

Потому что ты меняешь одну запись не сохраняя ее(+ не обновляя ДатаСет в твоем случае «ADOTable13») пытаешься сохранить другую, но ДатаСет отлично знает что у него уже неактуальные данные поэтому и не сохраняет новую строку!(Как смог объяснил учитель из меня плохой).

Варианты решений:

1. Прежде чем добавлять другие данные сохраняй предыдущие, проверяй состояние ДатаСета if ADOTable13.State = dsEdit then и постиш запись которую изменила или делаешь что душе угодно.
2. Второй вариант получше у своего ДатаСета(ADOTable13) в свойстве LockType ставиш ltBatchOptimistic. Потом работаешь скока угодно со своим ДатаСетом, а когда надо все сохранить пишешь ADOTable13.UpdateBatch();
KAMENYKA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DBGrid запись и обновление a_n_n_a БД в Delphi 0 09.04.2011 06:03
Обновление данных в DBGrid и фокус строки. Serval БД в Delphi 10 05.06.2009 11:50
Обновление списка данных без потери данных в переменных VaBank БД в Delphi 13 03.06.2009 10:47
перенос данных из DBGrid в DBGrid KingSize БД в Delphi 17 24.04.2009 09:30
Обновление DBGrid + ADOQuery Demonk БД в Delphi 11 04.02.2009 13:42