Форум — Ответы ( К темам )
? | 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 вставляет данные без проблем. Неужто так просто как раньше не получится? ------------------------------------------------------------------------------- Люди не пишите длинных писем — у чекистов болят глаза :-) |