Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
14-1133427002
WondeRu
2005-12-01 11:50
2005.12.25
Какое приложение написать на J2ME?


2-1133885562
hamster
2005-12-06 19:12
2005.12.25
Оптимизация


14-1133330550
Ega23
2005-11-30 09:02
2005.12.25
С днем рождения! 30 ноября


8-1121619696
SpyBoy
2005-07-17 21:01
2005.12.25
Мощный звук


14-1133329515
Rentgen
2005-11-30 08:45
2005.12.25
InTouch





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский