powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / PRIMARY KEY
15 сообщений из 15, страница 1 из 1
PRIMARY KEY
    #38613360
Shnaizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
приветствую. У меня есть таблица с 6 полями, 1 из которых primary key. одна из обязательных функций моей программы это регулярное добавление\удаление записей из этой таблицы.(таблица заказов в кафе). Добавляются записи в эту таблица стабильно, без ошибок, до той поры, пока не произойдет первое удаление записи.(если удалить запись где то в середине). т.е. если появляется дыра в primary key, то при следующем добавлении записи в таблицу мне выдается ошибка violation of primary key constraint. Подскажите, есть ли способ, при удалении записи из таблицы, заного пересчитать primary key(т.е. если были ID 1 2 4 5 после удаления, чтобы он автоматически делал их 1 2 3 4), либо подскажите более оптимальные решения задачи. Спасибо
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613362
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shnaizer> если появляется дыра в primary key, то при следующем
Shnaizer> добавлении записи в таблицу мне выдается ошибка
Shnaizer> violation of primary key constraint

А ты покажи, как добавляешь.
Select Count(*) делаешь, поди.
Читай http://ibase.ru/devinfo/generator.htm
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613364
Shnaizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,
как добавляю в таблицу запись? я делаю это в дельфи, вот так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
DataModule2.IBTable9.Insert;
      DataModule2.ibtable9.FieldByName('ID_AZAK').AsInteger:=inc_zakaza + 1;
      DataModule2.IBTable9.FieldByName('NOMERZAKAZA').AsInteger:=inc_nzakaza + 1;
      datamodule2.IBTable9.FieldByName('NAME_BLUDO').AsString:=lp2;
      datamodule2.IBTable9.FieldByName('KOLVO').AsInteger:=lk2;
      datamodule2.IBTable9.FieldByName('STOLIK').AsInteger:=strtoint(ComboBox1.Text);
      datamodule2.IBTable9.FieldByName('DATA').AsDateTime:=date;
      datamodule2.IBTable9.FieldByName('TIME').AsDateTime:=time;
      DataModule2.IBTable9.Post;



удаляю так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DataModule2.IBQuery12.SQL.Clear;
 DataModule2.IBQuery12.SQL.Add('DELETE FROM AZAKAZ WHERE ID_AZAK = :id');  
 ...
 DataModule2.IBQuery12.close;
 id:=DBGrid1.Fields[0].Value;
 DataModule2.IBQuery12.Params[0].Value:='';
 DataModule2.IBQuery12.Params[0].Value:=id;
 DataModule2.IBQuery12.Open;
 DataModule2.IBTable9.Close;
 DataModule2.IBTable9.Open;
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613369
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> DataModule2.ibtable9.FieldByName('ID_AZAK').AsInteger:=inc_zakaza + 1;

А inc_zakaza это что? RecordCount, поди?
Читай статью по ссылке, там разжевано
про генераторы и триггера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613370
Shnaizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,
Код: pascal
1.
2.
datamodule2.IBTable9.Last;
 inc_zakaza:=datamodule2.IBTable9.RecNo;
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613374
Shnaizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блин не понимаю. создал генератор и триггер
вот такой триггер бефор инсерт:

Код: sql
1.
2.
3.
4.
AS
begin
 NEW.ID_AZAK = gen_id(gen_azakaz_id, 1);
end



строчку, которая делала мне инкремент раньше, закомментил:
Код: pascal
1.
   //DataModule2.ibtable9.FieldByName('ID_AZAK').AsInteger:=inc_zakaza + 1;



теперь бредовую ошибку какую то выдает cannot focus on disabled or invisible window. Всё работает если убрать комментарий с этой строки. интересная ситуация.
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613376
Shnaizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
эта ошибка вылетает на
Код: pascal
1.
DataModule2.IBTable9.Post;
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613400
igor_fp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор ошибка violation of primary key constraint.
эта ошибка возникает когда нарушается primary key
если не будешь нарушать, то все будет нормально
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613447
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shnaizer> создал генератор и триггер
Shnaizer> вот такой триггер бефор инсерт:
Shnaizer> begin
Shnaizer> NEW.ID_AZAK = gen_id(gen_azakaz_id, 1);
Shnaizer> end

Ещё почитай в статье про триггер с условием IF.

Shnaizer> теперь бредовую ошибку какую то выдает
Shnaizer> cannot focus on disabled or invisible window

Это к FB отношения не имеет. Иди в профильный
раздел и приведи полный код модуля - подскажут.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613454
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shnaizerблин не понимаю.
Потому что статью не прочёл целиком. Иди перечитывай до понимания.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613541
Shnaizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем спасибо за помощь. генератор создал, всё работает. просто для меня была сложность в том что я думал что генератор должен в самой бд, после инсерта, присвоить моему ID значение +1. но поскольку у меня запись в бд появляется только после завершения работы программы, то в момент инсерта, поле id сама бд не может заполнить потому что его там нет. поэтому я вызвал генератор из дельфи
Код: pascal
1.
DataModule2.IBQuery11.SQL.Add('select gen_id(g1,1) from RDB$DATABASE');

и уже его значение запихиваю в id каждый раз. а насчет ошибки cannot focus on disabled window это какой то глюк дельфи: вообщем если у вас датасоурс, связанный с таблицей, с которой вы работаете на активной в данный момент форме, связан с каким то там ДБГРИДОМ, то эта ошибка вполне может нарисоваться. но примечательно то, что эта ошибка рисовалась только тогда, когда у меня в новой записи в таблице отсутствовало значение ID. понимайте как хотите)
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613557
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shnaizerпонимайте как хотите)
Есть только один способ это понимать: ты совершенно не понимаешь как работают программы. В
том числе - написанные тобой. Что вызывает подозрение, что ты их не написал, а скопипастил
из гугля.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613561
Shnaizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

сам я всё писал. это мой диплом который я делаю из курсового. в июне защита. есть пару процедур которые я скопировал с инета например печать отчета. а ситуации вроде этой с дбгридом я считаю слегка аномальными. безусловно это от малоопытности.
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613576
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shnaizerа ситуации вроде этой с дбгридом я считаю слегка аномальными. безусловно
это от малоопытности.
Думаешь, прозрение, что при ошибке контроля входного значения TDataLink пытается
сфокусировать тот TControl с которого оно поступило, придёт к тебе исключительно с опытом,
без чтения документации и исходников VCL?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PRIMARY KEY
    #38613875
А еще
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще надо бы http://ibase.ru/devinfo/ibx.htm .
В частности про то,
Код: plaintext
Почему компонент IBTable не рекомендуют?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / PRIMARY KEY
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]