Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2007, 14:20   #1
azat
Пользователь
 
Регистрация: 26.11.2007
Сообщений: 56
По умолчанию КЛАДР

Здравствуйте.
У меня следующая проблем. Обрабатываю КЛАДР
(классификатор адресов http://www.gnivc.ru/document.asp?id=80 если кому интересно)
имеется таблица адресов около 180'000 записей. в таблице строковое поле поле Name , содержащее название объекта классификатора. Работаю с таблицей через ADO (ADOConnection+ADOTable).
таблицу запихнел в MSACCESS. проиндексировал поле Name.
Теперь: на форме имеется Tedit , куда вводится навание (например города). и DBGrid , где отображаются названия городов, которые начинаются на TEdit.Text. Я делую следующим образом: и вводе символов в TEdit вызываю метод locate:

procedure TForm1.Edit1Change(Sender: TObject);
begin
if length(trim(edit1.Text))>0 then begin
ADOTable1.Locate('Name',trim(edit1. Text),[loCaseInsensitive, loPartialKey]);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ADOTable1.IndexFieldNames:='Name';
end;



Проблема в том что это работает очень долго, несмотря на то что поле проиндексировано. Кто нибудь знает как можно ускорить поиск???
azat вне форума Ответить с цитированием
Старый 26.11.2007, 14:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты бы луче делал это по другому событи. например по нажатию Энтера
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.11.2007, 14:56   #3
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

TTable в топку используй Query
И работай запросами
select Name from NameTable where Name like %Edit.Text%
что то типа такого...
приросто просзводительности ощутится...
dron-s вне форума Ответить с цитированием
Старый 26.11.2007, 15:47   #4
azat
Пользователь
 
Регистрация: 26.11.2007
Сообщений: 56
По умолчанию

Цитата:
Сообщение от dron-s Посмотреть сообщение
TTable в топку используй Query
И работай запросами
select Name from NameTable where Name like %Edit.Text%
что то типа такого...
приросто просзводительности ощутится...
если делать Query.execSql; при срабатывании onChange то работает на много дольше.....
azat вне форума Ответить с цитированием
Старый 26.11.2007, 15:52   #5
azat
Пользователь
 
Регистрация: 26.11.2007
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ты бы луче делал это по другому событи. например по нажатию Энтера
Необходимо чтобы по мере ввода названия курсор позиционировался на более подходящей записи.
У меня Сore2 1.86/1024mb ... задержка при очередном нажатии на клавиатуру (срабатывании OnCange для Tedit) примерно секнда - много вато, долго слишком... (((
azat вне форума Ответить с цитированием
Старый 26.11.2007, 15:59   #6
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

Цитата:
если делать Query.execSql
не надо ExecSQL делать, хватит простого открытия DataSet...
Цитата:
Необходимо чтобы по мере ввода названия курсор позиционировался на более подходящей записи.
пример такого детища я тебе выше написал
dron-s вне форума Ответить с цитированием
Старый 26.11.2007, 16:00   #7
azat
Пользователь
 
Регистрация: 26.11.2007
Сообщений: 56
По умолчанию

может быть locate работает без использования индекса??? тогда как его подключить??? кто нибудь знает???
azat вне форума Ответить с цитированием
Старый 26.11.2007, 16:07   #8
azat
Пользователь
 
Регистрация: 26.11.2007
Сообщений: 56
По умолчанию

делая
select Name from NameTable where Name like %Edit.Text%
я сужу диапозон записей, а мне нужно позиционировать на подходящей записи и чтоб остальные записи были доступкны (при нажатии клавиш вверх и вниз)
(((
azat вне форума Ответить с цитированием
Старый 26.11.2007, 17:06   #9
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

dxDBGrid и контекстный поиск...
вообще ничего делать не надо...
только подключить DataSet к гриду и настроить некоторые свойства...
dron-s вне форума Ответить с цитированием
Старый 26.11.2007, 18:17   #10
Domovoy
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 254
По умолчанию

А что за база у тебя? Ты в базе таблицу проиндексировал?
Domovoy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц