![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись дерева в таблицу [D6]
webpauk © (2007-11-12 09:36:00)Дерево (TReeView) представляет отображение файловой структуры.
Записываю в базу.
Количество TReeView.Items порядка 10000.
Соответственно делается аналогичное количество Insert в таблицу. Долго.
Есть варианты ускорения записи?
Anatoly Podgoretsky (2007-11-12 11:45:00) [1]Информацию видимо не дождемся.
Anatoly Podgoretsky (2007-11-12 11:44:00) [2]
> Однократный вызов метода Prepare вместо 10000 в цикле, независимо
> от БД должны дать выигрыi.
> З.Ы. И причем здесь парадакс, если, ты уже сказал, "какая
> БД разницы нет" :)
Еще как есть, для любой БД не применимо. По сути IB и LocalSQL и зачем вообще вызывать Prepare, оно само исполнится, если запрос построен правильно, а если нет, то ничего не поможет
ЮЮ (2007-11-12 11:17:00) [3]> И кому же мы будем говорить Prepare в случае фаловых БД?
Да хотя бы компоненту TQuery.
Ибо Prepare все рабно будет вызываться неявно и метод TQuery.PrepareSQL будет вызван 10 000 раз вместо одного.
procedure TQuery.PrepareSQL(Value: PChar);
begin
GetStatementHandle(Value);
if not Local then
SetBoolProp(StmtHandle, stmtUNIDIRECTIONAL, FUniDirectional);
end;
а так "файловая БД" это все-таки не типизированный файл, то и GetStatementHandle(Value) тоже "не слаб"
Reindeer Moss Eater (2007-11-12 11:04:00) [4]И кому же мы будем говорить Prepare в случае фаловых БД?
ЮЮ (2007-11-12 11:03:00) [5]> асинхронный инсерт выполняется столько же времени что и
> синхронный.
Но выполняться он будет на сервере, а клиент в то время будет искать следующую папку (если ты [9] внимательно читал)
> Ага. Особенно если там парадокс, dbase или access.
Однократный вызов метода Prepare вместо 10000 в цикле, независимо от БД должны дать выигрыi.
З.Ы. И причем здесь парадакс, если, ты уже сказал, "какая БД разницы нет" :)
Reindeer Moss Eater (2007-11-12 10:55:00) [6]асинхронный инсерт выполняется столько же времени что и синхронный.
А переметрический запрос, например, всяко быстрее выполнится в цикле быстрее
Ага. Особенно если там парадокс, dbase или access.
ЮЮ (2007-11-12 10:55:00) [7]> И какое отношение имеет к этому "какая БД?"
Любой вопрос в раздеде БД слкдует начинаться с указания типа БД. :)
Reindeer Moss Eater (2007-11-12 10:51:00) [8]И какое отношение имеет к этому "какая БД?"
ЮЮ (2007-11-12 10:50:00) [9]> Какая бы она ни была, но кроме инсерта все равно ничего
> нет.
Но в приложении на дельфи нет SQL-кого INSERT.
А переметрический запрос, например, всяко быстрее выполнится в цикле быстрее, что и для Deplhi, что и для сервера.
Потом, если TReeView не самоцель, а средство достижения цели, то вставлять записи можно и по мере их нахождения, что тоже занимает немалое время. А если выполнять из асинхронно, то к моменту полного построения TReeView будет уже заполнена и таблица.
Автору. А что делать с данными в таюлице, если на диске структура уже изменилась?
Reindeer Moss Eater (2007-11-12 10:40:00) [10]Какая бы она ни была, но кроме инсерта все равно ничего нет.
trubin (2007-11-12 10:30:00) [11]
> Соответственно делается аналогичное количество Insert в
> таблицу. Долго.
Насколько долго, какая БД
Anatoly Podgoretsky (2007-11-12 10:26:00) [12]
> как лучше сохранить список файлов и папок в таблицу
Cm [3]
Reindeer Moss Eater (2007-11-12 10:25:00) [13]Точно так же как и список не файлов и список не папок.
webpauk (2007-11-12 10:12:00) [14]
> Anatoly Podgoretsky © (12.11.07 10:00) [2]
ладно... оттолкнемся от файловой системы.
как лучше сохранить список файлов и папок в таблицу
Сергей М. (2007-11-12 10:08:00) [15]
> Долго.
ПРобуй следующий цикл:
var
CurItem: TTreeNode;
begin
CurItem := TreeView1.Items.GetFirstNode;
while CurItem <> nil do
begin
.. INSERT ..
CurItem := CurItem.GetNext;
end;
end;
Anatoly Podgoretsky (2007-11-12 10:00:00) [16]Поскольку это TReeView, а не какой то ДБ вариант, то только отдельным INSERT
ЮЮ (2007-11-12 09:49:00) [17]Хлтя бф пажи код своего Insert-а в таблицу, чтобы было от чего отталкиваться. БД какая?