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

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

Как правильно работать с базами Access ? [mdb]


Andrewtitoff ©   (2008-02-26 13:41:00) 

Здравствуйте!, подскажите пожалуйста как лучше работать с Access-овскими базами, у меня база состоит из нескольких таблиц, основная(которая нужна мне) находится на сервере, мне нужно периодически сверять ее со списком(он у меня в текстовике) и править,  я пользуюсь для доступа к базе ADO, все отлично работает, только как то медленно(у меня в базе около 7-ми тысяч записей, я читаю с текстового файла, там примерно 3700 записей и сверяю есть ли это в базе и если да то записываю туда некий параметр) так вот все это дело обрабатывается порядка 10-ти часов..., можно ли это как нибудь ускорить?, или я что то не так делаю?
Вот часть кода:

procedure TForm1.Button2Click(Sender: TObject);
var
f : textfile;
f2 : textfile;
s : string;
ch1 : boolean;
count  : integer;
begin
......
count:=0;
AssignFile(f,'regnum.txt');
AssignFile(f2,'nonregnum.txt');
Reset(f);
Rewrite(f2);
while not Eof(f) do
begin
Form1.Update;
readln(f,s);
inc(count);
Form1.Caption:='['+Format('%.4d',[count])+'] = '+s;
ADOTable4.First;
ch1:=false;
while not ADOTable4.Eof do
 begin
 if ADOTable4.Fields[0].Value=s then
  begin
  ListBox1.Items.Add(s);
  label3.Caption:='OK';
  ADOTable4.edit;
  ADOTable4.Fields[63].Value:=-1;
  ADOTable4.Post;
  ADOTable4.Last;
  ch1:=true;
  Break;
  end;
 ADOTable4.Next;
 end;
if ch1=false then
 begin
 ListBox2.Items.Add(s);
 label3.Caption:='False';
 Writeln(f2,s);
 end;
end;
closeFile(f);
closeFile(f2);
end;


Сергей М.   (2008-02-26 15:19:00) [1]


> поменять на Да?,


Да.


> что выбрать


Очевидно же - "Совпадения не допускаются"


> Для связанных таблиц невозможно изменение данного свойства


"Развяжи" соотв.таблицы, создай соотв.индексы, затем снова "свяжи".


Andrewtitoff   (2008-02-26 15:12:00) [2]

млин, "Для связанных таблиц невозможно изменение данного свойства"..., а как создать индекс по полю?


Andrewtitoff   (2008-02-26 15:08:00) [3]

А как это сделать?
В режиме конструктора Индексированное поле: нет поменять на Да?,
если так то что выбрать ("Допускаются совпадения"или"Совпадения не допускаются")?


Сергей М.   (2008-02-26 15:03:00) [4]


> можно поменять на индексированное?


Можно.
Только не поменять, а просто создать уникальный индекс по этому полю.
Индекс никак не повлияет на работоспособность прочих объектов БД, но при этом позволит многократно ускорить позиционирование в наборах данных, формируемых запросамик этой таблице.


Andrewtitoff   (2008-02-26 14:51:00) [5]

Ясно, а его можно поменять на индексированное?, ничего от этого не изменится в работоспособности?(там много связанных таблиц)


Сергей М.   (2008-02-26 14:25:00) [6]


> это оно?


Оно самое.


> повторятся немогут


Не суть как важно.

Важней то, что поиск записи по индексированному полю с использованием SQL-запроса (см. TADOQuery) в твоем случае будет гораздо быстрей.


Andrewtitoff   (2008-02-26 14:21:00) [7]

Написанно:
Индексированное поле: нет

это оно?...

Там кстати в Fields[0] данные не повтаряются, там хранятся регистрационные номера лифтов, так что они повторятся немогут...


Сергей М.   (2008-02-26 14:14:00) [8]

Открой базу средствами MS Access.
Открой таблицу в режиме конструктора - там и найдешь инф-цию об индексах.


Andrewtitoff   (2008-02-26 14:06:00) [9]

Нет, не я..., эта база задолго до меня тут, и человек который ее разрабатывал здесь больше не работает и контакта с ним нету... =(((


Сергей М.   (2008-02-26 13:59:00) [10]


> Честно говоря незнаю


Значит нет.

Разработчик базы ты ?


Andrewtitoff   (2008-02-26 13:55:00) [11]

> ADOTable4.Last; <--  это зачем ?
Ой, эт ненадо, это у меня сначала вместо Break стояло...


Andrewtitoff   (2008-02-26 13:53:00) [12]

Честно говоря незнаю, а как это можно узнать?, я еще как то не очень разобрался как работать с базами...  =(((


Сергей М.   (2008-02-26 13:52:00) [13]

ADOTable4.Post;
ADOTable4.Last; <--  это зачем ?


Сергей М.   (2008-02-26 13:46:00) [14]

Индекс по полю таблицы, с которым ассоциирован объект Fields[0], имеется ?


Наверх

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