Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемы со вставкой пустых значений [D6, IB6.x]


Страницы:   1 2

Рустем ©   (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 - это для общего случая, а если хочешь с умолчаниями, пиши ручками


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо