Форум: "Начинающим";
Текущий архив: 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