Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
Фродо )   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.036 c
15-1136449067
Dark Lord
2006-01-05 11:17
2006.01.29
Как из обычного файла шрифта создать bmp шрифт?


15-1136700279
ezorcist
2006-01-08 09:04
2006.01.29
Просто глупость))


2-1137258332
Guest386x
2006-01-14 20:05
2006.01.29
Привилегии


2-1136904987
Ermal
2006-01-10 17:56
2006.01.29
Как вывести информацию о CPU на DELPHI 7


15-1136737369
Glex
2006-01-08 19:22
2006.01.29
Олимпиадные задачи (!) Интересные





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский