![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы со вставкой пустых значений [D6, IB6.x]
Рустем © (2004-01-10 10:43:00)
Здравствуйте !
Даже не представлял, что могут быть такие грабли...
Работаю IBX/Delphi6/FB1.5
Как при вставке новой записи в Грид получить в строку значения полей по умолчанию, определенные в базе ?
Или хотя бы как заставить приложение/сервер их туда подставить, если пользователь не ввел значение для поля, которое создано как Not Null, но для которого определено значение по умолчанию ?
Назначание для объекта поля свойства
AutoGenerateValue := arDefault;
ни к чему не приводит.
Единственное, что смог выяснить, так это то, что вставка с незаполненным обязательным полем будет возможна только в том случае, если:
1. Свойство объекта поля Required установить в False;
2. Из текста SQL-запроса, сформированного в компоненте IBUpdateSQL.InsertSQL, удалить упоминание о вставке в данное поле и удалить параметр, который задает для него значение.
Вот тогда сервер подставит для такого поля значение по умолчанию.
Но это просто жуть какая-то ! Мне что, нужно каждый раз анализировать ввод пользователя и строить запрос Insert "вручную" ?! Не может быть !
Для чего тогда вообще существует свойство InsertSQL ?!
И даже в этом случае "на повестке дня" остается вопрос о получении во все поля их значений по умолчанию при вставке пользователем новой записи.
Мне кажется, что решение где-то на поверхности, но я его не нашел :((
Будьте любезны, подскажите как правильно сделать сие !
Огромное спасибо !
kaif (2004-01-10 18:34:00) [21]
Рекомендую просто добавить триггер на INSERT к таблице в базе и прописать там что-то вроде
IF (NEW.MY_FIELD IS NULL) THEN
NEW.MY_FIELD = MY_DEFAULT_VALUE;
Кстати, рекомендую такой триггер и на UPDATE тоже поставить (хотя от задачи зависит).
Рустем (2004-01-10 18:03:00) [22]
Благодарю за ответ.
Desdechado (2004-01-10 11:39:00) [23]
1. насколько я знаю, значение, определенной в БД по умолчанию, нельзя достать ДО записи в БД (т.е. при вставке в локальный кэш на рабочей станции до commit)
2. required - это для полей not null, без разицы, есть ли для них умолчание
3. имхо, InsertSQL - это для общего случая, а если хочешь с умолчаниями, пиши ручками