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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2009, 18:01   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

так, ошибка НЕ связана с параметрами!
В тексте ошибки человеческим языком (по английски, правда) сказано, что вставка записей не может быть выполнена, т.к. одно из полей имеет ограничения на вводимые значения: поле ID не может быть NULL
значит нужно задать значение поля ID
только не спрашивайте меня, как это сделать — никогда не работал с автоинкрементными полями...
Да. кстати... А точно поле ID - автоинкрементное!?!

ДОБАВЛЕНО.
soleil@mmc +1
Когда писал свой пост ещё не видел Ваш ответ.
А когда я прочитал Ваш пост, просто поразился - я за малым не написал тот же оборот "английским по белому"... потом чуть его переделал.. мы что, уже и мыслим одинаково?..

Последний раз редактировалось Serge_Bliznykov; 09.10.2009 в 18:04.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.10.2009, 18:11   #12
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
там же аглицким по белому написано, что обязательное поле для констренйта не заполнено
напиши триггер для этой таблицы или объяви в компоненте генератор, который будет выставлять это самое уникальное значение

текст триггера (before insert) будет выглядеть как-то так
Код:

if :new.id is null then
:new.id = gen_id(your_genereator_name, 1)
ну или какой там у тебя путь формирования айдишника (может он составной какой-нить)
Я уже пробовал создавать триггер)
Цитата:
Да. кстати... А точно поле ID - автоинкрементное!?!
Нет, сейчас оно не автоинкриментное. Но проблема в том, что я не могу создать автоинкриментность ни через генератор, ни через триггер. Выдает ошибку при создании и предлагает откатить изменения. Неужели когда создана таблицами, то нельзя установить автоинкриментность?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 09.10.2009, 22:06   #13
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ДОБАВЛЕНО.
soleil@mmc +1
Когда писал свой пост ещё не видел Ваш ответ.
А когда я прочитал Ваш пост, просто поразился - я за малым не написал тот же оборот "английским по белому"... потом чуть его переделал.. мы что, уже и мыслим одинаково?..
да мы просто одно лицо
идеи витают в воздухе и все такое...

Цитата:
Сообщение от artemavd Посмотреть сообщение
Я уже пробовал создавать триггер)

Нет, сейчас оно не автоинкриментное. Но проблема в том, что я не могу создать автоинкриментность ни через генератор, ни через триггер. Выдает ошибку при создании и предлагает откатить изменения. Неужели когда создана таблицами, то нельзя установить автоинкриментность?
гыгы
все-таки мысль про кривое проектирование бд была верной
в ФБ/ИБ автоинкрементность реализуется исключительно в связке этих двух элементов БД - генератор + триггер (либо указание генератора на клиенте, хотя одно другому не мешает)

