Форум: "Базы";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
ВнизОшибка при перекачке данных Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c