Запрос - один, параметры - похожие, выполняется - по-разному :(

Karaphin
Дата: 10.03.2003 17:02:45
Добрый день/утро/...
Имеется MSSQL2000, Delphi6, BDE
В TQuery запрос типа

Select

*
From
table1
Where
field1 like '%' + (:Name) + '%'


Соответственно, один параметр типа String

Беру строку (внешнюю), разбивая на куски и вызываю запрос, где параметр = по очереди каждый из кусков.

for f := 0 to num - 1 do

with ... do begin
if active then close;
ParamByName('Name').AsString := StrArray[f];
open;
...
end;


Первый проход цикла - < 1 sec, второй еще ни разу не дождался :(
в table1, смешно сказать, тыщи 2-3 строк

Может, где-то что-то как-то надо чистить (в TQuery) - я, глупый, не знаю.
ПАМАГИТЕ!!!
Раньше подобные вещи писал и ничего, а теперь - лажа какая-то :(((

Заранее благодарен...
duha
Дата: 10.03.2003 18:05:38
привет.

может и ошибаюсь,
1. попробуй сделать поле, по которому ищешь, индексированным
2. напиши СП на сервере, в нее помести свой запрос вот так

create procedure итд
as
set nocount on
тут твой селект
--------------------------
и потом вызывай через StoredProc

удачи
Cat2
Дата: 10.03.2003 21:21:04
Open я вижу. А Close-то присутствует?
======
Индексирование случае с like %...% не помогает.
MONITOR
Дата: 11.03.2003 01:45:12
To Cat2: Close в этой строке if active then close;

- Может Close делать всегда, без проверки.
- Можно попробовать использовать компоненты не BDE, а ADO, они все же ближе MS SQL.
- А текст запроса где хранится и как формируется?
vladuha
Дата: 11.03.2003 08:42:57
Лучше делать не так, а вот как:

for f := 0 to num - 1 do
with ... do begin
if active then close;
Query.SQL.Add('Select * From table1 Where field1');
SQL.Add('like ''%'+StrArray[f]+'%''');
open;
...
end;

Тады все будет работать
pkarklin
Дата: 11.03.2003 08:55:00
To vladuha

>Query.SQL.Add('Select * From table1 Where field1');
>SQL.Add('like ''%'+StrArray[f]+'%''');

а Query.SQL.Clear Пушкин будет делать, и че вы все уперлись в клиента, посмотри че на сервак уходит и че там делается!
duha
Дата: 11.03.2003 08:57:15
а перед query.sqll.add
сделать query.sql.clear ?
SmaLL
Дата: 11.03.2003 09:44:34
field1 like '%' + (:Name) + '%'

А зачем :Name в скобках?
Karaphin
Дата: 11.03.2003 14:45:24
2 SmaLL: без скобок он переменную не воспринимает.
На серваке там все нормально (подтверждно Query Analizer'ом), по поводу Close - такая же структура неоднократно срабатывала. Просто оказалось, что BDE'шные компоненты почему-то начинает плющить, если открыто более чем сколько-то там DataSet'ов (количество вполне разумное, штук 15, в каждом не больше ДЕСЯТКА строк). Пришлось делать еще 1 close после обработки, хотя ПО ИДЕЕ с таким количеством информации это абсолютно необязательно. Делфю начинало корячить на возвращении из процедуры GetCallBack (стандартный юнит DBTables).
Спасибо всем, кто проявил участие :)