ну а раз чичас ничо не получается, то пример попытки создания в студию
а к нему еще потребуется полное описание всех полей таблицы и пример селекта из нее
soleil@mmc вне форума Ответить с цитированием
Старый 10.10.2009, 07:30   #14
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
ну а раз чичас ничо не получается, то пример попытки создания в студию
а к нему еще потребуется полное описание всех полей таблицы и пример селекта из нее
Во вложении схема, нарисованная через IBExpert и сама БД. Описания есть.
Вложения
Тип файла: zip Новая папка (4).zip (51.8 Кб, 7 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 10.10.2009, 09:56   #15
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

у меня не поставлен ФБ
все-таки обычного скрипта создания таблицы хватило бы
ну и самого примера создания генератора/триггера ты не привел
soleil@mmc вне форума Ответить с цитированием
Старый 10.10.2009, 10:29   #16
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,762
По умолчанию

примерно так для таблицы четверти можно генератор и триггер сделать

Код:
CREATE SEQUENCE GEN_CHETVERTY_ID; /*это создаётся генератор */

SET TERM ~ ; 

CREATE TRIGGER CHETVERTY_BI FOR CHETVERTY /*тут начинается создание триггера */
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN 
  NEW.ID = GEN_ID(GEN_CHETVERTY_ID,1);
END~
/*тут закончено создание триггера */

SET TERM ; ~

хмм там же есть в базе уже генератор с именем GEN_CHETVERTY_ID.

у кого не стоит файрбёрд

вот в общем тут таблицы из выложенной базы только без коментов
Вложения
Тип файла: txt sql.txt (3.6 Кб, 124 просмотров)

Последний раз редактировалось vovk; 11.10.2009 в 05:19.
vovk вне форума Ответить с цитированием
Старый 10.10.2009, 19:05   #17
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Может тогда пересоздать таблицы? И на этот раз сразу создать автоинкриментные поля.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.10.2009, 05:11   #18
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,762
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Может тогда пересоздать таблицы? И на этот раз сразу создать автоинкриментные поля.
Автоинкрементные поля это и есть тригер + генератор
скрипт для создания выше в моём посте.
Могу сделать скрипт на создание всей базы + генераторы + тригеры на все первичные ключи каждой таблицы,
vovk вне форума Ответить с цитированием
Старый 11.10.2009, 06:02   #19
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Могу сделать скрипт на создание всей базы + генераторы + тригеры на все первичные ключи каждой таблицы,
Если Вас не затруднит, то помогите с этим. Я потом разберусь где я ошибся. Я в долгу не останусь.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.10.2009, 10:21   #20
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,762
По умолчанию вот както так

тут таблицы
Код:
CREATE TABLE CHETVERTY (
  ID         INTEGER NOT NULL,
  CHETVERT   VARCHAR(30),
  DATASTART  DATE,
  DATAEND    DATE,
  /* Keys */
  CONSTRAINT PK_CHETVERTY
    PRIMARY KEY (ID)
);

CREATE TABLE CLASSNAME (
  ID           INTEGER NOT NULL,
  NUMBERCLASS  INTEGER,
  LETTERCLASS  VARCHAR(1),
  /* Keys */
  CONSTRAINT PK_CLASSNAME
    PRIMARY KEY (ID)
);

CREATE TABLE PREDMETY (
  ID       INTEGER NOT NULL,
  PREDMET  VARCHAR(100),
  /* Keys */
  CONSTRAINT PK_PREDMETY
    PRIMARY KEY (ID)
);

CREATE TABLE SPISOK (
  ID            INTEGER NOT NULL,
  FAMILIY       VARCHAR(30),
  IMY           VARCHAR(30),
  OTCHEST       VARCHAR(30),
  POL           VARCHAR(10),
  MESTOROGD     VARCHAR(1000),
  FIOOTCA       VARCHAR(1000),
  FIOMATERI     VARCHAR(1000),
  NACIONALNOST  VARCHAR(40),
  LETSAD        INTEGER,
  OTKUDAVIBYL   VARCHAR(1000),
  KUDAPERESHOL  VARCHAR(1000),
  ADRESPRIPOST  VARCHAR(1000),
  RODILSYGOD    INTEGER,
  RODILSYMESYC  VARCHAR(20),
  RODILSYDEN    INTEGER,
  PSIHOLOG      VARCHAR(1000),
  SOCIOLOG      VARCHAR(1000),
  PEDSOVET      VARCHAR(1000),
  HEALTHGROUP   VARCHAR(50),
  FIZGROUP      VARCHAR(50),
  RECOMENDACII  VARCHAR(1000),
  KL            INTEGER,
  /* Keys */
  CONSTRAINT PK_SPISOK
    PRIMARY KEY (ID),
  /* Foreign keys */
  CONSTRAINT FK_SPISOK_1
    FOREIGN KEY (KL)
    REFERENCES CLASSNAME(ID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
);

CREATE TABLE MARK (
  ID          INTEGER NOT NULL,
  DATAMARK    DATE,
  MARK        INTEGER,
  WITHSPISOK  INTEGER,
  ONPREDMET   INTEGER,
  ONCHETVERT  INTEGER,
  /* Keys */
  CONSTRAINT PK_MARK
    PRIMARY KEY (ID),
  /* Foreign keys */
  CONSTRAINT FK_MARK_1
    FOREIGN KEY (WITHSPISOK)
    REFERENCES SPISOK(ID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION, 
  CONSTRAINT FK_MARK_2
    FOREIGN KEY (ONPREDMET)
    REFERENCES PREDMETY(ID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION, 
  CONSTRAINT FK_MARK_3
    FOREIGN KEY (ONCHETVERT)
    REFERENCES CHETVERTY(ID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
);

CREATE TABLE REZULT (
  ID          INTEGER NOT NULL,
  DVOEK       INTEGER,
  TROEK       INTEGER,
  CHETVEROK   INTEGER,
  PYTEROK     INTEGER,
  KO          INTEGER,
  SB          INTEGER,
  KY          INTEGER,
  Y           INTEGER,
  O           INTEGER,
  CHO         INTEGER,
  PROPUSKI    INTEGER,
  IDPREDMET   INTEGER,
  IDCHETVERT  INTEGER,
  IDINFO2     INTEGER,
  /* Keys */
  CONSTRAINT PK_REZULT
    PRIMARY KEY (ID),
  /* Foreign keys */
  CONSTRAINT FK_REZULT_1
    FOREIGN KEY (IDINFO2)
    REFERENCES SPISOK(ID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION, 
  CONSTRAINT FK_REZULT_2
    FOREIGN KEY (IDCHETVERT)
    REFERENCES CHETVERTY(ID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION, 
  CONSTRAINT FK_REZULT_3
    FOREIGN KEY (IDPREDMET)
    REFERENCES PREDMETY(ID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
);

CREATE TABLE UROKI (
  ID      INTEGER NOT NULL,
  DEN     DATE,
  TEMA    VARCHAR(500),
  DOMZAD  VARCHAR(500),
  KLAS    INTEGER,
  CHETV   INTEGER,
  PREDM   INTEGER,
  /* Keys */
  CONSTRAINT PK_UROKI
    PRIMARY KEY (ID),
  /* Foreign keys */
  CONSTRAINT FK_UROKI_1
    FOREIGN KEY (KLAS)
    REFERENCES CLASSNAME(ID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION, 
  CONSTRAINT FK_UROKI_2
    FOREIGN KEY (CHETV)
    REFERENCES CHETVERTY(ID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION, 
  CONSTRAINT FK_UROKI_3
    FOREIGN KEY (PREDM)
    REFERENCES PREDMETY(ID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
);

Последний раз редактировалось vovk; 12.10.2009 в 05:35.
vovk вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FireBird Д'якон БД в Delphi 2 04.12.2008 11:15
FireBird 1.5.4 Nikola__ БД в Delphi 2 17.11.2008 14:42
Как получить ID для новой записи с использованием триггеров?(Firebird) Paul Hindenburg БД в Delphi 20 01.06.2008 16:39
Вставка записи в поле графического типа Bibigul БД в Delphi 3 10.04.2007 16:07