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

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

Проблемы со вставкой записей в таблицу DBase


Алексей Петухов ©   (2003-08-04 08:18:00) 

Здравствуйте уважаемые мастера.
Проблемы со вставкой записей в таблицу DBase.
Вот при таком раскладе вроде-бы работает, но постпенно замедляется, причем сильно (и это без индексов).
А если цикл Open Closeубрать то вставляет только около 130 записей, потом обшиба.

for i:=1000 to 501000 do
begin
if (int(i/100)=i/100) then
begin
qrTov.Close;
qrTov.Open;
end;
qrTov.InsertRecord([i,"name"+inttostr(501001-i),0,0,0,6]);
( 501001-i)

Здравствуйте уважаемые мастера.
Проблемы со вставкой записей в таблицу DBase.
Вот при таком раскладе вроде-бы работает, но постпенно замедляется, причем сильно (и это без индексов).
А если цикл Open Closeубрать то вставляет только около 130 записей, потом обшиба.

for i:=1000 to 501000 do
begin
if (int(i/100)=i/100) then
begin
qrTov.Close;
qrTov.Open;
end;
qrTov.InsertRecord([i,"name"+inttostr(501001-i),0,0,0,6]);
Label1.Caption:=inttostr(501001-i);
qrTov.ApplyUpdates;
qrTov.CommitUpdates;
ProgressBar1.Position:=i;
application.ProcessMessages;
end;


Подскажите, как правильно работать с таблицами DBaseчерез BDEс помощью TQuery.
И еще я таблицы создаю используя TQuery, и они получаются типа Visual bDase 7. Как с этим бороться?

Заранее благодарен.


stud   (2003-08-04 10:09:00) [1]

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

qrTov.close;
qrTov.sql.text:="insert into .... values...";
qrTov.execsql;


Алексей Петухов   (2003-08-04 10:03:00) [2]

Тот код, который я предложил в качестве иллюстрирующего примера. А приводить здесь код, не имеющий отношения к сути вопроса - не вижу смысла - только дело усложнять. Смылсл действий сводится к примеру. Можно воспринимать его как тестово-отладочный.

А на счет анекдота - хороший был шутник этот Энштейн.


Sergey13   (2003-08-04 09:56:00) [3]

2Алексей Петухов (04.08.03 08:18)
Тестовые данные что ли забиваешь? Другого объяснения для

>qrTov.InsertRecord([i,"name"+inttostr(501001-i),0,0,0,6]);

я не нахожу. Может тогда подождать просто, если все таки работает.

Анекдот в тему.
-Ну и что что моя программа работает на полчаса дольше? Я просто запущу ее на полчаса раньше. И все.


Алексей Петухов   (2003-08-04 09:38:00) [4]

Я использую updatesql.
grTovнаходится в режиме кэширования изменений.
Если я вынесу applyupdatesи commitUpdatesза основной цикл, то после добавлений 500 000 записей я окончания applyupdatesможет неуложиться в 8-ми часовой рабочий день :-).


stud   (2003-08-04 09:08:00) [5]

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


Mike1 Kouzmine1   (2003-08-04 09:02:00) [6]

А что это значит?


Наверх

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