Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запись дерева в таблицу [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-а в таблицу, чтобы было от чего отталкиваться. БД какая?


Наверх

Титульная страница Поиск, карта сайта Написать письмо