Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с Delete в EhLib 
V
    Опции темы
AriX
Дата 11.5.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



База - Access, метод доступа - ADO.
Версия EhLib - 4.0.7, DBGridEh - 4.0.21.
Связка ADODataDriver + MemTableEh + DBGridEh.

Свойство ADODataDriver.DeleteSQL заполнено правильно.
Включен режим CachedUpdates.

Работа по изменению данных ведется в DBGridEh, потом вызывается метод ApplyUpdates.
Все работает, кроме Delete. При удалении данных из таблицы после вызова ApplyUpdates вылетает ошибка:
"Can not delete Record if it present in DeletedList"
и данные не удаляются из базы...

Голову сломал, но разобраться не могу :(

Заранее спасибо!
PM MAIL   Вверх
AriX
Дата 14.5.2007, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Чтож, сам и отвечу.
Лезем в модуль MemTableDataEh.pas.

Ищем процедуру FreeDeletedRecords. Если она такого вида:
Код
procedure TRecordsListEh.FreeDeletedRecords;
var
  i: Integer;
begin
  for i := 0 to FDeletedList.Count-1 do
  begin
    TMemoryRecordEh(FDeletedList[i]).Free;
  end;
  FDeletedList.Clear;
end;

Меняем на это:
Код
procedure TRecordsListEh.FreeDeletedRecords;
var
  i: Integer;
  Rec: TObject;
begin
  for i := 0 to FDeletedList.Count-1 do
  begin
    Rec := FDeletedList[i];
    FDeletedList[i] := nil;
    Rec.Free;
//    TMemoryRecordEh(FDeletedList[i]).Free;
  end;
  FDeletedList.Clear;
end;

Т.е. запись Rec в списке на удаление DeletedList нужно выставить в nil, т.к. при Rec.Free вызывается:
Код
procedure TRecordsListEh.CheckForDestroyRecord(Rec: TMemoryRecordEh);
begin
  if FDeletedList.IndexOf(Rec) >= 0 then
    raise Exception.Create('Can not delete Record if it present in DeletedList.');
...

где проверяется, есть ли запись в списке, и если есть - вызываем эксепшн.

Может кому-то пригодится.
ЗЫ: В версии EhLib 4.1 (MemTableDataEh.pas 4.1.28) эта ошибка исправлена.

Это сообщение отредактировал(а) AriX - 14.5.2007, 17:03
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


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

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

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


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

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


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

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


 




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


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

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