![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменение номеров в поле!!! [D7, Paradox]
Developerr © (2003-10-27 13:31:00)
Ув, мастера, столкнулся со следующей проблемой:
У меня есть в базе 3 поля:
Npp Dep Code
1 1-й отдел 1
2 2-й отдел 2
...
10 Отдел кадров 10
Поле Npp + (Autoincrement)
Я хочу программно вставить еще один отдел, где-нибудь в середину и присвоить код отделу, например, 8. Отдел с таким кодом уже существует.
В RxDBGrid я становлюсь на нужную мне строку, например, на одну из двух строк у которых код 8, соответственно на ту которая идет последней, нажимаю кнопку пересчитать коды.
Мне нужно, чтобы все коды начиная со второй 8 и до конца увеличились на 1.
Я прописую кнопке следующий код
while not Table1.Eof do begin
Table1.Edit;
Table1.FieldByName("Code").AsInteger:=Table1.FieldByName("Code").AsInteger+1;
Table1.Post;
Table1.Next;
end;
В результате получается ерунда, а именно: некоторые коды удваиваются, т.е. становится например, два кода равных 9, два 11 и т.д. Некоторые пропускаются, например, идет 11 потом идет 13, 12 пропускается.
Если цифры идут подряд, т.е. нет 2-х одинаковых, тогда все пересчитывается нормально.
Что я делаю не так?
Sandman25 (2003-10-28 12:46:00) [21]
Попробуйте сделать так:
OldCode := Table1.FieldByName("Code").AsInteger;
Table1.Last;
while not Table1.Bof and (Table1.FieldByName("Code").AsInteger >= OldCode) do begin
Table1.Edit;
Table1.FieldByName("Code").AsInteger:=Table1.FieldByName("Code").AsInteger+1;
Table1.Post;
Table1.Prev;
end;
Developerr (2003-10-28 12:40:00) [22]
Ау, подскажите как индекс правильно убить!!!Я понимаю, что где-то проблема с индексами, но не пойму, как её решить. Если можно пример как нужно индексы грохать.
Спасибо.
Developerr (2003-10-28 11:10:00) [23]
Попробовал. Нихрена не работает. У меня в Table1 стоит IndexFieldName=Code
Попробовал сделать так
Table1.IndexFieldName:=""
while not Table1.Eof do begin
Table1.Edit;
Table1.FieldByName("Code").AsInteger:=Table1.FieldByName("Code").AsInteger+1;
Table1.Post;
Table1.Next;
end;
Тот же эффект. Может я неправильно делаю?
> Перед изменением убей этот индекс и будет тебе счастье.
Если не трудно подскажите как убить этот индекс.
Спасибо.
bushmen (2003-10-27 15:40:00) [24]
>Developerr ©
У тебя в структуре таблицы есть индекс на поле code. Перед изменением убей этот индекс и будет тебе счастье.
Developerr (2003-10-27 15:36:00) [25]
Я понимаю, что у меня ошибка, а где именно?
bushmen (2003-10-27 14:46:00) [26]
>Anatoly Podgoretsky
Вы правы, скорее всего в этом у него ошибка.
Anatoly Podgoretsky (2003-10-27 14:31:00) [27]
Было так он перенумровал 10 в 11, следующий промустил и сразу перешел к 12 - Table1.Next;
Anatoly Podgoretsky (2003-10-27 14:27:00) [28]
У него проблема с индексами, он не понимает как они работают при изменении.
bushmen (2003-10-27 14:12:00) [29]
>Anatoly Podgoretsky ©
>Некоторые пропускаются, например, идет 11 потом идет 13, 12 >пропускается.
А если посмотреть на код - ничего не напоминает? :) Несколько раз запущенная программа с изменением разных кодов
Anatoly Podgoretsky (2003-10-27 14:04:00) [30]
Это не существенно, вопрос не про это
bushmen (2003-10-27 13:53:00) [31]
>Я прописую кнопке следующий код
>while not Table1.Eof do begin
>Table1.Edit;
>Table1.FieldByName("Code").AsInteger:=Table1.FieldByName
>("Code").AsInteger+1;
>Table1.Post;
>Table1.Next;
>end;
А где ты вставляешь новую строку?
Anatoly Podgoretsky (2003-10-27 13:47:00) [32]
Индексы отключи
NickBat (2003-10-27 13:36:00) [33]
> Что я делаю не так?
Справочниками ты неправильно пользуешься. Какая разница какой у него код 8 или 11?