Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.02;
Скачать: CL | DM;

Вниз

dataset->file   Найти похожие ветки 

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

Всем привет.

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

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

StringList.SaveToFile...

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


 
Юрий Зотов ©   (2010-10-06 09:41) [1]

var
 F: TextFile;
befin
 AssignFile(...);
 Rewrite(F);
 while not Query.EoF do
 begin
   WriteLn(F, Query.Fields[...].AsString);
   Query.Next
 end;
 CloseFile(F)
end;


 
картман ©   (2010-10-06 09:46) [2]


> Юрий Зотов ©   (06.10.10 09:41) [1]

пробовал.
Да не, по набору долго перемещает.
Поставлю:
ADOQuery.CursorType:=ctOpenForwardOnly;

а что такое ADOQuery.CursorLocation? Т.е. из названия понятно что, как будет быстрее? Где-то нашел совет ставить на сервере - для такой же проблемы.


 
картман ©   (2010-10-06 09:52) [3]

ща копирую очередную строку в PChar:

...
 tmp := q.FieldByName("asd").AsString + q.FieldByName("asd").AsString;
 Move(tmp[1], (strChar + pos)^, Length(tmp));
 pos := pos + Length(tmp);
...

в диспетчере задач непрерывно увеличивается размер занятой памяти - это с чего?


 
картман ©   (2010-10-06 10:07) [4]

TField.GetData - может то?


 
Anatoly Podgoretsky ©   (2010-10-06 10:07) [5]


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

Муж спрашивает жену - ты мне изменяешь?
Да не

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


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

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

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

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


 
MonoLife ©   (2010-10-06 10:51) [7]

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


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


> 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(или как-то так) - они довольно шустро загружают...


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

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

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


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

жрет память:

 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:05) [11]


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

нет


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

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


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


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

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


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


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

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


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


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

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

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

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


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

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

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


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

терпи


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


> adoquery.CursorLocation = clUseClient
> CursorType = ctOpenForwardOnly

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

adodataset
CursorLocation = clUseServer
CursorType = ctOpenForwardOnly
LockType=ltReadOnly


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


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

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


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


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

нихачу


 
Anatoly Podgoretsky ©   (2010-10-06 11:40) [21]

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

казак


 
sniknik ©   (2010-10-07 09:18) [22]

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

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

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

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


 
Anatoly Podgoretsky ©   (2010-10-07 10:25) [23]

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

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

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


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


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


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

што?


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2011.01.02;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.011 c
15-1285071657
неокубинец
2010-09-21 16:20
2011.01.02
нашёл Зенит 11


2-1286465941
Festil
2010-10-07 19:39
2011.01.02
Оптимизация операций над массивами


15-1284756202
Макс Черных
2010-09-18 00:43
2011.01.02
Может кто знает название и автора рассказа?


2-1286626352
grisme
2010-10-09 16:12
2011.01.02
TService, TThread и запись в файл.


2-1286617311
Первокурсница
2010-10-09 13:41
2011.01.02
При щелчке на ячейке DBGrid загружать изображение в Image1 из БД