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

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

Запрос SQL [D7, XP]


Страницы:   1 2

Коля ©   (2014-02-12 15:42:00) 

Привет уважаемы мастера программирования!
Есть таблица в dbf. В ней больше 30000 строк.
делаю поиск по нет SQL- запросом
procedure TForm2.edt2KeyUp(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 qry1.SQL.Text:='SELECT * FROM sp_ls WHERE UPPER(TORG) LIKE UPPER('''+edt2.Text+'%'')';
qry1.Active:= True;
qry1.Open;
end;

поиск работает, но очень медленно (один символ, введенный в edit2, обрабатывает примерно 2 сек).
Подскажите можно ли по такой большой таблице уменьшить время поиска?


Inovet   (2014-02-14 14:29:00) [1]

> [21] _Amoeba   (14.02.14 12:23)

Да заметили, только грузить автора не стали.


_Amoeba   (2014-02-14 12:23:00) [2]

Как-то никто не заметил у ТС в коде такое:

qry1.Active:= True;
qry1.Open;


Здесь ведь подряд делается одно и то же, только названо оно по-разному.


Коля   (2014-02-14 08:23:00) [3]

спасибо. все разобрался. Сделал в access.


Anatoly Podgoretsky   (2014-02-13 14:13:00) [4]


> Коля   (12.02.14 23:58) [16]
> > ДБФ принципиально?</>Да не принципиально. пробовал через
> Access. но не получилось ни чего.Кинете ссылку где почитать
> по базы в Access, пожалуйста.

Забудь про Акцесс - слишком сложно и плохо для тебя, лучше изучи MS SQL


sniknik   (2014-02-13 08:30:00) [5]

> Кинете ссылку где почитать по базы в Access
справка есть в акцессе (не уверен про новые но тот что в 2003м офисе содержит), можно стартовать без него сразу файлом - JETSQL40.CHM (найти у себя на компе).
это самая полезная помощь про базы акцесс что вообще встречал... ИМХО конечно.


Inovet   (2014-02-13 00:12:00) [6]

> [16] Коля   (12.02.14 23:58)

Только не путай Access и Jet — первый оболочка над вторым, из Делфи надо работать со вторым.


Коля   (2014-02-12 23:58:00) [7]


> ДБФ принципиально?
</>
Да не принципиально. пробовал через Access. но не получилось ни чего.
Кинете ссылку где почитать по базы в Access, пожалуйста.


Inovet   (2014-02-12 23:45:00) [8]

> [12] Коля   (12.02.14 22:59)
> Нет не фокс у меня. в стандартный DBE администратор

Ну так в БДЕ что поставил на ДБФ. Я его не помню когда последний раз запускал 10+ лет назад, где-то там должны быть и индексы и тип базы для подключения.

А вообще выбросить его надо на ту же свалку, где и подобрал. ДБФ принципиально?


Dennis I. Komarov   (2014-02-12 23:11:00) [9]


> Молчит зараза, истинный партизан.

Пытки запрещены женевской конвенцией, да не знает он.


Anatoly Podgoretsky   (2014-02-12 23:00:00) [10]


> Коля   (12.02.14 22:59) [12]

Молчит зараза, истинный партизан.


Коля   (2014-02-12 22:59:00) [11]


> Ну так речь о Фоксе скорее всего.

Нет не фокс у меня. в стандартный DBE администратор


Anatoly Podgoretsky   (2014-02-12 22:59:00) [12]


> это индексное выражение для Фокса.

Такое же и для dBase (LocalSQL)


sniknik   (2014-02-12 22:46:00) [13]

> Ну так речь о Фоксе скорее всего.
вряд ли. вот это вот, явно указывает на дельфи -
procedure TForm2.edt2KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
...
end;


Юрий Зотов   (2014-02-12 22:12:00) [14]

> Коля   (12.02.14 15:42)

Попробуйте ускорить "малой кровью":

1. У Edit2 включите UpperCase, а из строки запроса второй UPPER уберите;
2. Edit2.Text передавайте не в строке запроса, а через параметр;
3. Строку запроса сделайте константой и вынесите за пределы обработчика.
4. Присвоение qry1.SQL.Text и Qry1.Prepare тоже вынесите за пределы обработчика.

Ускориться должно, но вот насколько - не знаю. Надо пробовать. Возможно, для такой маленькой таблицы этого будет достаточно.


Inovet   (2014-02-12 20:31:00) [15]

> [7] Inovet ©   (12.02.14 20:30)

UPPER(TORG)
это индексное выражение для Фокса.


Inovet   (2014-02-12 20:30:00) [16]

> [5] sniknik ©   (12.02.14 16:46)
> так например в фоксе можно было д

Ну так речь о Фоксе скорее всего.


Anatoly Podgoretsky   (2014-02-12 16:49:00) [17]

а DBF это какая СУБД?


sniknik   (2014-02-12 16:46:00) [18]

> примером с индексами
не бывает примеров с индексами... бывает, что один и тот же запрос или использует индекс или нет. есть этот самый индекс или нет.

> Что-нить вроде
> UPPER(TORG)
вот это как раз пример не использования индекса даже если он есть. ... хотя... возможны варианты так например в фоксе можно было делать индексы по результатам функций, и соответственно они работали если именно так их, с вызовом функции, и использовать.  

> подскажите полным запросом пожалуйста
'SELECT * FROM sp_ls WHERE TORG LIKE '''+edt2.Text+'%'''


Коля   (2014-02-12 16:25:00) [19]

у меня все поля текстовые.
подскажите полным запросом пожалуйста


Inovet   (2014-02-12 16:20:00) [20]

> [2] Коля   (12.02.14 16:16)
> примером с индексами

Что-нить вроде
UPPER(TORG)


Страницы:   1 2

Наверх

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