Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.07.2011, 18:41
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
Вопрос CheckBox не выключается

Здравствуйте!

Есть табличка DevExpress TcxGrid со строками и столбцами, всё как положено, всё работает.
В табличке один столбец является boolean и отображается как CheckBox.
Табличка и процедуры бд работают просто - если строка таблицы отмечена галочкой и содержит данные - записывается в БД,
если галочку снимаешь - из БД удаляется вся строка-запись (при нажатии кнопки подтверждения в форме).
Если галочки нет, то при вводе в любую другую колонку данных - галочка в данной строке включается.

Проблема же в том, что если галочка стоит, то снять никак не получается... наводишь на галочку, клацаешь мышкой, галочка пропадает... но стоит сделать малейшее движение - сменить строку, нажать на кнопку, закрыть форму, любое действие - галочка опять восстанавливается!

В БД всё нормально, проверял неоднократно разными способами. Процедура и qry только одни.
Возможно баг в этой процедуре, которую я и не очень то понимаю, то есть всё написанное очевидно, но как-то не хватает что-ли логической связки (if then или case)
Код:
procedure TDM2.qryGuestListBeforePost(DataSet: TDataSet);
begin
 StartTran;
 With qryGuestList do begin
  FN('IS_ONLINE').AsBoolean:=not FieldByNAme('GUEST_EXTENT').IsNull;
 end;
end;
IS_ONLINE - и есть тот самый CheckBox

1. объясните, пожалуйста, что делает данная процедура после слова begin обычным языком?
2. Какие есть настройки CheckBox которые могут влиять на данный баг?
3. В SQL пытался написать сменить метод удаления данных, проверять не отмеченную галочку, а наличие данных, написал строку вида ...if (GUEST_EXTENT = null) then... - пишет ошибка синтаксиса... странно, вроде верно же всё?
Ответить с цитированием
  #2  
Старый 16.07.2011, 21:01
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Эту проблему решил, но возникло вот что: если на чекбоксе уже существующей записи кликнуть два раза (выкл-вкл), а затем сохранить форму - то появится вторая такая же запись...

Как это обычно решается?
Ответить с цитированием
  #3  
Старый 16.07.2011, 21:03
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Существуют примеры правильной реализации такой функции - удаление и добавление записей-строк в таблицу БД по нажатию в строке галочки ?
Ответить с цитированием
  #4  
Старый 16.07.2011, 21:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

а какой тебе пример нужен???

Код:
If qryGuestList.FieldByName('GUEST_EXTENT').AsBoolean 
 Then qDelete.ExecSQL
  Else qUpdate.ExecSQL;

Соотв., еще надо поправить SQL в соотв. запросе. Можно сделать параметрический и протсо назначить параметры. Оба запроса должны отрабатывать по уникальному ключу, в этом случае даже если записи нет, то все будет нормально (в смысле, не будет сообщ. об ошибках и не испортишь другие записи).
Ответить с цитированием
  #5  
Старый 16.07.2011, 21:51
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Спасибо за предложение, но...

Я редактирую крупный готовый проект, поэтому не могу сказать почему, но все функции удаления и обновления для данной таблицы записаны прямо в хранимой процедуре БД, в программе по этому поводу нет ничего, кроме указания на эту процедуру. Поэтому редактирую в том же ключе архитектуры, что и оригинал - поэтому не хочу создавать такие вот конструкции в программе. Тот код из первого постинга только мешал - удалил полностью. Улучшил код хранимой процедуры и всё работает.

Решено, тему можно удалить.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:12.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter