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

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

ADO - вставка записей [D5, Access]


FireStream ©   (2002-09-03 23:31:00) 

Здравствуйте!
Пользуюсь TADOCommand для вставки записей в БД.
Записей обычно бывает много и поэтому происходит это дело очень долго:(
Нельзя ли как-то убыстрить?
Работаю обычно
with TADOCommand.Create(nil) do
try
Connection := MainDB;
...
{в цикле}
CommandText := Format("insert into %s(%s, %s) values(%d, %d)", [....]);
Execute;
...
finally
Free;
end;


Виталий Панасенко   (2002-09-05 09:06:00) [1]

Установи курсор на Server и TableDirect := True


ЮЮ   (2002-09-05 03:13:00) [2]

>Так работает раза в два-три быстрей. Если ещё как-то можно убыстрить, с удовольствием бы услышал...

Перед началом цикла открыть транзакцию, в конце - закрыть. Ещё в 2-3 раза ускоришься :-)


FireStream   (2002-09-04 14:37:00) [3]

В общем как я понимаю в результате этого каждый раз не происходит интерпретация SQL-запроса. Из-за того, что Prepared=True, запрос один раз подготавливается АДО для выполнения, и затем выполняется(один и тот же запрос) с различными данными. Если в цикле каждый раз менять CommandText, то с Prepared = True выполняется только дольше - из-за того что команда подготавливается АДО прежде чем выполниться. А в принципе, если ситуация в чём-то отличается от моей, то с Parameters ничуть не быстрее.


Nikolai_S   (2002-09-04 12:45:00) [4]

Почему с параметрами работает быстрее?
И как влияет на это свойтсво Prepared?


FireStream   (2002-09-04 11:51:00) [5]

Сам себе и отвечу на свой же вопрос:))
Надо делать так:
with TADOCommand.Create(nil) do
try
Connection := MainConnection;
Parameters.CreateParameter("Parameter1", ftInteger, pdInput, 0, 0);
Parameters.CreateParameter("Parameter2", ftInteger, pdInput, 0, 0);
CommandText := Format("insert into %s(%s, %s) values(:Parameter1, :Parameter2)", [...]);
Prepared := True;

...

{в цикле}
Parameters[0].Value := ...;
Parameters[1].Value := ...;
Execute;

...

finally
Free;
end;

Так работает раза в два-три быстрей. Если ещё как-то можно убыстрить, с удовольствием бы услышал...


Наверх

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