Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменение номеров в поле!!! [D7, Paradox]


Страницы:   1 2

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?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо