Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.12.2012, 00:43
Аватар для Paskal
Paskal Paskal вне форума
Новичок
 
Регистрация: 28.09.2010
Сообщения: 93
Репутация: 12
Вопрос Скорость заполнения из dbgid в stringgrid

Очень срочно нужна помощь.
Писал софт под учет товара + продажа, тестировал прогу на своей бд до 30 позиций. Все работало как нужно но
дали мне почти 7000 позиций и на 11 столбиков. Тут я и
Ближе к теме: загружаю из dbgid в stringgrid все позиции и [b] жду жду ....
Результат открывается но проходит много времени.
Вопрос как можно быстрей выгрузить данные из dbgid в stringgrid
Знаю что подход неправильный но переделывать очень много а времени как всегда нет. (
Мой код:
Код:
procedure TForm3.N7Click(Sender: TObject);
var
i200, j200:Integer;
begin
      ADOQuery3.Active:=False;
      AdoQuery3.SQL.Clear;
      ADOQuery3.SQL.Text:='SELECT COUNT (*) FROM Products;';
      ADOQuery3.Active:=true;


      if not ADOQuery3.Eof then
         begin
           if not ADOQuery3.FieldByName('Expr1000').IsNull then
           begin
             dbCountInt23:=ADOQuery3.fieldbyname('Expr1000').AsInteger;
           end
           else
           begin
           ShowMessage('Ошибка! При выборке данных 00EX0CN');
           end;
         end;
         ADOQuery3.Close;
         StringGrid2.RowCount:=2;
         StringGrid2.RowCount:=dbCountInt23 +1;

  AdoQuery3.Close;
  AdoQuery3.SQL.Clear;
  AdoQuery3.SQL.Add('SELECT Products.Kod, Products.Articul, Products.Positions, Products.Cols, Products.Warehouse, Products.PresentPrice, Products.Comment FROM Products;');
  ADOQuery3.Open;


  j200 := 1;
 DBGrid1.DataSource.DataSet.First;
  while not DBGrid1.DataSource.DataSet.Eof do
  begin
    for i200 := 0 to DBGrid1.Columns.Count -1 do
    begin
     StringGrid2.Cells[0,0]:='КОД';
     StringGrid2.Cells[1,0]:='АРТИКЛ';
     StringGrid2.Cells[2,0]:='НАИМЕНОВАНИЕ ПОЗИЦИИ';
     StringGrid2.Cells[3,0]:='КОЛИЧЕСТВО';
     StringGrid2.Cells[4,0]:='СКЛАД';
     StringGrid2.Cells[5,0]:='ЦЕНА';
     StringGrid2.Cells[6,0]:='КОМЕНТАРИЙ';
     StringGrid2.Cells[i200, j200] := DBGrid1.DataSource.DataSet.Fields[i200].AsString;
     //------------------------------------->
    Form3.Repaint;
    StringGrid2.Repaint;
    end;
    Inc(j200);
    DBGrid1.DataSource.DataSet.Next;
   end;
   end;
Ответить с цитированием
  #2  
Старый 07.12.2012, 02:54
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Убрать вот это из цикла:
Код:
    Form3.Repaint;
    StringGrid2.Repaint;
2. проверить, если где у StringGrid методы BeginUpdate и EndUpdate. Если есть - использовать.
3. Грузить не из DBGrid, а из самого запроса (что ты собственно и делаешь, только обращаешься к нему через DBGrid). Мелочь, но на больших числах тоже начинает играть.
4. Где можно, использовать With..do - тоже сокращение времени на разрешение ссылок.

3 и 5 - это уже мелочевка, много тут не выиграешь.
И это только просто посмотрев на твой код. Надо еще бы по алгоритму пройтись, может можно как-то ограничить выборку.
Так что переписывать все-равно придется.

Только непонятно - чем тебя DBGrid не устраивает, что ты переписываешь данные в StringGrid. Зачем их лишний раз перекладывать?
Ответить с цитированием
  #3  
Старый 07.12.2012, 03:02
Аватар для Paskal
Paskal Paskal вне форума
Новичок
 
Регистрация: 28.09.2010
Сообщения: 93
Репутация: 12
По умолчанию lmikle

1 Убрал не помогло
2 Не использовал
3 В этом пункте по подробнее не понял а как еще можно
4 Сейчас сделаю

Цитата:
Только непонятно - чем тебя DBGrid не устраивает,
Откровенно я его не знаю и не знаю, как обратится к строке или ячейке + заголовки у меня в бд на Англ нужно на Русс
Ответить с цитированием
  #4  
Старый 07.12.2012, 03:16
Аватар для Paskal
Paskal Paskal вне форума
Новичок
 
Регистрация: 28.09.2010
Сообщения: 93
Репутация: 12
По умолчанию

Попробую через dbgrid
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:40.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter