Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Автоинкрементарное поле


Автор: kulikoff 9.3.2006, 10:06
Есть такая проблема: как правильно сделать автоинкрементарное поле в таблице СУБД Oracle? Пробовал, чтоб определяло максимальное число в поле и присваивало следующей записи на единицу - очень долго выполняется... Просто кол-во записей мне не подходит, т.к. возможна ситуация, когда запись будет удалена, а её номер уже нельзя использовать...

Автор: Vas 9.3.2006, 10:09
Sequence smile

В запросе на добавление:
Код

insert into your_table (id, name) values(your_sequence.nextval, 'Бла-бла-бла...')

Автор: kulikoff 21.3.2006, 17:55
Пишу следующий код:
Код

ADOQuery1.Close;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Text:='insert into bankvuptrans (dateprov,sumbank,users,datezagr,transaction,transactionid) values (:p1,:p2,:p3,:p4,:p5,transactionid.nextval)';
   ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.Text, true);
   ADOQuery1.Parameters.ParamByName('p1').Value:=b;
   ADOQuery1.Parameters.ParamByName('p2').Value:=summa;
   ADOQuery1.Parameters.ParamByName('p3').Value:=ty;
   ADOQuery1.Parameters.ParamByName('p4').Value:=Date;
   ADOQuery1.Parameters.ParamByName('p5').Value:='імпорт даних';
   ADOQuery1.ExecSQL;

на что мне выдается ошибка:
Код

sequence does not exist


Как правильно написать?

Автор: Vas 21.3.2006, 18:54
Цитата(kulikoff @ 21.3.2006, 17:55 Найти цитируемый пост)
Как правильно написать?

Его сначала нужно создать в БД.
Код

create sequence my_sequence
increment by 1
start with 1
nocycle

А потом только использовать.
Код

ADOQuery1.Close;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Text:='insert into bankvuptrans (dateprov,sumbank,users,datezagr,transaction,transactionid) values (:p1,:p2,:p3,:p4,:p5,my_sequence.nextval)';
   ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.Text, true);
   ADOQuery1.Parameters.ParamByName('p1').Value:=b;
   ADOQuery1.Parameters.ParamByName('p2').Value:=summa;
   ADOQuery1.Parameters.ParamByName('p3').Value:=ty;
   ADOQuery1.Parameters.ParamByName('p4').Value:=Date;
   ADOQuery1.Parameters.ParamByName('p5').Value:='імпорт даних';
   ADOQuery1.ExecSQL;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)