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

Вниз

Передача строкового параметра   Найти похожие ветки 

 
Бульбаш   (2005-09-28 15:06) [0]

Пришлось на время отказаться от Oracle и заняться Firebird. Использую FIB+. Столкнулся со следующей проблемой. В запросе ранее использовал выборку типа: ...and upper(a.name) like :p4. Параметр передавал кодом: DM.Kart.Params[3].AsString:="%%". При попытке открытия набора вываливается по ошибке: conversion error from string "%%" (error code -303). Подскажите светлую мысль в чем дело, ибо в IB Expert запрос выполняется без проблем (поле Varchar)


 
Johnmen ©   (2005-09-28 15:18) [1]

Целиком запрос ?
В эксперте можно задавать параметры запроса ?


 
Бульбаш   (2005-09-28 15:23) [2]

select a.id,a.name,a.sklad,a.edi,a.gruppa,a.tip,
a.massa,a.uggr,a.ss,a.ku,a.dv,a.sg,a.uslxr,a.xar,
a.tsenp,a.nacp,a.nac,a.nds,a.nsr,a.tsena,
b.name n_edi,"¹"||c.id||" "||c.name n_sklad
from kart a,edizm b,sklad c
where a.edi=b.id
 and a.sklad=c.id
 and a.id=iif(:p1,:p1,a.id)
 and a.tip=iif(:p2,:p2,a.tip)
 and a.sklad=iif(:p3,:p3,a.sklad)
 and longrupper(a.name) like :p4


 
Johnmen ©   (2005-09-28 15:25) [3]

Ну так понятно. У тебя 7 (семь) параметров :)))
Т.к. напр. p1 и p1 это разные параметры !


 
Курдль ©   (2005-09-28 15:27) [4]

