Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2019, 16:14   #1
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию FastReport 6 - IIf - не могу победить условие.

Всем привет.
Как обычно, нужна помощь...
Есть поле в БД rabota (TINYINT(1)) - логическое. Занесены данные, 1 и 0 (Да и Нет)
В fastReport в Memo выводит так же, 1 и 0...
Пробую отрепетировать условие IIf - но на выходе получаю либо все НЕТ, либо вообще пусто... но чаще всего ошибка, ')' Expected
На разных форумах - синтаксис по разному предлагают...
Помогите как правильно написать...
Вот мой пример
Код:
[IIf(<frxDBDataset1."rabota">!=1,'yes','no')]
Пробовал с разными вариантами... типа :
Код:
[IIf([frxDBDataset1."rabota"]==1,"yes","no")]
Изначально справку взял такую:

Цитата:
6. Примеры использования условного оператора IIF(,,) в дизайнере отчёта.

Приведу формат и парочку примеров, по которым сразу станет ясно использование оператора:

Формат:
[IIf(Condition, True, False)]

Пример 1. Если значение CompleteDate не равен null, тогда выводим текст год, иначе пусто:
[IIf([ActTechnicalEvent.CompleteDate] != null, "год",null)]

Пример 2. Если первая буква имени А, тогда к имени добавляем префикс "*".
[IIf(Length([spt_values.name]) > 1 && UpperCase(Substring([spt_values.name], 0, 1)) == "A", "*" + [spt_values.name], [spt_values.name])]

Внимание! Если у вас ошибка "Error CS0103: The name 'IIF' does not exist in the current context" это из-за того, что название является регистрозависимым, и само имя написано неверно. Следует использовать IIf имя для условного оператора.
iskurt вне форума Ответить с цитированием
Старый 23.04.2019, 16:52   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от iskurt Посмотреть сообщение
Есть поле в БД rabota (TINYINT(1)) - логическое. Занесены данные, 1 и 0 (Да и Нет)
а почему бы в запросе через CASE не получить сразу то, что Вам надо и это поле и выводит в отчёте?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.04.2019, 18:48   #3
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а почему бы в запросе через CASE не получить сразу то, что Вам надо и это поле и выводит в отчёте?
Ув., Сергей, тогда подскажите, у меня на Гриде организованы чекбоксы (ридонли), которые так же формируется всё через тот же запрос и выглядят вот так:
Снимок.PNG

Не помешает ли CASE формированию чекбоксов, если там будет что-то типа НЕТ и ДА?

ну или придется отдельный запрос создавать... чего не хотелось бы

Последний раз редактировалось iskurt; 23.04.2019 в 18:58.
iskurt вне форума Ответить с цитированием
Старый 23.04.2019, 21:47   #4
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию

Всё равно, спасибо, идея оказалась рабочей ;-)

Может кому пригодиться....
Код:
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT id_contrs, ');
    SQL.Add('CASE rabota WHEN 0 THEN "НЕТ"');
    SQL.Add('WHEN 1 THEN "ДА" END AS rab, ');
    SQL.Add('CONCAT(kod_ifns,'' '', ifns) AS ifn, systemnalogs.sysnalog, comm FROM contrs');
    SQL.Add('LEFT JOIN ifnses ON (id_ifnses = id_ifns)');
    SQL.Add('LEFT JOIN systemnalogs ON (id_sysnalogs = id_sysnalog)');
    SQL.Add('ORDER BY contr');
    Open;
  end;
А прорисовку сделал вот так:
Код:
procedure TFContrs.sDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  style: Integer;
begin

  if (Column.FieldName = 'rab') then
  begin
    if (Column.Field.Value = 'ДА') then 
      style := DFCS_CHECKED
    Else
      style := DFCS_BUTTONCHECK;

    DrawFrameControl(TsDBGrid(Sender).Canvas.Handle, Rect, DFC_BUTTON, style)
  end;

end;
iskurt вне форума Ответить с цитированием
Старый 24.04.2019, 09:20   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от iskurt Посмотреть сообщение
А прорисовку сделал вот так:
ну, так тоже можно.
но, вообще-то, я вариант проще предлагал - в гриде отображать поле RABOTA (раз в гриде с ним всё хорошо), а в отчёте использовать поле RAB (текст, полученный через CASE).
Но раз устраивает, то можно и так.

Ну и в FastReport тоже можно эту проблему решить (там, насколько я помню, есть разные варианты, вплоть до использования своей функции, которая описывается в коде и её можно использовать в отчёте).
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу придумать условие запроса Dvoishnik SQL, базы данных 3 22.04.2016 15:31
не могу разобрать условие для If в PHP VVkSoft PHP 10 05.05.2011 00:38
Не могу задать корректно условие While sergey113 Помощь студентам 1 10.03.2011 16:23
Не могу победить округления.EXCEL 2003 .VBA mire Microsoft Office Excel 3 10.08.2010 16:17
Не могу написать условие в php vinok82 PHP 2 28.05.2010 12:24