Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.01.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.003 c
15-1284737622
bss
2010-09-17 19:33
2011.01.02
Работа с XML в пространстве имен


2-1286354270
Jacksotnik
2010-10-06 12:37
2011.01.02
Вычисляемое поле


2-1286570962
Andrey K
2010-10-09 00:49
2011.01.02
Как фиксировать изменения в TMemo.


2-1281503294
Molnia
2010-08-11 09:08
2011.01.02
Написание службы с циклом


2-1286286239
alekslep
2010-10-05 17:43
2011.01.02
Delphi и 2 бд





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский