Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.29;
Скачать: CL | DM;

Вниз

Работы с большими таблицами данных.   Найти похожие ветки 

 
Фродо )   (2006-01-09 00:59) [0]

Проблема такова - мне необходимо сделать так, чтобы программа записывала и отображала в списке очень большую таблицу (порядка 500.000 и более строк и около 4- 5 колонок).
Впросы такие :
1) Каким компонентом воспользоваться для реализации моей идеи? (пробовал юзать СтрингГрид, но ничего не вышло - слииииишком долго он загружает таблицу)
2) Как можно БЫСТРО загрузить такую таблицу, или как с ней лучше всего работать (чтобы был быстрый доступ к любой троке таблицы) ?

Спасибо.


 
palva ©   (2006-01-09 01:22) [1]

Если только отображать, то можно попробовать браузер. Он должен с этим хорошо справиться.


 
Alex Konshin ©   (2006-01-09 02:46) [2]

А таблица откуда берется?
Можешь попробовать мой ArrayGrid (см.анкету).


 
Alarm ©   (2006-01-09 10:18) [3]

Отображать порядка 500.000 строк, на первый взгляд, по крайней мере не разумно (если вспомнить о юзере). Возможно следовало бы воспользоваться запросами перед отображением?


 
Fay ©   (2006-01-09 10:45) [4]

2 palva ©   (09.01.06 1:22) [1]
> Он должен с этим хорошо справиться
Ага, не хуже, чем Photoshop.


 
palva ©   (2006-01-09 11:16) [5]

Fay ©   (09.01.06 10:45) [4]
> Ага, не хуже, чем Photoshop.
То что вы пишете, очень интересно.
Расскажите, как можно для просмотра таблиц приспособить фотошоп? Как поместить окно фотошопа на форму делфи? И что будет работать быстрее, браузер или фотошоп. Поделитесь пожалуйста опытом.


 
TUser ©   (2006-01-09 11:25) [6]

DBGrid


 
Fay ©   (2006-01-09 12:02) [7]

2 palva ©   (09.01.06 11:16) [5]
Опыта (боевого) нет, но я знаю, как это сделать.
Могу поспорить на некоторую сумму 8).

> То что вы пишете, очень интересно.
Использование браузера, в данном случае, сродни забиванию гвоздей микроскопом.
Согласитесь - тоже весьма занимательно.


 
Fay ©   (2006-01-09 12:04) [8]

Я бы даже сказал "микроскопов гвоздём"


 
palva ©   (2006-01-09 13:29) [9]

> Использование браузера, в данном случае, сродни забиванию гвоздей микроскопом.
Не понимаю ваш намек. Браузер как раз и предназначен для просмотра данных. У меня подозрение что на больших объемах данных браузер будет работать немного быстрее чем DataGrid. Вот такая кнопка

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
 fo: TextFile;
begin
 AssignFile(fo, "c:/tbl.htm");
 Rewrite(fo);
 WriteLn(fo, "<table border=1>");
 for i:=1 to 100000 do begin
   WriteLn(fo, "<tr><td>"+IntToStr(i)+"</td><td>"+
   IntToStr(i div 2)+"</td></tr>");
 end;
 WriteLn(fo, "</table>");
 CloseFile(fo);
 WebBrowser1.Navigate("file://c:/tbl.htm");
end;

отрисовывает у меня браузер за 15 секунд (2.4 Ггц)
Если вы считаете, что здесь уместнее использовать фотошоп, то - вперед, помогите автору, может он вам и денег отвалит. А я спорить не буду, я здесь не для споров и не для зарабатывания денег.


 
Fay ©   (2006-01-09 14:10) [10]

2 palva ©   (09.01.06 13:29) [9]
15 секунд - это очень долго.
Если данные брать так же (for i ...) и писать в TdxMemData (к примеру), то будет 0.4 с (Celeron 2.4).
Те же данные из MSSSQL - 0.6 сек.

Какие 15?!


 
Fay ©   (2006-01-09 14:23) [11]

1 Фродо )
А что из себя представляет сама таблица?


 
palva ©   (2006-01-09 14:34) [12]

> писать в TdxMemData
Писать можно и в массив. Автор хочет просматривать.


 
Fay ©   (2006-01-09 14:40) [13]

2 palva ©   (09.01.06 14:34) [12]
Конечно, речь идёт о TDBGrid(Eh).


 
palva ©   (2006-01-09 14:42) [14]

> Конечно, речь идёт о TDBGrid(Eh).
Ну мне дальше не интересно, я думал будет фотошоп.


 
Fay ©   (2006-01-09 14:49) [15]

2 palva ©   (09.01.06 14:42) [14]
> Ну мне дальше не интересно
При некоторй доработке и Ваш способ можно сделать ещё медленее. Не опускайте руки!


 
Набережных С. ©   (2006-01-09 14:49) [16]

Я думаю, что DrawGrid + динамическая подгрузка данных позволят отрисовать несколько быстрее 15 секунд даже на более слабой машине :)


 
Фродо )   (2006-01-09 15:13) [17]


> Отображать порядка 500.000 строк, на первый взгляд, по крайней
> мере не разумно (если вспомнить о юзере). Возможно следовало
> бы воспользоваться запросами перед отображением?
>


