Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 27 апр 2024, 17:11

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: удаление записей из базы
СообщениеДобавлено: 29 ноя 2012, 12:26 
Не в сети

Зарегистрирован: 06 фев 2012, 11:17
Сообщений: 7
Здравствуйте
Кто-нибудь проверял, как удаляются строки из БД при работе с БД через следующие компоненты: TDBGridEh->TDataSource-> TMemTableEh->TDataSetDriverEh->TADOTable.
Мой код, который выполняется при нажатии на кнопу «удалить строку» выглядит вот так:

MemTableEh.Delete;

На первый взгляд все хорошо и прекрасно. Выделенная строка удалилась в сетке, что и требовалось. Но если мы не выполняя больше никаких действий закроем программу, а потом опять запустим, то строка возвратится на своё место. То есть, по сути, строка у нас не удалилась.
Если я два раза подряд выполняю код для строки, то удаляется последняя строка в таблице записей, а не та, что выделена.
Чтобы разобраться с проблемой обратился к руководству разработчика. Но там об этом ни слова. Единственное что нашел это о работе с компонентом в режиме ‘with datadriver’ и отложенные обновления (CachedUpdates). В соответствии с руководством настроил в MemTableEh.СachedUpdates:=False, чтобы все изменения передавались сразу после Post’a. Хотя всё это к операции Delete по моему разумению отношения никакого не имеет.
Обратился я к готовому примеру Demo1. В этой программке на первой вкладке в контекстном меню для выделенной строки есть функция Delete. С помощью неё я удалил несколько строк в таблице, потом закрыл программу и снова запустил её. И увидел, что вообще никакая строка не удалилась.
Может мне кто-нибудь помочь разобраться, что я делаю не так?
Спасибо за внимание!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: удаление записей из базы
СообщениеДобавлено: 30 ноя 2012, 11:24 
Не в сети
Администратор

Зарегистрирован: 19 дек 2011, 17:40
Сообщений: 837
Добрый день.

Свойство MemTableEh.СachedUpdates как раз и влияет но то, когда передавать все изменения (удаления, вставки, обновления) из MemTableEh в DataDriver.
Чтобы MemTableEh передавал каждое изменения в DataDriver сразу после его выполнения установите MemTableEh.СachedUpdates = False.

Best regards
Admin.

_________________
Best regards
Admin


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: удаление записей из базы
СообщениеДобавлено: 30 ноя 2012, 11:57 
Не в сети

Зарегистрирован: 06 фев 2012, 11:17
Сообщений: 7
Я и пишу, что всё сделал как в руководстве (установил MemTableEh.СachedUpdates = False). Но операция удаления всё равно не передается. Т.е. строки в БД не удаляются, или если удаляются то не так как мне надо.
Сейчас нашёл следующее решение: с помощью метода таблицы Locate перехожу к нужной строке в Table и выполняю операцию удаления, затем заново подключаюсь к MemTableEh. Код выглядит примерно вот так:

Table1.Active:=True;
Table1.Locate('код',MemTableEh.FieldByName('Код').AsVariant,[loCaseInsensitive]);
Table1.Delete;
Table1.Active:=False;
Table1.Active:=True;
MemTableEh.Active:=False;
MemTableEh.Active:=True;

для поиска я использую ключевое поле таблицы.

Но это решение через ЖО...
думаю что есть более простое, если кто знает как, подскажите пожалуйста.


Последний раз редактировалось chernovalexandr2010 30 ноя 2012, 12:02, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: удаление записей из базы
СообщениеДобавлено: 30 ноя 2012, 16:46 
Не в сети
Администратор

Зарегистрирован: 19 дек 2011, 17:40
Сообщений: 837
Добрый день.

Пришлите Демо проект на основе стандартных DataSet'ов и таблиц на support@ehlib.com
Например ADOQuery (TADOTable) и БД MSAccess.

Best regards
Admin

_________________
Best regards
Admin


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: удаление записей из базы
СообщениеДобавлено: 04 дек 2012, 07:51 
Не в сети

Зарегистрирован: 06 фев 2012, 11:17
Сообщений: 7
на простом примере все работает нормально. не работает почему то в моем большом проекте. как только смогу выбрать из проекта только то что нужно, сразу пришлю пример.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: удаление записей из базы
СообщениеДобавлено: 07 июн 2013, 23:23 
Не в сети

Зарегистрирован: 27 апр 2013, 23:44
Сообщений: 12
chernovalexandr2010 писал(а):
на простом примере все работает нормально. не работает почему то в моем большом проекте. как только смогу выбрать из проекта только то что нужно, сразу пришлю пример.

Аналогично нашел такое решение через жо в своем проекте только переоткрытие таблицы из стандартных компонентов позволяет завершить транзакцию так что тут скорее всего то что по инету ходят версии якобы нормальных библиотек которые на этой основной функции не пашут. Хотя может разработчики чегото и не догаваривают. Но токая ситуешен не делает чести фирме. Ладно бы отрубить фишки а основную функцию сделать нормальной и безсплатной. А то я сколько раз убеждался за 17 лет кодинга на delphi стабилнее стандартных родных компонентов delphi нет. А так помню сколько глюков огреб с qr репортом. Хоть он и входил одно время в поставку.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: удаление записей из базы
СообщениеДобавлено: 08 июн 2013, 08:59 
Не в сети

Зарегистрирован: 20 дек 2011, 22:36
Сообщений: 46
Какая у Вас СУБД?
Вы пробовали отследить каким-нибудь SQL-monitor когда уходит sql команда delete в базу?
Быть может у Вас коммит транзакции происходит только при закрытии?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB