![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача строкового параметра [D7]
Бульбаш © (2005-09-28 15:06:00)Пришлось на время отказаться от Oracle и заняться Firebird. Использую FIB+. Столкнулся со следующей проблемой. В запросе ранее использовал выборку типа: ...and upper(a.name) like :p4. Параметр передавал кодом: DM.Kart.Params[3].AsString:='%%'. При попытке открытия набора вываливается по ошибке: conversion error from string "%%" (error code -303). Подскажите светлую мысль в чем дело, ибо в IB Expert запрос выполняется без проблем (поле Varchar)
Бульбаш (2005-09-28 17:27:00) [1]Тормознул, кавычки в имени параметра не поставил. Все завертелось. ВСЕМ СПАСИБО!!! :)
Курдль (2005-09-28 17:26:00) [2]См [19] :-)
Бульбаш (2005-09-28 17:20:00) [3]Пардон, что-то глюкануло, только сейчас все ответы увидел. Спасибо,действительно: продублировал присвоение параметров и все заработало. В ODAC все таки покрасивее было. Подскажите плиз как можно в таком случае задать параметры не по номеру, а по имени, пробую:
DM.Kart.ParamByName(p0).AsInteger:=0 материт - неправильное имя параметра...
sniknik (2005-09-28 17:02:00) [4]> если по номеру то одноименные будут равны по значению первого в списке неважно задавалось ему значение или нет.
соврал сорри, на самом деле все примут значение последнего присвоенного.
т.е. модифицируя код в ссылке, на такой к примеру
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;
получим четыре столбца двоек
Desdechado (2005-09-28 16:57:00) [5]> Имеется в виду "все подряд"
для этого достаточно одного знака процента
Johnmen (2005-09-28 16:46:00) [6]>Бульбаш
Ты ответы читаешь, или они тебе не нужны ?
DM.Kart.Params[6].AsString:='%%';
Курдль (2005-09-28 16:46:00) [7]Для чистоты экскремента предлагаю конструкцию
ParamByName('P1').AsString = '''%%''';(три апострофа!)
Бульбаш (2005-09-28 16:39:00) [8]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:39:00) [9]
> два процента подряд что означают?
Это маска оператора like. Имеется в виду "все подряд" или "маска не задана".
Johnmen (2005-09-28 16:37:00) [10]>Курдль © (28.09.05 16:34) [15]
Я имел в виду присвоение значений параметрам. Уже существующим.
Курдль (2005-09-28 16:34:00) [11]
> Как присваиваются ? Код.
Например, для компонентов SqlDirect:
SDQuery.Parameters.Add("P1", sbjID);
sniknik (2005-09-28 16:33:00) [12]> В смысле ? что нормально ?
можно хоть 10 одноименных задать, все получат значение (одинаковое) от единственного присвоения (по имени).
а вот до обращения по номеру не досмотрел. ;)
если по номеру то одноименные будут равны по значению первого в списке неважно задавалось ему значение или нет.
(недавно проверял http://www.delphimaster.ru/cgi-bin/forum.pl?id=1125325409&n=18)
Johnmen (2005-09-28 16:30:00) [13]>Курдль © (28.09.05 16:26) [11]
>значения все равно им присваиваются одинаковые.
Как присваиваются ? Код.
Desdechado (2005-09-28 16:30:00) [14]в БДЕ одноименные параметры - разные
а присвоение по имени присваивает только первый встреченный с таким именем
для FIB+ возможен похожий вариант
аргумент "с Оракл работает" не катит, ибо компоненты другие
два процента подряд что означают?
Курдль (2005-09-28 16:26:00) [15]
> Johnmen © (28.09.05 16:15) [10]
> В БДЕ это тоже 7 параметров... И обращается он к ним по номеру...
Я бы так категорично не заявлял! Для тех компонентов, что я обычно использовал, это 4 параметра! Даже если они в списке параметров дизайн-тайма (при просмотре в инспекторе объектов) дублируются, значения все равно им присваиваются одинаковые. Про IB не уверен на 100%, но на 80% - пожалуй!
Johnmen (2005-09-28 16:15:00) [16]>sniknik © (28.09.05 16:05) [8]
>> Ну как знаешь... Тебя предупредили...
>для BDE нормально. для > Использую FIB+
>может тоже?... хотя сомнительно.
В смысле ? что нормально ?
В БДЕ это тоже 7 параметров... И обращается он к ним по номеру...
Os (2005-09-28 16:08:00) [17]Параметров 7.
Вставь пустой TIBQuery, перемести туда свой запрос и посмотри свойство Params
sniknik (2005-09-28 16:05:00) [18]Johnmen © (28.09.05 15:47) [7]
> Ну как знаешь... Тебя предупредили...
для BDE нормально. для > Использую FIB+
может тоже?... хотя сомнительно.
Johnmen (2005-09-28 15:47:00) [19]Ну как знаешь... Тебя предупредили...
Курдль (2005-09-28 15:46:00) [20]Двойные кавычки не проходят - попробуй одинарные! Помню, что где-то на эти грабли с like нарывался! Именно с '%%'!