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

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

Индексирование в Paradox БД [D7, Paradox]


Script ©   (2004-12-03 10:50:00) 

Возникла такая проблемка(скорее всего смешная). Есть таблица в ней много полей и два индекса(IND_FIO и IND_Ochered). Нужно отсортировать таблицу по очереди(Table1.IndexName:='IND_Ochered') и програмно изменить значения очереди у ряда челов на определенную велечину. Я делаю так:
for i:=1 to Count do
 begin
   Table1.Edit;
   Table1.FieldByName('Ochered').AsInteger:=Table1.FieldByName('Ochered').AsInteger+Step;
   Table1.Next;
 end;
Проблема в том что когда изменяется значение очереди у первого чела, то таблица автоматически пересортируется и этот чел выпадает из ряда...короче полная х..ня получается. Пробовал писать перед началом цикла Table1.IndexName:='' не помогает(пересортируется по primary index). Вот такая глупая проблема. Помогите кто чем сможет 8-)


ЮЮ   (2004-12-03 11:58:00) [1]

>и програмно изменить значения очереди у ряда челов на определенную велечину

Тогда 2) не пойдет, т.к. этот ряд определяется как раз их текущим номером.
А в 1 надо добавить
 WHERE Ochered >= <очередь первого кинутого чела>


Script   (2004-12-03 11:55:00) [2]

В точку. 8-)))


ЮЮ   (2004-12-03 11:37:00) [3]

Вопрос на засыпку: "А почему очередь не уменьшается, а растет?" Муниципальноё жильё, небось, распределяете? :)


ЮЮ   (2004-12-03 11:20:00) [4]

1)
Закрыть Table1
Выполнить запрос
 'Update Table SET Ochered = Ochered + ' + IntToStr(Step)
Открыть Table1

2)
 Table1.DisableControls;
 Table1.IndexName:=''; // или 'IND_FIO'
 твой цикл
 Table1.IndexName:='IND_Ochered';
 Table1.EnableControls;


Script   (2004-12-03 11:09:00) [5]

Не. Условие тут не при чем. Пользователь тыкает на DBGrid на первую запись, вводит count и step. Потом нажимает Button и кусок очереди обрабатывается. Тут imho надо как-то отключить индексирование 8-)) чтобы сразу после изменения записи она не меняла своего положения, а то по Table.Next переход будет не на нужную запись а вообще хз куда.


Александр Иванов   (2004-12-03 10:58:00) [6]

А по какому условию происходит изменение?

Попробуй так:

for i:=1 to Count do
begin
  Table1.Edit;
  while <уловие> do
  Table1.FieldByName('Ochered').AsInteger:=Table1.FieldByName('Ochered').AsInteger+Step;
  Table1.Next;
end;


Наверх

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