Форум — Ответы     (  К темам )
 ?  S_mole: IBase компоненты. Поля имеющие DEFAULT остаются пустыми (08-03-2003 23:27:46)
Имеем некую таблицу на 3-м диалекте:
CREATE TABLE "SHOPS_WORK"
(
"NAMB_SHOP" SMALLINT NOT NULL,
"TIME_START" TIME DEFAULT '00.00',
"TIME_END" TIME DEFAULT '00.00',
"DAY_OFF" VARCHAR(12) DEFAULT 'БЕЗ ВЫХОДНЫХ',
"MANAGER" VARCHAR(15) NOT NULL,
);
Проверяем в IBExpert — все работает исключительно.
Затем ваяем формочку на 6-м Билдере. Кидаем туда следующие :
IBDatabase, IBTransaction, IBTable, DataSourse, DBGrid
все между собой связываем, запускаем — таблицу отображает нормально.
Вводим данные в первое и последнее поле и получаем головную боль.
Поля имеющие DEFAULT остаются пустыми.
Пробовал ставить NOT NULL — ругается "поле такое-то не может быть пустым!"
Где ж оно пустое — там же есть DEFAULT!!!!!!!!!
 Владимир (10-03-2003 16:47:21)
Insert into "SHOPS_WORK" ("NAMB_SHOP","TIME_START","TIME_END","DAY_OFF","MANAGER")
values (1,'00:00','00:00','БЕЗ ВЫХОДНЫХ','Manager')


или

Insert into "SHOPS_WORK" ("NAMB_SHOP","MANAGER") values (1,'Manager')
 S_mole (10-03-2003 23:22:15)
Ув. Владимир!
Огромное спасибо за подсказку, она несомненно мне поможет.
Но хотелось уточнить некоторые детали...
Скрипт

Insert into "SHOPS_WORK" ("NAMB_SHOP","TIME_START","TIME_END","DAY_OFF","MANAGER")
values (1,'00:00','00:00','БЕЗ ВЫХОДНЫХ','Manager')
или
Insert into "SHOPS_WORK" ("NAMB_SHOP","MANAGER") values (1,'Manager')

необходимо где-то прописать. Интересно где...
Неужто недостаточно того что прописано при создании таблицы.
Если я все правильно понимаю то DEFAULT — тот же триггер, так вот создаю триггер (правда для другой таблицы):

CREATE TRIGGER NEW_SALESS FOR BUSINESS
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE R_PRICE DOUBLE PRECISION;
BEGIN
execute procedure RET_PRICE(NEW.namb_shop, NEW.goods)
returning_values :r_price ;
NEW.price=:r_price;
END

отлично работает. Проблем нет. А поле имеющее значение по умолчанию, в этой же таблице, остается пустым. Странно однако.
Кстати, предвидя ответ "Кончай этот гимор с IBase — компонентами, переходи на FIB+ !!!" имею следующий вопрос:
Скачал FIB+ 4.8.0, установил, купил книгу "Мир InterBase" — начинаю...
Кидаю на форму:
pFIBDatabase1, pFIBTransaction1, pFIBDataSet1, DataSource1, DBGrid1.
Связывать компоненты между собой — не тут то было.
В свойстве DataSourse компонента pFIBDataSet1 хочу прописать DataSource1 — не пущает... Рехнусь скоро. Смотрим книгу — все тоже самое...
То ли лыжи не едут, то ли одно из двух...
Надеюсь, лучшие умы Всемирной Паутины, помогут разобраться.
 Владимир (11-03-2003 14:35:30)
Но хотелось уточнить некоторые детали...
>>Скрипт

>>Insert into "SHOPS_WORK" ("NAMB_SHOP","TIME_START","TIME_END","DAY_OFF","MANAGER")
>>values (1,'00:00','00:00','БЕЗ ВЫХОДНЫХ','Manager')
>>или
>>Insert into "SHOPS_WORK" ("NAMB_SHOP","MANAGER") values (1,'Manager')

>>необходимо где-то прописать. Интересно где...

....

Как где прописать — там где Вы вставляете данные в таблицу,
в том компоненте, например в свойстве SQL для компонента TQuery
или в SelectSQL (для FIBPlus) для компонента TFIBDataSet
А как Вы еще вставляете данные в таблицу, через компонент TTable ?
Тогда (если используете TTable)
myTable->Insert();
MyTable->FieldByName("NAMB_SHOP")->Value = 10;
MyTable->FieldByName("MANAGER")->Value = "Manager10";
myTable->Post();
// и поля "TIME_START","TIME_END","DAY_OFF" получат значения по умолчанию
 S_mole (11-03-2003 23:44:13)
Ув. Владимир!
Очень рад что Вы согласились продолжить этот диспут.
Ваш ответ мне не совсем понятен, возможно из-за того что я не совсем полно изложил суть проблемы. Хотя не исключен и другой вариант :-)))
Итак:
Не так давно, создал базу на IBServer v 5.x.x. Пару простеньких таблиц — так, для эксперемента. Таблицы, кстати сказать, пустые. Далее, в Былдере кидаю на форму следующие компоненты: ТDataSourse, ТTable, DBGrid. Связываю,запускаю — работает! То есть, все что необходимо — это заполнение пользователем базы данных. Отображается Grid и в нем пользователь вводит данные. Никаких запросов, ничего, только заполнение. И заполнялось, и значения по умолчанию подставлялись, одним словом — то что хотелось. Причем, прошу заметить, без каких либо скриптов и обработчиков событий.
Затем задача усложняется — необходимо тоже самое сделать на IBServer v 6.5.x и 3-м диалекте. Базу переписал, в IBExpert проверил — все ок. С Билдером начались проблемы. Вышеперечисленные компоненты заругались — не понимаем, мол, 3-й диалект. Ладно. Беру компоненты IBDatabase, IBTransaction, IBTable, DataSourse, DBGrid, DBNavigator связываю, запускаю — таблицу отображает. В Grid-е ввожу данные — нормально, в базе запоминаются. Но если я оставляю поля имеющие DEFAULT пустыми — криком кричит "поле не может быть пустым !". В тоже время триггер работающий по BEFORE INSERT вставляет данные без проблем.
Неужто так просто как раньше не получится?
-------------------------------------------------------------------------------
Люди не пишите длинных писем — у чекистов болят глаза :-)