-
Михалыч (05.01.17 13:08) [19]
Количество параметров при модификации order by остается таким же, от этого и надо отталкиваться. Можно вытащить и повторно присвоить перед выполнением измененного (в части order by) запроса.
-
А как вытащить параметры из датасета, чтобы не хранить в глобалках? Загуглил примеры но к сожалению не нашел.. ((
-
Почитать справку по используемому датасету, например.
-
FB2.5, D2010, IBQuery
Доки я читал:
http://www.ibase.ru/ibxНо там написано только о присвоении параметров, а как их потом считать нет.. ((
-
Наверное нужно что-то в виде:
DS := TADOQuery.Create(nil);
DS.ConnectionString := 'Provider=SQLOLEDB.1;.....';
DS.SQL.Text := 'select * from Users where UserID = :UserID';
for i := 0 to DS.Parameters.Count - 1 do
begin
DS.Parameters[0].Value := 1;
end;
DS.Open;
DS.Free;
Но не для АДО а для Firebird.. но как написать увы не знаю.. ((
-
Это по присвоение, перебором как-бы.. Еще как-то нужно извлечь присвоенные ранее параметры.. ((
-
нашел! читать можно так-же как и присваивать..
все, сделал. Можно закрыть ветку
-
Удалено модератором
-
Вторая проблемка: ParamCount возвращает бред, передал в IbQuery один параметр, а в ShowMessage вижу 8. чудеса.. ParamCheck в True
пробовал перед выполнением запроса ParamClear не помогло. куда копать?
-
> куда копать?
Код уже пора показывать или приглашать телепатов
-
нашел, в запросе и правда 8 пареметром но все с одинаковым именем , просто через ИЛИ прописаны. А мне нужно считать значение переданного этому имени
ParamByName нужно видимо...
-
в данном случае парамкаунт бесполезен, так-как лишь вносит путаницу ((
-
Например:
IBQuery1.SQL.Add('SELECT * FROM MyTable WHERE (POLE1=:Name_param1) ');
IBQuery1.SQL.Add('OR (POLE2=:Name_param1) OR (POLE3=:Name_param1)');
IBQuery1.SQL.Add(' order by POLE1');
IBQuery1.ParamByName('Name_param1').AsString := 'ля-ля';
передаю одно значения в три имени, ParamCount показывает три параметра.
теперь после выполнения запроса, нужно подменить order by на второе
поле к примеру, но сохранив переданные ранее параметры чтобы передать
в измененный запрос и выполнить его конечно. С подменой я справился.
Теперь нужно читать параметры и присваивать уже все три или как правильно?
-
как-то так?
for i := 0 to IBQuery1.Parameters.Count - 1 do
begin
IBQuery1.Parameters[0].Value := 'тут считанные ранее три параметра в масив например';
end;
Или достаточно сохранить s:=IBQuery1.ParamByName('Name_param1').AsString в переменную а потом присвоить по имени при выполнении измененного запроса:
IBQuery1.ParamByName('Name_param1').AsString:=s;
???
-
Заработало! Сделал чтение/запись все параметров в цикле.. ))
-
Жаль, что так и не удалось послушать начальника транспортного цеха.
-
А зачем вообще переоткрывать запрос и тащить все данные с сервера при изменении сортировки пользователем?
Имхо, куда правильнее стянуть все данные в локальный датасет (типа, например, TClientDataset) и уже его подрубать к гриду... А в нем (локальном датасете) уже сортировать данные как душе угодно, не напрягая сервер почем зря, просто создавая индексы...
Или я не прав?