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