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