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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2018, 23:51   #1
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
Восклицание AV при использовании EhLib

Всем привет!

При выборе в TDBLookupComboboxEh пункта запускается обработчик OnChange, который должен загружать в другой TDBLookupComboboxEh список по SQL-запросу:
Код:
begin
  with AccessData.qrySecond, SQL do
  begin
    Clear;
    dblkcbbehSecond.KeyValue := Null;
    if dblkcbbehFirst.KeyValue <> Null then
    begin
      Text := 'SELECT * FROM Second WHERE First='+IntToStr(dblkcbbFirst.KeyValue);
      Open;
    end;
  end;
end;
Для обычного TDBLookupCombobox всё работает чётко (только там вместо OnChange используется OnClick). А вот при использовании TDBLookupComboboxEh вылетает AV во время закрытия программы.
В чём может быть косяк?
p.s. Delphi 7 + MS Access

Исключение вылетает только при закрытии. При срабатывании (в т.ч. многократном) OnChange всё работает как надо, список подгружается.

В принципе, можно оставить только with + Text := ... + Open (т.е. убрать Clear, ... := Null и if), всё равно будет ошибка...
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru

Последний раз редактировалось 7in; 03.05.2018 в 00:00.
7in вне форума Ответить с цитированием
Старый 03.05.2018, 02:18   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
А вот при использовании TDBLookupComboboxEh вылетает AV во время закрытия программы.
Ищите ошибку в своей программе!

Цитата:
Сообщение от 7in Посмотреть сообщение
Для обычного TDBLookupCombobox всё работает чётко
Если "чётко" означает что программа не выдает сообщение об AV, то это ровным счётом ничего не значит.
Ещё раз повторю для всех начинающих программистов:
Присутствие при выполнении программы сообщения об AV является точным указанием, что в программе есть ошибка работы с памятью.
Отсутствие такого сообщения НЕ ЯВЛЯЕТСЯ подтверждением отсутствия ошибок работы с памятью! От слова совсем.
northener вне форума Ответить с цитированием
Старый 03.05.2018, 06:43   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Какой-то из объектов ужу разрушен в момент срабатывания обработчика? Попробуй обнулить OnChange комбобокса в OnClоse формы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 03.05.2018 в 06:50.
Аватар вне форума Ответить с цитированием
Старый 03.05.2018, 07:28   #4
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Попробуй обнулить OnChange комбобокса в OnClоse формы
Форма с комбобоксом вызывается через другую (главную) форму, так что к моменту закрытия программы, эта форма уже закрыла и ошибок не вызвала...
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 03.05.2018, 07:37   #5
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Ищите ошибку в своей программе!
Да там негде быть ошибке, разве что в свойствах TDBLookupComboboxEh. Но я выставил там лишь ListSource, ListField и KeyField. Всё остальное осталось по дефолту.

До OnChange выполняется лишь открытие формы:
Код:
  Hide;
  FormList.ShowModal;
  Show;
И в самой форме OnShow:
Код:
  try
    with AccessData do
    begin
      conMain.Open;
      tblMain.Open;
      tblExtra.Open;
    end;
  except
    on E: Exception do
    begin
      ShowMessage('DB Error!');
      Close;
    end;
  end;
Всё!
После OnChange кода нет вообще.

К тому же, повторюсь, когда комбобокс был без Eh, ошибок не выводилось...
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru

Последний раз редактировалось 7in; 03.05.2018 в 07:40.
7in вне форума Ответить с цитированием
Старый 03.05.2018, 07:41   #6
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Добавил в OnClose:
Код:
  AccessData.conMain.Close;
Ошибка пропала...
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 04.05.2018, 02:16   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
Да там негде быть ошибке
А она есть.

Цитата:
Сообщение от 7in Посмотреть сообщение
Ошибка пропала
Сообщение об AV перестало выводиться. А ошибка... ХЗ. то ли пропала, то ли нет.
northener вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при использовании << dimon_snake Общие вопросы C/C++ 3 08.02.2016 21:09
Глюки EhLib при обновлении в отдельном потоке tarakan1983 Компоненты Delphi 4 24.08.2015 15:36
Ошибка при использовании vfprintf в dll при stdout CHERTS Visual C++ 1 25.10.2013 15:18
При установке Ehlib не находится файл DBGridEhGrouping.pas Ангелина_ БД в Delphi 2 10.06.2013 13:46
Ошибка при использовании CreateProcess Sadowod Общие вопросы Delphi 7 20.08.2010 17:43