![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Cached Updates update failed? [D5, IB6.x]
kaif © (2002-03-21 10:59:00)Допустим, у меня имеется 3 записи в таблице:
ID N
1 2
1 3
1 4
Поля ID,N составляют первичный ключ.
Беру IBQuery + IBUpdateSQL.
CachedUpdates = True.
Вписываю все, как надо:
UPDATE ...
SET N=:N
WHERE ID=:OLD_ID AND N=:OLD_N
Потом в цикле меняю:
with MyQuery do
begin
i := 0;
First;
while not Eof do
begin
inc(i);
FieldByName("N").AsInteger := i;
Next;
end;
ApplyUpdates;
end;
ApplyUpdates проваливается на первой же строке! (update failed).
Как такое может быть? Ведь для первой записи нарушения первичного ключа никак не предвидится...
Хочется после удаления строки из документа перенумеровать его строки. И чтобы без гимора. Но, как я чувствую - ничего не получается и придется использовать суррогатную нумерацию (с дырками) для N...
Или я не прав?
Alexandr (2002-03-21 11:52:00) [21]Update Failed означает, что у тебя при выполнении запроса при вносе изменений в одной записи таблицы обновилось в базе <>1 записей
kaif (2002-03-21 11:49:00) [22]Извиняюсь, просто я не написал здесь в вопросе Edit. Но у меня это написано в программе. Post не нужен, так как Next делает Post, хотя и не помешает. Нет, проблема в чем-то другом. Везде, где я использую CachedUpdates я сталкиваюсь с этой проблемой.
Если удалил строку из набора, в котором второе ключевое поле имело сквозную нумерацию в таблице, то потом либо надо мириться с "дыркой", либо не использовать CashedUpdates.
Запрос у меня нормальный, просто все приводить -слишком длинно.
Turalyon (2002-03-21 11:11:00) [23]У тебя какой вид имеет MyQuery.SQL???
А вообще у тебя база не в режиме редактирования, а ты что то присваиваешь полям...
with MyQuery do
begin
i := 0;
First;
while not Eof do
begin
Edit;
inc(i);
FieldByName("N").AsInteger := i;
Post;
Next;
end;
ApplyUpdates;
end