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

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

dataset->file [D7, XP]


Страницы:   1 2

картман ©   (2010-10-06 09:33:00) 

Всем привет.

нужно быстро перенести данные из бд в файл.
делать так:

while not query.eof do
begin
 StringList.Add(query.FieldByName('aaa').AsString);
 query.Next;
end;

StringList.SaveToFile...

долго получается. Если выделить много памяти в PChar и в нее Move переносить - быстрее, но все равно не устраивает. Как добиться такой же скорости, как TADODataSet.SaveToFile?


картман   (2010-10-07 17:39:00) [1]


> sniknik ©   (07.10.10 09:18) [22]

Ура!
спасибо большое!


картман   (2010-10-07 17:33:00) [2]


> sniknik ©   (07.10.10 09:18) [22]


> дизейблить контролы нужно в любом случае даже если контролов
> нет

што?


Anatoly Podgoretsky   (2010-10-07 10:25:00) [3]

> sniknik  (07.10.2010 09:18:22)  [22]

И не использовать в связке master/detail

> как написал так и получил
это пишется так, за что боролся, на то и напоролся.


sniknik   (2010-10-07 09:18:00) [4]

> В [1] приведен, пожалуй, самый быстрый способ записи файла
зато чтение из рекордсета не самое быстрое. дизейблить контролы нужно в любом случае даже если контролов нет... фишка ADO.

> Во, круто, гадалки делфимастера из отпуска вышли :-)
вышел. а тут борьба все тех же все с тем же... и ничему не учатся.

> по индексу, по названию - это копейки тут.
надо же, лучше всех знаешь... а зачем тогда спрашиваешь? и почему у тебя медленно?

> спасибо, буду знать
не будешь. запоминание комбинаций мало чего дает (справочник шаманских рецептов, без понимания...), лучше бы почитал, что они значат, и тогда сразу бы видел почему одно к другому не подходит.
но это не имеет отношения к тому почему медленно и жрет память... как написал так и получил .


Anatoly Podgoretsky   (2010-10-06 11:40:00) [5]

> Игорь Шевченко  (06.10.2010 11:28:17)  [17]

казак


картман   (2010-10-06 11:39:00) [6]


> Игорь Шевченко ©   (06.10.10 11:28) [17]
>
> терпи

нихачу


картман   (2010-10-06 11:38:00) [7]


> Несовместимая комбинация, т.к. бессмысленная

спасибо, буду знать


Плохиш   (2010-10-06 11:36:00) [8]


> adoquery.CursorLocation = clUseClient
> CursorType = ctOpenForwardOnly

Несовместимая комбинация, т.к. бессмысленная

adodataset
CursorLocation = clUseServer
CursorType = ctOpenForwardOnly
LockType=ltReadOnly


Игорь Шевченко   (2010-10-06 11:28:00) [9]

терпи


картман   (2010-10-06 11:27:00) [10]

select field1 from table1
sql server 2005 express edition
ничего не подключено
adoquery.CursorLocation = clUseClient
CursorType = ctOpenForwardOnly
LockType=ltOptimistic

миллион записей. цикл в [10]. Больше ничего не делаю. Час занимает, плюс-минус.


Плохиш   (2010-10-06 11:18:00) [11]


> долго перемещается по набору. Может из-за TField.AsString?

Это ни какого отношения к перемещению по набору не имеет.

Использовать TADODataSet и не подключать к нему никаких TDatoSource.

Привести здесь сам запрос и озвучить бд.


картман   (2010-10-06 11:13:00) [12]


> Плохиш ©   (06.10.10 11:10) [13]
>
>
> > картман ©   (06.10.10 11:02) [10]
>
> T.e. [1] не нравится?

долго перемещается по набору. Может из-за TField.AsString? Т.е. в том числе и из-за этого.


Плохиш   (2010-10-06 11:10:00) [13]


> картман ©   (06.10.10 11:02) [10]

T.e. [1] не нравится?


Плохиш   (2010-10-06 11:09:00) [14]

Во, круто, гадалки делфимастера из отпуска вышли :-)


картман   (2010-10-06 11:05:00) [15]


> И. Павел ©   (06.10.10 11:01) [9]

нет


картман   (2010-10-06 11:02:00) [16]

жрет память:

 while not q1.Eof do
 begin
   q1.Fields[0].GetData(tmp);
   len := StrLen(tmp);
   Move(tmp^, (buff + curpos)^, len);
   Move(#13#10[1], (buff + curpos + len)^, 2);
   curpos := curpos + len + 2;
   q1.Next;
 end;

не, ну откуда?


И. Павел   (2010-10-06 11:01:00) [17]

> по набору долго перемещает

А может быть у вас Grid не отключен и он еще и обновляется? Вот тогда Next действительно займет массу времени.


картман   (2010-10-06 11:00:00) [18]


> Anatoly Podgoretsky ©   (06.10.10 10:07) [5]


> Так TADODataSet.SaveToFile и так пишет в файл, чего еще?

не нужен мне его формат или тем паче хмл, увы


> Юрий Зотов ©   (06.10.10 10:16) [6]
>
> > картман ©   (06.10.10 09:46) [2]
>
> Если "по набору долго перемещает", то никакие извраты с
> памятью не помогут. В [1] приведен, пожалуй, самый быстрый
> способ записи файла, без всяких дополнительных операций.
>
>
> Избавьтесь от FiledByName. Я же не зря написал Fileds[..
> .].

 по индексу, по названию - это копейки тут. TField.GetData - ща сделал, вроде как быстрее, но оно как-то чем дальше по набору, тем медленнее


> MonoLife ©   (06.10.10 10:51) [7]
>
> не думаю что есть, но вдруг... на время записи отключите
> визуальный контрол..

да, контролы - может кто лазил в DevExpress компоненты, например TcxDBTreeList(или как-то так) - они довольно шустро загружают...


MonoLife   (2010-10-06 10:51:00) [19]

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


Юрий Зотов   (2010-10-06 10:16:00) [20]

> картман ©   (06.10.10 09:46) [2]

Если "по набору долго перемещает", то никакие извраты с памятью не помогут. В [1] приведен, пожалуй, самый быстрый способ записи файла, без всяких дополнительных операций.

Избавьтесь от FiledByName. Я же не зря написал Fileds[...].


Страницы:   1 2

Наверх

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