|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Скорость заполнения из 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
|
|||
|
|||
1. Убрать вот это из цикла:
Код:
Form3.Repaint; StringGrid2.Repaint; 3. Грузить не из DBGrid, а из самого запроса (что ты собственно и делаешь, только обращаешься к нему через DBGrid). Мелочь, но на больших числах тоже начинает играть. 4. Где можно, использовать With..do - тоже сокращение времени на разрешение ссылок. 3 и 5 - это уже мелочевка, много тут не выиграешь. И это только просто посмотрев на твой код. Надо еще бы по алгоритму пройтись, может можно как-то ограничить выборку. Так что переписывать все-равно придется. Только непонятно - чем тебя DBGrid не устраивает, что ты переписываешь данные в StringGrid. Зачем их лишний раз перекладывать? |
#3
|
||||
|
||||
lmikle
1 Убрал не помогло
2 Не использовал 3 В этом пункте по подробнее не понял а как еще можно 4 Сейчас сделаю Цитата:
|
#4
|
||||
|
||||
Попробую через dbgrid
|