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

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

Странно ведет себя цикл while not DataSet.Eof do [D6, Access]


Diouzshev ©   (2002-11-27 18:57:00) 

Есть примерно такой код:

while not DataSet.Eof do
begin
with DataSet do {TADODataSet}
begin
Line := Fields[0].AsString;
for i:= 1 to FieldsCount - 1 do
Line:= Line + #9 + Fields[0].AsString;
writeln(f, Line);
Next;
end;
end;

Непоняностей две:
1. Почему это безобразие выполняется ок. 8 мин (22000 записей)
2. Скорость падает по мере вызова Next (к концу DataSet примерно в 3 раза)

Обидно то, что сам Access делает экспорт в файл секунд за 10-15.

PS
Delphi 6, ADO, Access
Настройки ADO-компонент - по умолчанию.


Diouzshev   (2002-12-03 16:14:00) [1]

Все так, но проблема с Next меня интересовала из принципа :)) - не всегда спасает SELECT * INTO

про SELECT * INTO я понял уже давно и успешно применил :) (за что спасибо)


sniknik   (2002-12-03 15:28:00) [2]

нет пределов совершенству! :о)

запрос Access-а (вернее Jet-а) на переброску в текст
SELECT * INTO Test#Txt IN "D:\" "Text;" FROM plucash
Выполнено применительно к 52798 записям. (no recordset)
выполняется 13.5 сек.
plucash - таблица dBase IV (подключение через jet тоже к нему)
24 поля, обший размер полей 429 байт. win2000, celeron 1000

то же самое из Access (mdb) в Text 11 сек.
сравнивай.



Diouzshev   (2002-12-03 15:04:00) [3]

Проблема была решена очисткой свойства IndexFieldName (не все было по умолчанию %{ ), время сократилось до 40 секунд, имхо - это приемлемо.


Diouzshev   (2002-11-27 20:28:00) [4]

>надоедливый LoginPromt отключается в ADOConnection.LoginPromt:= False.

Это было отличие от настроек по умолчанию %))


sniknik   (2002-11-27 19:41:00) [5]

>А обратно можно? (в базу)
конечно, анологично, поменяй местами in и out.

дока
D:\Program Files\Common Files\Microsoft Shared\Office10\1049\JETSQL40.CHM
см куда Мс Офис ставил.

надоедливый LoginPromt отключается в ADOConnection.LoginPromt:= False.


Diouzshev   (2002-11-27 19:35:00) [6]

For sniknik © (27.11.02 19:28)

>так им (Access-ом) и делай. и быстрее и без ошибок :-) Line:= >Line + #9 + Fields[0].AsString;
Ctrl+C Ctrl+V, сам знаешь %)

>примерный запрос
>SELECT * INTO Test#Txt IN "D:\" "Text;" FROM TableInAccess
Ссылка на доку по этой теме есть?
А обратно можно? (в базу)

>Настройки ADO-компонент на Jet. где ты взял по умолчанию
ещё надоедливый LoginPromt %)


sniknik   (2002-11-27 19:28:00) [7]

так им (Access-ом) и делай. и быстрее и без ошибок :-) Line:= Line + #9 + Fields[ 0].AsString;

примерный запрос
SELECT * INTO Test#Txt IN "D:\" "Text;" FROM TableInAccess

Delphi 6, ADO, Access
Настройки ADO-компонент на Jet. где ты взял по умолчанию?


Наверх

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