![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Одноименные параметры в Query [D5, XP]
De © (2006-03-17 16:55:00)Использую TADOQuery (q), в запросе несколько параметров с одинаковым именем (iParam), что сделает строка:
q.Parameters.ParamByName('iParam').Value := 1;
присвоит 1 всем параметрам с имененм iParam или только первому из них
если второй вариант то как грамотно присвоить значения всем параметрам?
Anatoly Podgoretsky (2006-03-17 21:28:00) [1]Имена это алиасы для массива параметров.
запрос посылаемый на сервер выглядит так
select * from table1 where _f1=? and _f2=?
Так что никакиъ имен нет, позиционное, счет с нуля.
sniknik (2006-03-17 18:19:00) [2]не, не посоветую...
запросы для access (jet) состоят только из одной команды, т.е. никаких переменных в пакете и вообще пакета не получится. а оптимизировать запрос которого в глаза не видел и при полном незнании его смысла/задачи... не такой безнадежный оптимист.
De (2006-03-17 18:03:00) [3]
> sniknik © (17.03.06 17:50) [10]
> и сервер sql конечно никаких возможностей не предоставляет?
> и "охрененый UNION" "верю" совсем не оптимизируем...
в Access'е не силен (выбрал изза распространенности), может Вы что посоветуете
sniknik (2006-03-17 17:50:00) [4]и сервер sql конечно никаких возможностей не предоставляет?
и "охрененый UNION" "верю" совсем не оптимизируем...
De (2006-03-17 17:46:00) [5]
> sniknik © (17.03.06 17:41) [8]
> > в запросе > 20 параметров с одинаковым именем, обломно
> изза халтуры некоторых писать огромные партянки пустого
> кода :(
> а вот это уже халтура (имхо) - 20 параметров... это что
> же за запросы и на каком сервере? нормально написать нельзя?
>
нельзя, там охрененый UNION идет
sniknik (2006-03-17 17:41:00) [6]> он, зараза, первый попавшийся ищет и отваливается, блин халявщики
попробуй сам всем присвой, все одно будет без толку, так ADO устроен. смысла нет все одноименные искать.
> в запросе > 20 параметров с одинаковым именем, обломно изза халтуры некоторых писать огромные партянки пустого кода :(
а вот это уже халтура (имхо) - 20 параметров... это что же за запросы и на каком сервере? нормально написать нельзя?
De (2006-03-17 17:29:00) [7]помоему так будет оптимальней:
for i := 0 to q.Parameters.Count - 1 do begin
if q.Parameters[i].Name = 'iParam' then q.Parameters[i].Value := 1;
if q.Parameters[i].Name = 'iNewParam' then q.Parameters[i].Value := 2;
end;
q.Open;
Reindeer Moss Eater (2006-03-17 17:28:00) [8]Ужас какой.
use BDE instead.
De (2006-03-17 17:20:00) [9]точно см.:
function TParameters.ParamByName(const Value: WideString): TParameter;
function TParameters.FindParam(const Value: WideString): TParameter;
он, зараза, первый попавшийся ищет и отваливается, блин халявщики
> Desdechado © (17.03.06 17:14) [4]
> поэтому зарекся использовать одинаковые имена, использую
> всегда разные
в запросе > 20 параметров с одинаковым именем, обломно изза халтуры некоторых писать огромные партянки пустого кода :(
Desdechado (2006-03-17 17:14:00) [10]я давно заметил, что в разных Query (TQuery, TADOQuery, TSQLQuery и т.п.) обработка одноименных параметров происходит по-разному
поэтому зарекся использовать одинаковые имена, использую всегда разные
Плохиш (2006-03-17 17:12:00) [11]
> Reindeer Moss Eater © (17.03.06 16:55) [1]
> всем
Врёшь
> если второй вариант то как грамотно присвоить значения всем
> параметрам?
q.Parameters[0].Value = 1
q.Parameters[1].Value = 1
De (2006-03-17 17:03:00) [12]да вроде не всем, проверьте на практике
q.sql.text := 'select * from table1 where _f1=:iParam and _f2=:iParam';
q.Parameters.ParamByName('iParam').Value := 1;
смотрю:
q.Parameters[0].Value = 1
q.Parameters[1].Value = Null
P.S.
квери пустой приходи, хотя если на СУБД(Access) его с этими же параметрами запускать выборка приходит
Reindeer Moss Eater (2006-03-17 16:55:00) [13]всем