Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.04;
Скачать: CL | DM;

Вниз

Ошибка при перекачке данных   Найти похожие ветки 

 
Mike2 Kouzmine2   (2003-08-13 14:34) [0]

Имеется таблица
/********************************************************************* *********/
/*** Tables ***/
/********************************************************************* *********/

CREATE TABLE REPPART (
SCLAD ID,
GRUP ID,
NNUM ARTIKUL NOT NULL COLLATE PXW_CYRL,
NEW_NNUM ARTIKUL NOT NULL COLLATE PXW_CYRL,
NAME NAME,
CNT NUMBER
);

/********************************************************************* *********/
/*** Primary Keys ***/
/********************************************************************* *********/

ALTER TABLE REPPART ADD CONSTRAINT PK_REPPART PRIMARY KEY (SCLAD, GRUP, NNUM, NEW_NNUM);

/********************************************************************* *********/
/*** Foreign Keys ***/
/********************************************************************* *********/

ALTER TABLE REPPART ADD CONSTRAINT FK_REPPART FOREIGN KEY (GRUP, SCLAD) REFERENCES GRUPS (ID, SCLAD) ON UPDATE CASCADE;

Вставка происходит так

while not rp.Eof do
begin
gr.FindKey([rpSCLAD.Value,rpGROUP.Value]);
try
if IBTransaction1.InTransaction then IBTransaction1.Rollback;
IBTransaction1.StartTransaction;
IBDataSet1.Open;
IBStoredProc1.Params[0].Clear;
IBStoredProc1.Params[1].AsInteger := rpSCLAD.AsInteger;
IBStoredProc1.Params[2].AsString := grNAME.Value;
IBStoredProc1.ExecProc;
IBDataSet1.AppendRecord([rpSCLAD.AsInteger,IBStoredProc1.Params[0].AsI nteger,
rpPartNo.Value,rpNewPartNo.Value,rpNewDescrip.Value,rpNewQuantit.Value ]);
{IBDataSet1SCLAD.Value := rpSCLAD.AsInteger;
IBDataSet1GRUP.Value := IBStoredProc1.Params[0].AsInteger;
IBDataSet1NNUM.Value := rpPartNo.Value;
IBDataSet1NEW_NNUM.Value := rpNewPartNo.Value;
IBDataSet1NAME.Value := rpNewDescrip.Value;
IBDataSet1CNT.Value := rpNewQuantit.Value;
IBDataSet1.Post;}
if IBTransaction1.InTransaction then IBTransaction1.Commit;
rp.Next;
ProgressBar1.Position := rp.RecNo;
Application.ProcessMessages;
except
on E:Exception do
begin
if IBTransaction1.InTransaction then IBTransaction1.Rollback;
memo1.Lines.Add(rpPartNo.Value + " " + rpNewPartNo.Value);
Memo1.Lines.Add(E.Message);
rp.Next;
ProgressBar1.Position := rp.RecNo;
Application.ProcessMessages;
end;
end;
end;

Ошибка - нарушение целостности первичного ключа.
Что приводит к ней: вставка записи где значения полей NNUM и NEW_NNUM разные (они везде разные), но, в итоге, записи вставляются с одинаковыми значениями в вышеназванных полях, но таких нет в источнике.


 
Reindeer Moss Eater ©   (2003-08-13 15:03) [1]

gr.FindKey([rpSCLAD.Value,rpGROUP.Value]);

А где проверка, что FindKey был успешен?


 
Reindeer Moss Eater ©   (2003-08-13 15:05) [2]

If the search is successful, FindKey positions the cursor on the matching record and returns True. Otherwise the cursor is not moved, and FindKey returns False.


 
Mike2 Kouzmine2   (2003-08-13 15:10) [3]

Все находит нормально - проверено в отладке и убрано за ненадобностью. Там присутствует только одно сочетание.


 
Reindeer Moss Eater ©   (2003-08-13 15:12) [4]

Mike2 Kouzmine2
Ты веришь в чудеса?


 
Reindeer Moss Eater ©   (2003-08-13 15:13) [5]

проверено в отладке и убрано за ненадобностью
А данные тоже остались отладочные?


 
Mike2 Kouzmine2   (2003-08-13 15:27) [6]

Чтобы снять этот вопрос - подставлялись изначально верные значения в лоб, без поиска, но ошибка была.
Если бы верил в чудеса, то написал бы в потрепаться для кайфа.


 
Reindeer Moss Eater ©   (2003-08-13 15:29) [7]

Ну так вот, что бы не трепаться, вставь в свой цикл перед каждым инсертом сообщение с результатом FindKey.


 
Е-Моё имя ©   (2003-08-13 15:31) [8]

Mike2 Kouzmine2 (13.08.03 15:27)
для кайфа.

для kaif"а? ;-))))
у него там приступ паранойи, не надо ему твоих вопросов)))))


 
Mike2 Kouzmine2   (2003-08-13 15:41) [9]

Хорошо, подождем тм.


 
Mike2 Kouzmine2   (2003-08-13 15:49) [10]

Заменил
IBDataSet1.Insert;
IBDataSet1SCLAD.Value := 1;
IBDataSet1GRUP.Value := 1;

IBDataSet1NNUM.Value := rpPartNo.Value;
IBDataSet1NEW_NNUM.Value := rpNewPartNo.Value;
IBDataSet1NAME.Value := rpNewDescrip.Value;
IBDataSet1CNT.Value := rpNewQuantit.Value;
IBDataSet1.Post;

И убрал Find и вызов ХП.
Ошибка таже.
Убрал из первичного ключа NEW_NNUM (вдруг у FB левые ассоциации с NEW), не помогло.


 
Mike2 Kouzmine2   (2003-08-13 15:50) [11]

Убрал внешний ключ - ошибка та же.


 
Reindeer Moss Eater ©   (2003-08-13 15:52) [12]

Убери весь код совсем.
Гарантирую - ошибка исчезнет.


 
Mike2 Kouzmine2   (2003-08-13 16:08) [13]

Клоунов полно.. (Сам такой)


 
Johnmen ©   (2003-08-13 16:11) [14]

Осталось определиться с

IBDataSet1NNUM.Value := ??? //rpPartNo.Value;
IBDataSet1NEW_NNUM.Value := ??? //rpNewPartNo.Value;


 
Mike2 Kouzmine2   (2003-08-13 16:15) [15]

Нет. Ошибка ушла когда поле NEW_NNUM переименовал в NNUM1. Видимо в IB комп. или ФБ действительно с NEW ассоциации.



Страницы: 1 вся ветка

Текущий архив: 2003.09.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
1-10800
lamorg
2003-08-21 22:24
2003.09.04
Что такое CLSID?


3-10580
Дмитрий
2003-08-15 14:44
2003.09.04
Поля BOOL в таблице paradox


8-10845
Bogdan
2003-05-06 15:12
2003.09.04
Multimedia


1-10786
Vena
2003-08-22 23:55
2003.09.04
Excel


1-10781
Anton Lagutin
2003-08-23 11:59
2003.09.04
Заголовки