Форум: "Базы";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизПередача строкового параметра Найти похожие ветки
← →
Бульбаш (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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.04 c