|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
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; 1. объясните, пожалуйста, что делает данная процедура после слова begin обычным языком? 2. Какие есть настройки CheckBox которые могут влиять на данный баг? 3. В SQL пытался написать сменить метод удаления данных, проверять не отмеченную галочку, а наличие данных, написал строку вида ...if (GUEST_EXTENT = null) then... - пишет ошибка синтаксиса... странно, вроде верно же всё? |
#2
|
|||
|
|||
Эту проблему решил, но возникло вот что: если на чекбоксе уже существующей записи кликнуть два раза (выкл-вкл), а затем сохранить форму - то появится вторая такая же запись...
Как это обычно решается? |
#3
|
|||
|
|||
Существуют примеры правильной реализации такой функции - удаление и добавление записей-строк в таблицу БД по нажатию в строке галочки ?
|
#4
|
|||
|
|||
а какой тебе пример нужен???
Код:
If qryGuestList.FieldByName('GUEST_EXTENT').AsBoolean Then qDelete.ExecSQL Else qUpdate.ExecSQL; Соотв., еще надо поправить SQL в соотв. запросе. Можно сделать параметрический и протсо назначить параметры. Оба запроса должны отрабатывать по уникальному ключу, в этом случае даже если записи нет, то все будет нормально (в смысле, не будет сообщ. об ошибках и не испортишь другие записи). |
#5
|
|||
|
|||
Спасибо за предложение, но...
Я редактирую крупный готовый проект, поэтому не могу сказать почему, но все функции удаления и обновления для данной таблицы записаны прямо в хранимой процедуре БД, в программе по этому поводу нет ничего, кроме указания на эту процедуру. Поэтому редактирую в том же ключе архитектуры, что и оригинал - поэтому не хочу создавать такие вот конструкции в программе. Тот код из первого постинга только мешал - удалил полностью. Улучшил код хранимой процедуры и всё работает. Решено, тему можно удалить. |