![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы со вставкой записей в таблицу 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]
А что это значит?