Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

Процедура обновления БД   Найти похожие ветки 

 
syte_ser78 ©   (2005-07-12 17:38) [0]

Есть две таблици 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-12 17:46) [1]

На вид, код верный. Только имена по умолчанию поменять на нормальные надо бы.
Такое, впечатление, что индекс ты таки не используешь. Это долго, или у тебя комп сильно тормознутый. Попробуй использовать LocalSQL.


 
syte_ser78 ©   (2005-07-12 17:48) [2]

ANB ©   (12.07.05 17:46) [1]
Индекс не использую. Для этого ИНДЕКСНОЕ в кавычки и взял. Что ты имееш ввиду под "нормальными именами"? Вместо Table1.Fields[i] - Table1NAME и т.д.?


 
ANB ©   (2005-07-12 18:00) [3]


> Индекс не использую
- так используй !

Table1 => tblMain или еще как нибудь осмысленно. Если у тебя будет под сотню дейтасетов, как ты в них разбираться то будешь ?


 
evvcom ©   (2005-07-13 08:51) [4]

Использовать LocalSQL - будет быстрее гораздо. Имхо.


 
syte_ser78 ©   (2005-07-13 09:40) [5]

ANB ©   (12.07.05 18:00) [3]
Подскажи, как будет выглядеь вышенаписанный код при использовании индексов


 
ANB ©   (2005-07-13 09:54) [6]

Я давненько с парадоксом не работал, но примерно (и все имхо) :
1. Индекс надо создать (например в DataBase Desktop) и желательно в обоих таблицах. И, судя по коду, индекс должен быть уникальным.
2. В компонентах TTable индекс надо подключить.
3. Код не поменяется.
Если я чего не так написал - ща придут мастера, поправят и уточнят.



Страницы: 1 вся ветка

Текущий архив: 2005.08.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.055 c
14-1122558056
lookin
2005-07-28 17:40
2005.08.21
Человеческая жизнь стоит 1 миллион евро


4-1120376910
SpyBoy
2005-07-03 11:48
2005.08.21
Менеджер процессов


14-1122389458
Makhanev A.S.
2005-07-26 18:50
2005.08.21
Проблема с ЖК монитором


14-1122483433
Димаска
2005-07-27 20:57
2005.08.21
IRC в E-Mule


1-1123136634
tttyu
2005-08-04 10:23
2005.08.21
Отображение большого файла