Поравлюсь...  Мне надо сделать так чтобы пользователь МОГ просмотреть очень большую таблицу сам (поскольку когда я пользовался именно запросами на поиск определенной строки \ строк мне говорили - мол ХАЧУ ШТОБЫ ВЕСЬ СПИСОК ЗАГРУЖАЛСЯ И ЕГО МОЖНО БЫЛО ПРОЛИСТАТЬ САМАМУ), бред конечно, но хозяин как говорится - барин...

И еще видите ли в чем загвоздочка... Надо чтобы можно было изменить данные в любой из строк - ткнув на ней мышкой и введя новые данные.. А при использовании браузера, грузя ХТМЛ таблицу - это проблематично )...
Извиняюсь что не сказал это ранее, и приношу извинения за заранее не полностью обрисованую проблему.


> отрисовывает у меня браузер за 15 секунд (2.4 Ггц)


У меня СтрингГрид таблицу из 100.000 строк и 5 столбцов грузит за 6 секунд (P-IV  3.2)
примерно так..

procedure LoadCollection(SG:TStringGrid; FileName:pchar);
var
f:textfile;
temp,x,y,r:integer;
sapppath,tempstr:string;
begin
sapppath := ExtractFilePath(Application.ExeName);

  tempstr := "";

   sg.Cols[0].BeginUpdate;
   sg.Cols[1].BeginUpdate;
   sg.Cols[2].BeginUpdate;
   sg.Cols[3].BeginUpdate;
   sg.Cols[4].BeginUpdate;

if FileExists(FileName) then
 begin
     assignfile(f,FileName);
     reset(f);
     readln(f,temp);
     SG.colcount:=temp;
     readln(f,temp);
     SG.rowcount:=temp;

   For y:=0 to SG.colcount-1 do
   For x:=0 to SG.rowcount-1 do
    begin
      readln (F, tempstr);
      SG.cells[y,x]:=tempstr;
    end;

   sg.Cols[0].EndUpdate;
   sg.Cols[1].EndUpdate;
   sg.Cols[2].EndUpdate;
   sg.Cols[3].EndUpdate;
   sg.Cols[4].EndUpdate;
   end;
end;


Код старый и не мой, моим методом сохранения \ загрузки таблицы стринггрида она загружается 9 секунд.

А это очень долго...
Вот тот же FileMonitor грузит свой собственный лог (более 500.000 записаей) около 2-х секунд.  Вот мне и надо добиться примерно того же....


> А что из себя представляет сама таблица?


Таблица представляет из себя списки проданой продукции за месяц \ пол года \ год.

| Наименование товара |  Продано  |    Цена   |  
|                                |               |              |
|                                |               |              |

Вобщем такая вот таблица... А за месяц \ год представляете себе КАКАЯ получится эта таблица!!

Вот примерно такова ситуация...


 
Fay ©   (2006-01-09 15:26) [18]

Формат хранения данных менять можно?


 
Фродо )   (2006-01-09 21:03) [19]

>Формат хранения данных менять можно?

Можно, главное чтобы грузилось нормально и можно было обработать любую из строк списка (изменить данные в ней).


 
аматор ©   (2006-01-09 21:51) [20]

Привет...
Фродо - может я туп (если Вы работаете с "дельфином"), но зачем для отображения (просто отображения) базы использовать стринггрид а не дбгрид, или там есть выборка с которой запросами не справиться...


 
palva ©   (2006-01-09 23:17) [21]

Фродо )   (09.01.06 15:13) [17]
> Надо чтобы можно было изменить данные в любой из строк - ткнув на ней мышкой и введя новые данные. А при использовании браузера, грузя ХТМЛ таблицу - это проблематично
Ну как раз здесь проблем нет. У вас проблема другая - очень много строк.  Так что нижеследующий код вам вряд ли пригодится. Я уж сейчас не буду заботиться о скорости и напишу с динамическим заполнением таблицы всего на сто строк.

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
 d, t, r, c: OLEVariant;
begin
 WebBrowser1.Navigate
 ("about:<div contenteditable><table border=1 id=tbl>"+
 "<tr><td width=100>col1</td><td width=100>col2</td></tr>"+
 "</table></div>");
 repeat
   Application.ProcessMessages;
 until WebBrowser1.readyState = 4;
 d := WebBrowser1.Document;
 t := d.all.tbl;
 for i:=1 to 100 do begin
   r := t.insertRow;
   c := r.insertCell;
   c.innerHTML:= IntToStr(i);
   c := r.insertCell;
   c.innerText:=IntToStr(i div 2);
 end;
end;

Несложно сгенерировать, чтобы можно было редактировать определенные столбцы. Ну еще потребуется кнопка сохранить. Это, конечно, не фотошоп, но зато работает.


 
palva ©   (2006-01-09 23:26) [22]

Сейчас поигрался немного. Работают клавиши Ctrl-B, Ctrl-I, Ctrl-U. Наверняка есть документация, где все это описано.



Страницы: 1 вся ветка

Текущий архив: 2006.01.29;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.058 c
2-1136969198
pupapumD
2006-01-11 11:46
2006.01.29
Командная строка.....


15-1136818398
Prohodil Mimo
2006-01-09 17:53
2006.01.29
Как вам моя ёлка? :о)


6-1127938364
Klim
2005-09-29 00:12
2006.01.29
Проблема создания TServerSocket


2-1136802938
BiggieSmalls
2006-01-09 13:35
2006.01.29
Свернуть окно


6-1129277703
Razor
2005-10-14 12:15
2006.01.29
NTLM авторизация и Indy