Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
ВнизСоздал базу данных в IBExpert. В базе данных 3-и таблицы: Найти похожие ветки
← →
vasek © (2005-12-10 19:14) [0]Создал базу данных в IBExpert. В базе данных 3-и таблицы:
SET SQL DIALECT 3;
SET NAMES WIN1251;
CREATE TABLE TABLE_1 (
INT_F_PK INTEGER NOT NULL,
CHR_F CHAR(10) NOT NULL
ALTER TABLE TABLE_1 ADD CONSTRAINT PK_TABLE_1 PRIMARY KEY (INT_F_PK);
SET SQL DIALECT 3;
SET NAMES WIN1251;
CREATE TABLE TABLE_2 (
INT_1_F_PK INTEGER NOT NULL,
INT_2_F INTEGER NOT NULL
);
ALTER TABLE TABLE_2 ADD CONSTRAINT PK_TABLE_2 PRIMARY KEY (INT_1_F_PK);
create view new_view ( F1, F2, F3 )
as
select Table_1.int_f_pk, table_1.chr_f, table_2.int_2_f from table_1, table_2
where table_2.int_2_f > 10
хочу заполнить сначала одну из таблиц данными. для этого создаю в делфи проект - форма - на
форме IBDatabase1, IBTransaction1, IBDataSet1, DataSource1, Button1
В IBDataSet1 -
selectSQL -> select * from TABLE_1
modifySQL -> update TABLE_1
set
CHR_F = :CHR_F,
INT_F_PK = :INT_F_PK
where
CHR_F = :OLD_CHR_F and
INT_F_PK = :OLD_INT_F_PK
insertSQL -> insert into TABLE_1
(CHR_F, INT_F_PK)
values
(:CHR_F, :INT_F_PK)
deleteSQL -> delete from TABLE_1
where
CHR_F = :OLD_CHR_F and
INT_F_PK = :OLD_INT_F_PK
refreshSql -> Select
INT_F_PK,
CHR_F
from TABLE_1
where
CHR_F = :CHR_F and
INT_F_PK = :INT_F_PK
обработал клик:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
Randomize;
for i:=1 to 10 do
begin
with IBDataSet1 do begin
Insert;
FieldByName("INT_F_PK").AsInteger:= Random(1);
FieldByName("CHR_F").AsString:= IntToStr(Random(10));
Post;
end;
end;
end;
в итоге ошибка: Project Project1.exe raised exeption class EIBInterBaseError with message
"violation of PRIMARY or UNIQUE KEY constaint "PK_TABLE_1" on table "TABLE_1"". Process stopped.
что делать?
резюме: в принципе я хотел создать в базе 3-и таблицы и одну из них заполнить,
вот собственно и все :(.
← →
Сайбель Алексей © (2005-12-10 20:09) [1]Ошибка возникает потому что ты своему Уникальному ключу
присваешь значения Random(1) (что кстати всегда 0).
Используй связку Триггер + Генератор для создания автоинкрементируемого поля.
← →
vasek © (2005-12-10 23:20) [2]если можно, более детально... у IBDataSet есть свойство, которое позволяет использовать генераторы для создания уникальных ключей... а с тригером как работать, его нужно создать, учитывая высшепреведенный код как он должен выглядеть?
← →
vasek © (2005-12-10 23:49) [3]генератор такой? :
Create Generator INT_F_PK_Gen
Set Generator INT_F_PK_Gen to 0
тригер такой? :
as
begin
new.INT_F_PK=gen_id(INT_F_PK_Gen, 1)
end
← →
Сайбель Алексей © (2005-12-11 00:05) [4]2 vasek ©
Для своего первого примера ты можешь просто заполнить INT_F_PK уникальными значениями, допустим i из цикла for.
[3]
А попробовать? :O)
В тригере можно добавить проверку
IF (NEW.INT_F_PK IS NULL) THEN
...
Вообще тебе IBExpert может тебе сам сгенерить код тригера и генератора, если в свойствах поля укажешь автоинкрементируемость :O)
а у IBDataSet смотри GeneratorField
в нем укажешь какой использовать генератор, к какому полю, на сколько инкрементировать и когда.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c