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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2015, 14:26   #1
S_007
Форумчанин
 
Регистрация: 22.11.2014
Сообщений: 109
По умолчанию Полтергейст DbgridEh - Delphi

На форме есть таблица DBGridEh подключенная к базе Access через ADOConection, ADOTable, DataSource, и Checkbox подключенный к этой же базе к одной из ячеек, на нем сидит событие OnClick, по нажатию на него происходят какие-то изменения...
Так вот сам вопрос - если я удаляю (к примеру) одну из строк из таблицы, строка удаляется, но при этом программа какого-то дьявола заходит в обработчик события OnClick и выполняет все что там написано... Почему так происходит? Я предполагал, что событие OnClick выполняется строго по нажатию на этот контрол, это глюк Delphi 2010 или я чего-то еще не знаю?
S_007 вне форума Ответить с цитированием
Старый 28.07.2015, 14:29   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Какой такой Чекбокс ? Как прицеплен? Покажите духовную связь рядового Чекбокса с полем БД. Или это особенный чекбокс? Мало информации для ответа.
Цитата:
какого-то дьявола
Демон Максвелла, не иначе.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 28.07.2015, 15:24   #3
S_007
Форумчанин
 
Регистрация: 22.11.2014
Сообщений: 109
По умолчанию

DBCheckbox, к тому-же DataSource что и таблица, только к своей ячейке из этой таблицы, прицеплен, чтоб в каждой строке из этой таблицы он сохраняет свои значения, false или true, но при нажатии на него он еще и делает недоступными некоторые ячейки из таблицы, это вся его задача...
S_007 вне форума Ответить с цитированием
Старый 28.07.2015, 15:36   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,775
По умолчанию

Цитата:
Сообщение от S_007 Посмотреть сообщение
Я предполагал, что событие OnClick выполняется строго по нажатию на этот контрол, это глюк Delphi 2010 или я чего-то еще не знаю?
Это целиком зависит от автора компонента, от его видения. Единого правила нет. Даже в обычных, самых простых компонентах VCL OnClick выполняется по-разному: где-то выполняется (TCheckBox), где-то нет (TTabSheet).
Vapaamies вне форума Ответить с цитированием
Старый 28.07.2015, 15:42   #5
S_007
Форумчанин
 
Регистрация: 22.11.2014
Сообщений: 109
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Это целиком зависит от автора компонента, от его видения. Единого правила нет. Даже в обычных, самых простых компонентах VCL OnClick выполняется по-разному: где-то выполняется (TCheckBox), где-то нет (TTabSheet).
Так тогда как предугадать поведение программы, если программист перестает контролировать события? Должна же быть какая-то логика, получается что какое-то действие может быть или не быть как вздумается программе?
S_007 вне форума Ответить с цитированием
Старый 28.07.2015, 16:37   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

ВСЯ задача DBCheckBox предусмотренная программистом-разработчиком
отображать и МЕНЯТЬ значение связанного(указанного) поля текущей записи набора данных. А как и каким образом ...

Цитата:
одну из строк из таблицы, строка удаляется,
=> меняется текущая запись.
=> Надо менять отображение, А как и каким образом ....
Да хоть имитацией щелчка.
Цитата:
но при этом программа какого-то дьявола заходит в обработчик события OnClick
НЕ НАДО ЗАДАВАТЬ в обработчике по сути дела поля данных действий НЕ СВЯЗАННЫХ с текущей записью.(см. начало поста).
Иначе не было этой темы.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 28.07.2015, 16:41   #7
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,775
По умолчанию

Цитата:
Сообщение от S_007 Посмотреть сообщение
Должна же быть какая-то логика, получается что какое-то действие может быть или не быть как вздумается программе?
Логика заключается в разделении визуального и невизуального кода, то есть пакетные действия над данными не должны делаться внутри обработчика OnClick. Выше уже написали, только другими словами.
Vapaamies вне форума Ответить с цитированием
Старый 28.07.2015, 17:28   #8
S_007
Форумчанин
 
Регистрация: 22.11.2014
Сообщений: 109
По умолчанию

Спасибо Всем! Кое что понял но не все... Если более простым языком, как избежать этого? У меня в обработчике OnClick есть только отключение таких-же контролов, т.е. когда нажимаю на DBCheckBox1 то в обработчике OnClick - DBCheckBox2.Enabled:=false; DBCheckBox3.Enabled:=false; и все, но они тоже связанны с базой, просто мне непонятна связь, удаляет строку из таблицы датасэт, событие OnClick реагирует на нажатие, кто делает связь между удалением и щелчком мыши, в команде удаления строки нет даже имитации нажатия, вот это не могу понять
S_007 вне форума Ответить с цитированием
Старый 28.07.2015, 19:47   #9
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,775
По умолчанию

Цитата:
Сообщение от S_007 Посмотреть сообщение
кто делает связь между удалением и щелчком мыши, в команде удаления строки нет даже имитации нажатия, вот это не могу понять
Это нужно компилировать с отладочными версиями модулей, входить в них отладчиком по F7 и смотреть, что где. Наверняка где-то отправляются и обрабатываются сообщения типа CM_XXXX -- внутренние сообщения VCL.
Vapaamies вне форума Ответить с цитированием
Старый 28.07.2015, 20:42   #10
S_007
Форумчанин
 
Регистрация: 22.11.2014
Сообщений: 109
По умолчанию

Vapaamies, Спасибо! Вы прояснили мне ситуацию, но если Вам не трудно, из своего личного опыта, из-за чего может такое происходить, где я мог накосячить, что не учел, на будущее хочу это понять, в основном коде ничего подозрительного не нашел, просто напрягает то, что начинаются в программе происходить движения, которые я не заказывал
S_007 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DBGridEh SearchPanel - Delphi S_007 Общие вопросы Delphi 2 26.07.2015 17:26
копирование данных текущей строки DBGridEh В другjq DBGridEh ТипичныйСтудент Помощь студентам 1 06.06.2013 21:19
полтергейст - устранить последствия трояна Jackkkk Безопасность, Шифрование 3 28.04.2012 01:41
Полный полтергейст, неправильно работает кеш в httpd Nickolay911 PHP 1 06.08.2011 18:07
Полтергейст в поточных переменных termsl Общие вопросы Delphi 12 30.08.2010 15:36