![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Процедура обновления БД
syte_ser78 © (2005-07-12 17:38:00)Есть две таблици Paradox
Одна основная (table1) с которой работает приложение и таблица изменений (tbl_update)
Приведенный ниже код обрабатывает 15000 изменений примерно за 10 минут. Долго, хотелось бы поскорее. Насколько плох с точки зрения скорости приведенный ниже код и как лучше?
"Индексное" поле - 'ID'
procedure TForm4.Button1Click(Sender: TObject);
var
i:integer;
begin
ProgressBar1.Position:=0;
ProgressBar1.Max:=tbl_update.RecordCount;
frm_main.Table1.Open;
frm_main.Table1.First;
frm_main.Table1.Filtered:=false;
frm_update.Form4.tbl_update.open;
frm_update.Form4.tbl_update.first;
while not tbl_update.Eof do
begin
if frm_main.Table1.Locate('ID', tbl_updateID.AsVariant, []) then
begin
frm_main.Table1.Edit;
for i:=0 to frm_main.Table1.FieldCount-1 do
frm_main.Table1.Fields[i].AsString:= tbl_update.Fields[i].AsString;
end
else
begin
frm_main.Table1.Append;
for i:=0 to frm_main.Table1.FieldCount-1 do
frm_main.Table1.Fields[i].AsString:= tbl_update.Fields[i].AsString;
end;
ProgressBar1.Position:=ProgressBar1.position+1;
frm_update.Form4.Label4.Caption:=frm_main.Table1NAME.AsString;
frm_main.Table1.Post;
tbl_update.Next;
end;
frm_main.Table1.Close;
frm_main.Table1.Open;
frm_main.load_cmb;
end;
ANB (2005-07-13 09:54:00) [1]Я давненько с парадоксом не работал, но примерно (и все имхо) :
1. Индекс надо создать (например в DataBase Desktop) и желательно в обоих таблицах. И, судя по коду, индекс должен быть уникальным.
2. В компонентах TTable индекс надо подключить.
3. Код не поменяется.
Если я чего не так написал - ща придут мастера, поправят и уточнят.
syte_ser78 (2005-07-13 09:40:00) [2]ANB © (12.07.05 18:00) [3]
Подскажи, как будет выглядеь вышенаписанный код при использовании индексов
evvcom (2005-07-13 08:51:00) [3]Использовать LocalSQL - будет быстрее гораздо. Имхо.
ANB (2005-07-12 18:00:00) [4]
> Индекс не использую
- так используй !
Table1 => tblMain или еще как нибудь осмысленно. Если у тебя будет под сотню дейтасетов, как ты в них разбираться то будешь ?
syte_ser78 (2005-07-12 17:48:00) [5]ANB © (12.07.05 17:46) [1]
Индекс не использую. Для этого ИНДЕКСНОЕ в кавычки и взял. Что ты имееш ввиду под "нормальными именами"? Вместо Table1.Fields[i] - Table1NAME и т.д.?
ANB (2005-07-12 17:46:00) [6]На вид, код верный. Только имена по умолчанию поменять на нормальные надо бы.
Такое, впечатление, что индекс ты таки не используешь. Это долго, или у тебя комп сильно тормознутый. Попробуй использовать LocalSQL.