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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2010, 22:36   #1
SlimFIT
 
Регистрация: 21.12.2010
Сообщений: 7
Печаль Violation of primary key constraint .Cannot insert duplicate key in object Как избавиться?

Всем привет. Есть БД в которой присутствуют таблицы Driver и Driver_Del(поля как и в driver + 2 дополнительных поля, которые могут быть null). Нужно при нажатии на кнопку запись из таблицы Driver перенести в Driver_Del и удалить из Driver. При перенесении записи из одной таблицы в другую вылетает сообщение "violation of primary key constraint 'PK_Del_Driver_55F4C372'.Cannot insert duplicate key in object 'Del_Driver'". Но запись в таблицу вставляется. Можно ли сделать так, чтобы это сообщение не выскакивало? Как написать для него исключение? Заранее спасибо.

Нажатие кнопки
Код:
begin
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='insert into Del_Driver(id_driver,fio,dob,address,phone,auto,datap) '
+'select id_driver,fio,dob,address,phone,auto,datap from Driver where Driver.id_driver='+Edit1.Text;
ADOQuery1.ExecSQL;
ADOQuery1.Active:=True;

ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='delete from Driver where id_driver='+Edit1.Text;
ADOQuery1.ExecSQL;
ADOQuery1.Active:=True;
end;
Изображения
Тип файла: jpg 0003.jpg (28.3 Кб, 117 просмотров)
SlimFIT вне форума Ответить с цитированием
Старый 21.12.2010, 23:47   #2
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

В таблице Del_Driver уже существует передаваемое значение поля id_driver на момент вставки новой строки (значение из Edit1). Отсюда ошибка.
На какой стороне генерится уникальное значение id_driver? На сервере или клиенте?
Karabash вне форума Ответить с цитированием
Старый 22.12.2010, 00:21   #3
SlimFIT
 
Регистрация: 21.12.2010
Сообщений: 7
По умолчанию

БД локальная SQL Server 2000. Даже когда таблица Del_Driver пустая, ошибка эта все равно вылезает.
SlimFIT вне форума Ответить с цитированием
Старый 22.12.2010, 00:44   #4
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

На вопрос, заданный в посте #2 ответьте себе. Может быть ситуация проясниться.

Если поле id_driver в Del_Driver является ключевым с автоинкрементом (судя по схеме, именно так дело и обстоит), а, следовательно, его значение генерит сервер, то предложение insert значение этого поля записывать не может.
В случае приведенной схемы БД и ее логики, это поле не может быть уникальным (читай, автоинкрементным) в таблице Del_Driver, т.к. его значение "переписывается" из другой таблицы. Отсюда и проблемы.

По уму если, то в Del_Driver ключевым полем должно быть другое (ID, допустим), а id_driver должно содержать значение одноименного поля из таблицы Driver и быть обычным полем, а не PRIMARY KEY.

Опять же, и в ситуации какая сейчас и в той, которая описана абзацем выше, значение поля id_driver таблицы Del_Driver после удаления строки из таблицы Driver никакого смысла не несет и бесполезно в качестве информации.

Последний раз редактировалось Karabash; 22.12.2010 в 01:11. Причина: Решение
Karabash вне форума Ответить с цитированием
Старый 28.12.2010, 06:46   #5
Lotattamugh
Заблокирован
 
Регистрация: 28.11.2010
Сообщений: 5
По умолчанию Violation of primary key constraint Cannot insert duplicate key in object Как избавиться

Че то я не догнал про код µ®©®¤w№, у меня на втором вхождении в EditEndProc вылетает Access Violation, это что получается что после выполнения FormCreate oldproc указывает на EditWndProc, а внутри EditWndProc вызывается oldproc
и так бесконечная рекурсия, если нет, то почему Access Violation вылетает?

P.S. курсор я убил так

CODE
Lotattamugh вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Key$2Bin depocomp Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 26.05.2009 10:35
violation of FOREIGN KEY KiSH333 БД в Delphi 1 17.02.2009 16:05
забыла свой пароль в аське, объясните как пользоваться программой Asterisk Key Chulita Свободное общение 14 09.12.2008 18:42