Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2015, 11:04   #1
geb2010
Пользователь
 
Регистрация: 15.10.2012
Сообщений: 25
По умолчанию ADOTable

Здравствуйте!
Подскажите, почему программа чтения значений полей из таблицы ADOTable работает медленно (чем больше записей в таблице тем медленее) - 52 секунды, а если я убираю из цикла команду
ADOTable1.Next, то выполняется за 5 секунд?
Можно ли увеличить скорость
выполнения программы с командой
ADOTable1.Next ?
Программа
Код:
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var i, n: integer;
    dn,dk: TDateTime;
    ss, s1: string;
begin
  if ADOTable1.Active = True  then
     ADOTable1.Active:=False;
  OpenDialog1.Execute;
  ADOTable1.TableName:=OpenDialog1.FileName;
  n:=0;
  try
    ADOTable1.Active:=True;
    ADOTable1.First;
    n:=ADOTable1.RecordCount;
  except
    ADOTable1.Active:=False;
  end;
  dn:=Time;
  for i:=1 to n do  begin
    ss:=ADOTable1.Fields[0].Value;
    str(i,s1);
    Label1.Caption:=s1;
    Label1.Refresh;
//    ADOTable1.Next;
  end;
  dk:=Time;
  Label1.Caption:=TimeToStr(dk-dn);
  beep;
end;
Геннадий

Последний раз редактировалось Stilet; 20.01.2015 в 11:25.
geb2010 вне форума Ответить с цитированием
Старый 20.01.2015, 11:13   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Такие циклы лучше делать while not ADOTable1.Eof do если вообще делать.
Без Next-а не будет перехода на следующую запись.
И, да, чем больше записей в таблице тем дольше. И чем больше обращений к vcl в цикле, тем хуже. Приведенный цикл вообще-то ни чего не делает, кроме бестолкового обращения к vcl
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.01.2015, 11:26   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Можно ли увеличить скорость
Если ты подробнее опишешь что этим циклом нужно делать то уверен мы придумаем как его ускорить
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.01.2015, 13:41   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

нельзя except пустым делать...
Код:
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
var i, n: integer;
    dn,dk: TDateTime;
    ss, s1: string;
begin
  if not OpenDialog1.Execute then exit;
  ADOTable1.Active:=False;
  ADOTable1.TableName:=OpenDialog1.FileName;
  ADOTable1.Active:=True;
  i:=1;
  dn:=Time;
  while not ADOTable1.Eof do
  begin
    ss:=ADOTable1.Fields[0].Value;
    //str(i,s1);
    //Label1.Caption:=s1;
    ADOTable1.Next;
    inc(i);
  end;
  dk:=Time;
  Label1.Caption:=TimeToStr(dk-dn);
  beep;
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 20.01.2015, 13:48   #5
geb2010
Пользователь
 
Регистрация: 15.10.2012
Сообщений: 25
По умолчанию

Попробую, то что Вы предлагаете.
Задача: есть таблица.dbf, надо данные прочитать в поля массива.
Я привел упрощенную рпограмму без записи в массив, но суть дела не меняет.
Как бы ускорить чтение данных из таблицы в массив.
geb2010 вне форума Ответить с цитированием
Старый 20.01.2015, 13:52   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
надо данные прочитать в поля массива.
Опа, нежданчик
А зачем читать в массив еще? Всмысле сам полученный набор он ведь и так в памяти массивом двумерным хранится как правило.
Так-то конечно если нужна перегонка, без цикла не обойтись, но для чего...
Я может глупые вопросы задаю, но ИМХО перечитка данных делается в особых случаях, когда это действительно необходимо. Врядли твой случай такой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.01.2015, 13:52   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Массив - это что? DBGrid не подойдет?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.01.2015, 13:59   #8
geb2010
Пользователь
 
Регистрация: 15.10.2012
Сообщений: 25
По умолчанию

Исходная таблица находится в файле в формате FoxPro, программа на Дельфи напрямую не работает с такой таблицей, поэтому надо переслать в массив.
Проверил с WHILE - выполняется за 50 сек. Пробовал с DBGridом работает еще медленее.
geb2010 вне форума Ответить с цитированием
Старый 20.01.2015, 14:24   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Исходная таблица находится в файле в формате FoxPro, программа на Дельфи напрямую не работает с такой таблицей
Теперь я окончательно перестал понимать суть темы...
Ладно, не буду мешать флудом - Делай в цикле перегонку и не используй в нем никаких визуальных компонентов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.01.2015, 14:29   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А сколько записей в той таблице?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADOTable связи MrMorozko БД в Delphi 1 04.05.2011 09:36
Вопрос по ADOTable Sanakan Помощь студентам 1 28.03.2010 12:35
AdoTable Artruman БД в Delphi 4 03.04.2009 02:07
AdoTable Mishina БД в Delphi 2 15.06.2008 06:35
Как копировать данные из ADOTable в ADOTable? mauar БД в Delphi 1 10.05.2008 16:05