Строковые параметры внутри запроса должны выделяться кавычками. У тебя же - выделяются процентами. Попробуй "%%" передать в параметр вместе с (")


 
Бульбаш   (2005-09-28 15:36) [5]

Не думаю что идет дублирование параметров, этот же код отлично работает с Oracle; Почему то не передается только строковый параметр, так как при удалении этоого условия запрос отрабатывает без проблем. Так же нормально отрабатывает запрос в Expert-е. Проблема как правильно передать строковый параметр (кавычки не проходят)


 
Курдль ©   (2005-09-28 15:46) [6]

Двойные кавычки не проходят - попробуй одинарные! Помню, что где-то на эти грабли с like нарывался! Именно с "%%"!


 
Johnmen ©   (2005-09-28 15:47) [7]

Ну как знаешь... Тебя предупредили...


 
sniknik ©   (2005-09-28 16:05) [8]

Johnmen ©   (28.09.05 15:47) [7]
> Ну как знаешь... Тебя предупредили...
для BDE нормально. для > Использую FIB+
может тоже?... хотя сомнительно.


 
Os ©   (2005-09-28 16:08) [9]

Параметров 7.
Вставь пустой TIBQuery, перемести туда свой запрос и посмотри свойство Params


 
Johnmen ©   (2005-09-28 16:15) [10]

>sniknik ©   (28.09.05 16:05) [8]
>> Ну как знаешь... Тебя предупредили...
>для BDE нормально. для > Использую FIB+
>может тоже?... хотя сомнительно.

В смысле ? что нормально ?
В БДЕ это тоже 7 параметров... И обращается он к ним по номеру...


 
Курдль ©   (2005-09-28 16:26) [11]


> Johnmen ©   (28.09.05 16:15) [10]
> В БДЕ это тоже 7 параметров... И обращается он к ним по номеру...


Я бы так категорично не заявлял! Для тех компонентов, что я обычно использовал, это 4 параметра! Даже если они в списке параметров дизайн-тайма (при просмотре в инспекторе объектов) дублируются, значения все равно им присваиваются одинаковые. Про IB не уверен на 100%, но на 80% - пожалуй!


 
Desdechado ©   (2005-09-28 16:30) [12]

в БДЕ одноименные параметры - разные
а присвоение по имени присваивает только первый встреченный с таким именем
для FIB+ возможен похожий вариант
аргумент "с Оракл работает" не катит, ибо компоненты другие
два процента подряд что означают?


 
Johnmen ©   (2005-09-28 16:30) [13]

>Курдль ©   (28.09.05 16:26) [11]
>значения все равно им присваиваются одинаковые.

Как присваиваются ? Код.


 
sniknik ©   (2005-09-28 16:33) [14]

> В смысле ? что нормально ?
можно хоть 10 одноименных задать, все получат значение (одинаковое) от единственного присвоения (по имени).
а вот до обращения по номеру не досмотрел. ;)
если по номеру то одноименные будут равны по значению первого в списке неважно задавалось ему значение или нет.
(недавно проверял http://delphimaster.net/view/2-1125325409/)


 
Курдль ©   (2005-09-28 16:34) [15]


> Как присваиваются ? Код.


Например, для компонентов SqlDirect:

SDQuery.Parameters.Add("P1", sbjID);


 
Johnmen ©   (2005-09-28 16:37) [16]

>Курдль ©   (28.09.05 16:34) [15]

Я имел в виду присвоение значений параметрам. Уже существующим.


 
Курдль ©   (2005-09-28 16:39) [17]


> два процента подряд что означают?


Это маска оператора like. Имеется в виду "все подряд" или "маска не задана".


 
Бульбаш   (2005-09-28 16:39) [18]

DM.Kart.Close;
DM.Kart.Params[0].AsInteger:=0;  DM.Kart.Params[1].AsInteger:=0;
DM.Kart.Params[2].AsInteger:=0;  DM.Kart.Params[3].AsString:="%%";
DM.Kart.Open;

%% - любое значение поля. При задании фильтра по полю ранее использовал код :DM.Kart.Params[3].AsString:="%"+AnsiUpperCase(Edit2.Text)+"%";


 
Курдль ©   (2005-09-28 16:46) [19]

Для чистоты экскремента предлагаю конструкцию ParamByName("P1").AsString = """%%"""; (три апострофа!)


 
Johnmen ©   (2005-09-28 16:46) [20]

>Бульбаш

Ты ответы читаешь, или они тебе не нужны ?
DM.Kart.Params[6].AsString:="%%";


 
Desdechado ©   (2005-09-28 16:57) [21]

> Имеется в виду "все подряд"
для этого достаточно одного знака процента


 
sniknik ©   (2005-09-28 17:02) [22]

> если по номеру то одноименные будут равны по значению первого в списке неважно задавалось ему значение или нет.
соврал сорри, на самом деле все примут значение последнего присвоенного.
т.е. модифицируя код в ссылке, на такой к примеру
select SEANS, :DT AS DT, :DT AS DT1, :DT AS DT2, :DT AS DT3 from DATA.DBF
where SEANS = :DT

и выполняя
//Query1.ParamByName("DT").AsInteger:= 2;
Query1.Params[1].AsInteger:= 0;
Query1.Params[0].AsInteger:= 1;
Query1.Params[2].AsInteger:= 2;
Query1.Open;

получим четыре столбца двоек


 
Бульбаш   (2005-09-28 17:20) [23]

Пардон, что-то глюкануло, только сейчас все ответы увидел. Спасибо,действительно: продублировал присвоение параметров и все заработало. В ODAC все таки покрасивее было. Подскажите плиз как можно в таком случае задать параметры не по номеру, а по имени, пробую:
DM.Kart.ParamByName(p0).AsInteger:=0 материт - неправильное имя параметра...


 
Курдль ©   (2005-09-28 17:26) [24]

См [19]  :-)


 
Бульбаш   (2005-09-28 17:27) [25]

Тормознул, кавычки в имени параметра не поставил. Все завертелось. ВСЕМ СПАСИБО!!! :)



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

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

Наверх




Память: 0.53 MB
Время: 0.037 c
2-1128957774
Tonich
2005-10-10 19:22
2005.11.06
IdFTPServer


1-1129644065
Вопрос
2005-10-18 18:01
2005.11.06
Как выдрать картинку из Word?


3-1127318171
olevacho_
2005-09-21 19:56
2005.11.06
MySQL ODBC problems


10-1106505855
Fktrc
2005-01-23 21:44
2005.11.06
Подключение GetObject om к уже запущенному Excel


1-1129091826
dreamse
2005-10-12 08:37
2005.11.06
Функция замены слов в тексе