Форум: "Начинающим";
Текущий архив: 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