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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2015, 18:15   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию Не пустая ячейка в DBGrid

Суть:
Имеется связка FireBird + Лазарус. Схема такая IBConnection --> SQLTransaction --> SQLQuery --> DataSource --> DBGrid. Все это работает - строки показываются, добавляются и т.д. Хочется такой возможности как прямое редактирование полей в DBGrid. Но есть такая беда - в определенной колонке должны обязательно пробиваться данные, если юзер оставил пустое поле, то его следует восстановить первоначальным значением. Добавление записи происходит по отдельному батону и там естественно я не дам юзеру пустые поля.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 27.01.2015, 18:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Сразу пердуперждЫю что такого не делал никогда но:
1) Попробовать поюзать OnEditingDone для определения что редактирование окончено, и сравнить с первоначальным значением
2) Поюзать OnBeforeEdit OnAfterEdit.
Это что бы попробовал прежде всего я.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2015, 19:38   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

OnBeforeEdit - запомнить начальные значения полей
OnBeforePost - контроль на пустоту и забивание при необходимости умолчаниями при вставке или начальными при корректировке
Еще у каждого поля есть OnSetText - контроль ввода в визуальном компоненте
Ну и пустое поле двоякий смысл - NULL и например '' для символьного - это разное
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 27.01.2015 в 19:40.
Аватар вне форума Ответить с цитированием
Старый 27.01.2015, 20:12   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

BeforeEdit в SQLQuery? В моем DBGride нет OnBeforeEdit, или это свойство можно настраивать только программно? У меня Лазарус и я подозреваю, что тут наверно проявляются эти самые отличия.
Есть еще сильно подозрительные OnColEnter и OnColExit может это и есть аналоги?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 27.01.2015 в 20:15.
Utkin вне форума Ответить с цитированием
Старый 27.01.2015, 20:33   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
SQLQuery
Ой, не обратил внимание. Не пользуюсь и не знал, что нет этих событий, в делфи тоже. В нормальных датасетах они есть
Цитата:
OnColEnter и OnColExit
А если пользоватеь вообще не вошел в ячейку, а при вставке там NULL? Не пойдут эти события

PS

Есть они в паблике SQLQuery - BeforePost, BeforeEdit только нужно в рунтайме присваивать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 27.01.2015 в 20:41.
Аватар вне форума Ответить с цитированием
Старый 27.01.2015, 20:38   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
А если пользоватеь вообще не вошел в ячейку, а при вставке там NULL?
Я вставляю запись программно без всяких там навигаторов. Кнопка Insert работает, но если ничего не нажимать изменения не происходят.
Цитата:
Есть они в паблике SQLQuery - BeforePost, BeforeEdit только нужно в рунтайме присваивать
Не можно вроде не в рантайме, я просто в DBgride не нашел и попер искать по цепочке. Нашел в Квери . Нашел как ставить требуемое значение - но он зараза вылетает только при попытке отправки данных в базу. И прервать нет возможности. Просто не дает внести изменения.
В принципе можно поставить на отлов исключения. Но опять вопрос - как узнать какую ячейку будет править юзер?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 27.01.2015 в 20:46.
Utkin вне форума Ответить с цитированием
Старый 27.01.2015, 20:45   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вот прочитал - TSQLQuery is a unidirectional dataset - однонапрвленный датасет, я так понимаю непосредственное редактирование в гриде не прокатит. Наверно и в лазарусе. Только SQL-командами. Нужно менять датасет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 27.01.2015 в 20:47.
Аватар вне форума Ответить с цитированием
Старый 27.01.2015, 20:53   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Э-э-э... Може DBGrid фтопку?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2015, 21:06   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Не, нашел выход! Я повесил невидимый DbEdit и натравил его на нужную мне колонку. Экспериментально доказано, что его значение в точности совпадает нужным полем . Теперь нужно отслеживать результат изменения в DBEdit. Решение рядом, осталось только чуть-чуть...
Цитата:
OnColEnter и OnColExit
А вот с ними засада - они срабатывают только при переходе на другую колонку...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 27.01.2015, 21:09   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Я бы использовал IBDataSet и прописывал запросы на обновление в InsertSQL и ModifySQL

Цитата:
Все это работает - строки показываются, добавляются и т.д.
Сильно смущает добавляются и т.д. Без запроса на обновление что ли?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 27.01.2015 в 21:19.
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пустая ячейка не воспринимается как пустая SvetlanaF Microsoft Office Excel 3 24.02.2014 05:34
DBGrid конкретная ячейка Niklan БД в Delphi 6 24.01.2013 07:31
следующая не пустая ячейка, при условии Skitt Microsoft Office Excel 1 04.05.2012 23:38
Цвет ячейка и DBGrid M@riy@ Компоненты Delphi 3 14.11.2010 20:35
подскажите плз. пустая ячейка как интерпретируется? zander Microsoft Office Excel 2 02.08.2009 22:18