Конференция "Начинающим" » Сортировка DbGrid по клику на колонке [D7, XP]
 
  • Игорь Шевченко © (05.01.17 21:12) [20]
    Михалыч   (05.01.17 13:08) [19]

    Количество параметров при модификации order by остается таким же, от этого и надо отталкиваться. Можно вытащить и повторно присвоить перед выполнением измененного (в части order by) запроса.
  • Михалыч (06.01.17 11:57) [21]
    А как вытащить параметры из датасета, чтобы не хранить в глобалках? Загуглил примеры но к сожалению не нашел.. ((
  • Игорь Шевченко © (06.01.17 15:29) [22]
    Почитать справку по используемому датасету, например.
  • Михалыч (06.01.17 15:36) [23]
    FB2.5, D2010, IBQuery
    Доки я читал: http://www.ibase.ru/ibx
    Но там написано только о присвоении параметров, а как их потом считать нет.. ((
  • Михалыч (08.01.17 11:34) [24]
    Наверное нужно что-то в виде:

    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.. но как написать увы не знаю.. ((
  • Михалыч (08.01.17 11:39) [25]
    Это по присвоение, перебором как-бы.. Еще как-то нужно извлечь присвоенные ранее параметры.. ((
  • Михалыч (08.01.17 13:16) [26]
    нашел! читать можно так-же как и присваивать..
    все, сделал. Можно закрыть ветку
  • ЯЧтсия (09.01.17 14:48) [27]
    Удалено модератором
  • Михалыч (09.01.17 22:03) [28]
    Вторая проблемка: ParamCount возвращает бред, передал в IbQuery один параметр, а в ShowMessage вижу 8. чудеса.. ParamCheck в True
    пробовал перед выполнением запроса ParamClear не помогло. куда копать?
  • Игорь Шевченко © (09.01.17 22:09) [29]

    > куда копать?


    Код уже пора показывать или приглашать телепатов
  • Михалыч (09.01.17 22:10) [30]
    нашел, в запросе и правда 8 пареметром но все с одинаковым именем , просто через ИЛИ прописаны. А мне нужно считать значение переданного этому имени
    ParamByName нужно видимо...
  • Михалыч (09.01.17 22:11) [31]
    в данном случае парамкаунт бесполезен, так-как лишь вносит путаницу ((
  • Михалыч (09.01.17 22:26) [32]
    Например:

    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 на второе
    поле к примеру, но сохранив переданные ранее параметры чтобы передать
    в измененный запрос и выполнить его конечно. С подменой я справился.
    Теперь нужно читать параметры и присваивать уже все три или как правильно?
  • Михалыч (09.01.17 22:31) [33]
    как-то так?

    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;

    ???
  • Михалыч (10.01.17 11:23) [34]
    Заработало! Сделал чтение/запись все параметров в цикле.. ))
  • Игорь Шевченко © (10.01.17 12:52) [35]
    Жаль, что так и не удалось послушать начальника транспортного цеха.
  • asail © (12.01.17 17:17) [36]
    А зачем вообще переоткрывать запрос и тащить все данные с сервера при изменении сортировки пользователем?
    Имхо, куда правильнее стянуть все данные в локальный датасет (типа, например, TClientDataset) и уже его подрубать к гриду... А в нем (локальном датасете) уже сортировать данные как душе угодно, не напрягая сервер почем зря, просто создавая индексы...
    Или я не прав?
 
Конференция "Начинающим" » Сортировка DbGrid по клику на колонке [D7, XP]
Есть новые Нет новых   [118689   +19][b:0][p:0.001]