медленная работа TDBF

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

медленная работа TDBF

Сообщение Velial » 13.11.2010 13:34:18

Доброго времени суток.
Есть вот такой код
Код: Выделить всё
    while not dbIt.EOF do
    begin
      If Copy(dbIt.Fields.FieldByNumber(1).AsString,1,Length(edit1.Text)) = edit1.Text then
      begin
        dbit.Delete;
      end
      else
      begin
        dbIt.Next;
      end;
    end;

При работе с dbf файлами до 15000 записей нет никаких проблем, но если количество записей больше, то скорость обработки начинает падать. в файле с 35000 записей первые 15000 пролетают за 2-3 секунды, а остальные более 3 минут.
Это нормально? Или я что-то делаю не так? Есть какие-нибудь предложения как добиться нормальной скорости работы?
P.S.Lazarus 0.9.28.2 beta FPC 2.2.4
Velial
новенький
 
Сообщения: 36
Зарегистрирован: 02.07.2010 21:23:11

Re: медленная работа TDBF

Сообщение Padre_Mortius » 13.11.2010 18:28:14

а что этот кусок кода делает? И почему нельзя использовать Filter или Locate?
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: медленная работа TDBF

Сообщение Velial » 13.11.2010 21:25:48

Нужно из dbf файла удалить определенные записи. Как реализовать по другому я не знаю. Готов принять другое решение.
Velial
новенький
 
Сообщения: 36
Зарегистрирован: 02.07.2010 21:23:11

Re: медленная работа TDBF

Сообщение WindOfPain » 14.11.2010 02:48:33

Код: Выделить всё
procedure TForm1.Button2Click(Sender: TObject);
begin
     MemDataset1.Filtered:=false;
     MemDataset1.Filter:='LANGUAGE = "F*"';//фильтруем в датасете только те строки, где в поле LANGUAGE значение начинается с F
     MemDataset1.Filtered:=true;

     while not Memdataset1.EOF do
     begin
          Memdataset1.Delete;//удаление всех строк, которые удовлетворяют условию фильтра
     end;

     MemDataset1.Filtered:=false;
     MemDataset1.Filter:='';//отключение фильтрации
     MemDataset1.Filtered:=true;
end;                   


не знаю на счет скоростных характеристик данного метода, но при помощи фильтрации, можно решить задачу, как-то так
Аватара пользователя
WindOfPain
новенький
 
Сообщения: 33
Зарегистрирован: 01.09.2009 21:18:23
Откуда: Санкт-Петербург

Re: медленная работа TDBF

Сообщение Mr.Smart » 14.11.2010 02:57:42

Я не уверен, что увеличится скорость. Как никак DBF реализация FPC и подозреваю, что там не заморачивались, т.к. всё таки не было данной цели!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: медленная работа TDBF

Сообщение Velial » 15.11.2010 10:50:49

Спасибо за помощь. С фильтром работает быстрее.
Velial
новенький
 
Сообщения: 36
Зарегистрирован: 02.07.2010 21:23:11


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

Рейтинг@Mail.ru