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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2009, 05:39   #21
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,762
По умолчанию

тут генераторы и триггеры
Код:
CREATE SEQUENCE GEN_CHETVERTY_ID; 
CREATE SEQUENCE GEN_CLASSNAME_ID;
CREATE SEQUENCE GEN_MARK_ID;
CREATE SEQUENCE GEN_PREDMETY_ID;
CREATE SEQUENCE GEN_REZULT_ID;
CREATE SEQUENCE GEN_SPISOK_ID;
CREATE SEQUENCE GEN_UROKI_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~

CREATE TRIGGER CLASSNAME_BI FOR CLASSNAME 
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN 
  NEW.ID = GEN_ID(GEN_CLASSNAME_ID,1);
END~

CREATE TRIGGER MARK_BI FOR MARK 
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN 
  NEW.ID = GEN_ID(GEN_MARK_ID,1);
END~

CREATE TRIGGER PREDMETY_BI FOR PREDMETY 
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN 
  NEW.ID = GEN_ID(GEN_PREDMETY_ID,1);
END~

CREATE TRIGGER REZULT_BI FOR REZULT 
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN 
  NEW.ID = GEN_ID(GEN_REZULT_ID,1);
END~

CREATE TRIGGER SPISOK_BI FOR SPISOK 
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN 
  NEW.ID = GEN_ID(GEN_SPISOK_ID,1);
END~

CREATE TRIGGER UROKI_BI FOR UROKI 
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN 
  NEW.ID = GEN_ID(GEN_UROKI_ID,1);
END~
SET TERM ; ~
в 1 пост не влезло, таблицы просто оставил в том виде в котором были


во вложении всё вместе
Вложения
Тип файла: txt sql.txt (4.9 Кб, 116 просмотров)

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

Спасибо. А как их теперь использовать: через ibsql или как-то через IBExpert?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.10.2009, 14:52   #23
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Вопрос о создании генератора для автоинкриментного поля снимается . Наконец-то и до меня дошло как сделать надо было, а сделать нужно было так:
1. Создаем таблицу;
2. Добавляем в нее поле новое;
3. Указываем в колонке AutoInc крестик;
4. Заходим в окошко "Генератор";
5. Выбираем "Создать генератор" (можно не менять имя);
6. Идем в окошко "Триггер";
7. Выбираем "Создать триггер"
Всё. Если все сделано правильно, то в шестой строке в скобке должно быть указано имя созданного генератора. После этого все работает.
P.S. Написал для того, чтобы в будущем, вдруг кто-нибудь столкнется с этим вопросом, то ему пригодится моя информация.

Что за непонятки с запросом?
Код:
procedure TForm3.sWebLabel1Click(Sender: TObject);
begin
 Form3.pFIBQuery1.SQL.Clear;
 Form3.pFIBQuery1.SQL.Text:='INSERT INTO CHETVERTY(ID,CHETVERT,DATASTART,DATAEND) VALUES(null,:CHETVERT,:DATASTART,:DATAEND)';
 Form3.pFIBQuery1.FieldByName('CHETVERT').Value:=Form3.sLabel1.Caption;
 Form3.pFIBQuery1.FieldByName('DATASTART').Value:=Form3.sDateEdit1.Date;
 Form3.pFIBQuery1.FieldByName('DATAEND').Value:=Form3.sDateEdit2.Date;
 Form3.pFIBQuery1.ExecQuery;
end;
По идее должна вставляться запись, но этого не происходит. Пишет, что типа: "Field "CHETVERT" not found". Но такое поле есть в таблице. Поле ID - автоинкриментное.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 13.10.2009 в 17:10. Причина: Проблема
artemavd вне форума Ответить с цитированием
Старый 13.10.2009, 17:22   #24
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а какого типа это поле?
а точно кверя настроена на ту БД?
попробуй через эту кверю получить какие-нить данные
выполнить типа такого запроса
Код:
select *
from chetverty
и вывести все это в грид (кинь временно на форму)

З.Ы.: про автоинкремент - тырканье по гуёвым тулзам полезно, но больше ценится умение писать скрипты (все таки универсальнее)
soleil@mmc вне форума Ответить с цитированием
Старый 13.10.2009, 17:31   #25
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
а какого типа это поле?
VARCHAR(30)
Цитата:
а точно кверя настроена на ту БД?
Да...
Цитата:
попробуй через эту кверю получить какие-нить данные
выполнить типа такого запроса
Код:

select *
from chetverty

и вывести все это в грид (кинь временно на форму)
Выводит названия полей таблицы (она сейчас пустая). При первом нажатии на кнопку.
Цитата:
З.Ы.: про автоинкремент - тырканье по гуёвым тулзам полезно, но больше ценится умение писать скрипты (все таки универсальнее)
Учту )
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.10.2009, 17:42   #26
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,762
По умолчанию

эмм а разве надо не
Код:
.....
pFIBQuery1.ParamByName('CHETVERT').Value:='этам парм'
.......
и тп?
vovk вне форума Ответить с цитированием
Старый 13.10.2009, 17:47   #27
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Изменил, но теперь выдалась новая ошибка:
"Parameter "CHETVERT" does not exist in Form3.FIBQuery1" ???
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.10.2009, 18:19   #28
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,762
По умолчанию

только что завёл файрбёрд, создал базу, создал скриптом (который выше) таблицы и тп

запустил дельфи, создал новый проект, накидал компонентов, подключился,
скопировал
Код:
Form3.pFIBQuery1.SQL.Clear;
 Form3.pFIBQuery1.SQL.Text:='INSERT INTO CHETVERTY(ID,CHETVERT,DATASTART,DATAEND) VALUES(null,:CHETVERT,:DATASTART,:DATAEND)';
 Form3.pFIBQuery1.FieldByName('CHETVERT').Value:=Form3.sLabel1.Caption;
 Form3.pFIBQuery1.FieldByName('DATASTART').Value:=Form3.sDateEdit1.Date;
 Form3.pFIBQuery1.FieldByName('DATAEND').Value:=Form3.sDateEdit2.Date;
 Form3.pFIBQuery1.ExecQuery;
поставил на клик по кнопке,
поменял на

Код:
pFIBQuery1.SQL.Clear;
pFIBQuery1.SQL.Text:='INSERT INTO CHETVERTY(ID,CHETVERT,DATASTART,DATAEND) VALUES(null,:CHETVERT,:DATASTART,:DATAEND)';
pFIBQuery1.ParamByName('CHETVERT').Value:='sfvasgafaf';
pFIBQuery1.ParamByName('DATASTART').Value:=Date;
pFIBQuery1.ParamByName('DATAEND').Value:=Date;
pFIBQuery1.ExecQuery;
запустил, нажал на кнопку,
получил новую запись..

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

Vovk, я сделал также как Вы в последнем посте. Нажимаю на кнопку, ошибок никаких не возникает, но и запись не заносится. Вообще не могу понять в чем дело . Что не так то. Ошибок нет, но и записи тоже.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.10.2009, 19:01   #30
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,762
По умолчанию

чтобы запись сохранилась в базе надо провести транзакцию, если не хочется за всем этим делом следить, то у компонентов фиб, в часности у TpFIBquery есть возможность выбрать компонент TpFIBTransaction.
А в опциях поставить
goStartTransaction и goAutoCommit в истину (true)

кстати на счёт ничего не происходит. Обратите внимане на счётчик генератора

Последний раз редактировалось vovk; 13.10.2009 в 19:12.
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