Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.16;
Скачать: CL | DM;

Вниз

Like   Найти похожие ветки 

 
Ann ©   (2003-05-26 12:48) [0]

Добрый день!
Подскажите пожалуйста, в чем моя ошибка.
Пишу в хранимую процедуру
for select spraddr.name from spraddr
where spraddr.code like :stroka
into: stroka2
ничего не возвращает. А если явно указать там же
where spraddr.code like "670000000000000" тогда находит записи.
В чем ошибка?


 
NAlexey ©   (2003-05-26 12:58) [1]

В параметр :stroka невесть что передаешь...


 
Соловьев ©   (2003-05-26 12:59) [2]

СУБД? А так?
...
where spraddr.code like :stroka||"%"
...


 
Ann ©   (2003-05-26 13:09) [3]


> Соловьев © (26.05.03 12:59)
> СУБД? А так?
> ...
> where spraddr.code like :stroka||"%"
> ...

Субд FireBird
так тоже ничего не находит


 
Соловьев ©   (2003-05-26 13:09) [4]

как передаешь параметр?


 
Ann ©   (2003-05-26 13:14) [5]

dm.Proc_adres.Prepare;
dm.Proc_adres.ParamByName("stroka").Value:="670%%%000000000";
dm.Proc_adres.ExecProc;


 
Соловьев ©   (2003-05-26 13:20) [6]


> dm.Proc_adres.ParamByName("stroka").Value:="670%%%000000000";

а что это еще за %%%?



 
Ann ©   (2003-05-26 13:23) [7]

то что на этом месте может быть любой символ.. но когда писала 670000000000000 все равно не находил :(


 
Max Zyuzin ©   (2003-05-26 13:26) [8]

>Ann © (26.05.03 13:23)
Почитай хелп... % значит любое количество любых символов (в том числе и 0), а _ - 1 символ любой.


 
Соловьев ©   (2003-05-26 13:27) [9]

TIBQuery:
select *
from MyProc(:stroka)


в проге
with Query do
begin
Close;
ParamByName("stroka").AsString := Edit1.Text;
if not Prepared then Prepare;
Open;
end;


 
Max Zyuzin ©   (2003-05-26 13:29) [10]

>Ann © (26.05.03 13:23)
Напиши плиз по какой маске тебе надо поиск совершать?


 
Соловьев ©   (2003-05-26 13:30) [11]


> dm.Proc_adres.ExecProc;

А не open надо? может и ошибаюсь...


 
Ann ©   (2003-05-26 13:39) [12]


> Соловьев © (26.05.03 13:27)


Что-то я совсем запуталась.. я писала в query
select * from adres_select
(:result)
то есть выбирала туда уже результат
это неправильно?
и еще вопрос, если мне нужно выбрать значение у которого будут первые три числа постоянные, потом три числа могут быть любые, а потом заканчивается число на еще допустим три постоянных числа, то мне получается нельзя так писать
допустим 670%%%000 то есть если я напишу три% они мне не дают гарантию что там будет три любых значения? (мда, путанно объяснила)


 
bushmen ©   (2003-05-26 13:39) [13]

Open не надо
Просто dm.Proc_adres.ExecProc


 
Zacho ©   (2003-05-26 13:40) [14]

Лучше вообще не использовать TStoredProc, TIBStoredProc.
Подробности - http://www.ibase.ru/devinfo/ibstp.htm


 
Ann ©   (2003-05-26 13:46) [15]

Max Zyuzin ©
да мне нужно по этой строке сделать несколько запросов.
первый: выбираю те у который три первых символа любые, остальные фиксировано нули
второй что первый три чила фиксированы,следующие три любые, потом нули
третий.. и так далее, пока не проверю все 15 символов..


 
bushmen ©   (2003-05-26 13:51) [16]

Тебе достаточно одного "%", чтобы на том месте любое количество любых символов. Чтобы было три любых символа, надо ставить "___" (три символа подчеркивания)


 
Ann ©   (2003-05-26 13:54) [17]


> bushmen © (26.05.03 13:51)

Спасибо!


 
Zacho ©   (2003-05-26 13:55) [18]


> Ann © (26.05.03 13:46)

Начиная с IB 6.0 есть функция SUBSTRING(fieldname FROM n FOR m), не проще ли воспользоваться ей ?


 
bushmen ©   (2003-05-26 13:57) [19]

> Ann ©
Нет проблем


 
Stas ©   (2003-05-26 14:01) [20]

Может лучше сделать так ?
Query.Sql.Clear
Query.SQL.Add( select * from adres_select
("670___000"))


 
Ann ©   (2003-05-26 14:08) [21]

И еще может посоветуете.. Дело в том, что в таблице 670 тыс. записей, а куча выборок.. она ели ворочается.. как лучше организовать выбоки.. на клиентской части в селекте или в хранимых процедурах? есть ли разница?


 
Stas ©   (2003-05-26 14:09) [22]

Лучше в хранимых процедурах.
А что у тебя за СУБД ?


 
Ann ©   (2003-05-26 14:10) [23]

Субд FireBird


 
bushmen ©   (2003-05-26 14:12) [24]

> Ann ©
Так как у тебя по идее сервер мощнее пользовательской машины, то лучше в хранимых процедурах. Ты, надеюсь, проиндексировала таблицу по этому полю?


 
Stas ©   (2003-05-26 14:17) [25]

> bushmen © (26.05.03 14:12)
Даже если в мощности разницы нет, все равно сервер обрабатывает. Только если это хп , то он получил ссылку на нее и обработал, А если это выборка, то теряется время на передачу всех параметров.


 
Ann ©   (2003-05-26 14:21) [26]

ага.. проиндексировала.. но все равно не так быстро как хотелось бы..


 
Zacho ©   (2003-05-26 14:27) [27]


> Ann © (26.05.03 14:21)

Естественно, при like :param индекс не используется, индекс может использоваться только при STARTING WITH и LIKE <значение>%


 
Stas ©   (2003-05-26 14:33) [28]

Может у тебя сервак медленный ?


 
Ann ©   (2003-05-26 14:33) [29]


> Zacho © (26.05.03 14:27)

это как? объясни пожалуйста поподробнее


 
Zacho ©   (2003-05-26 14:42) [30]


> Ann © (26.05.03 14:33)

В смысле подробнее ? Не используется индекс для like :param и все тут. При STARTING WITH :param и LIKE <значение>% (именно конкретное значение, а не параметр) индекс может использоваться.
Вообще, лучше придумай другой способ, чем несколько запросов с like.


 
Ann ©   (2003-05-26 14:50) [31]

всем большое спасибо! :)



Страницы: 1 вся ветка

Текущий архив: 2003.06.16;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.016 c
9-50197
ogo
2003-01-08 11:39
2003.06.16
Dglut


1-50345
HardClubber
2003-06-03 17:54
2003.06.16
Расположение WebBrowser


14-50436
Basic
2003-05-28 01:44
2003.06.16
Ошибка при работе с Rave


9-50193
Plugin
2003-01-02 06:43
2003.06.16
DoCollision в DelphiX


1-50367
NeshBriges
2003-06-04 02:07
2003.06.16
ExtractIcon