Неопределенный идентификатор

отредактировано 22:02 Раздел: FastReport 4.0
Доброго времени суток!
Столкнулся со следующей ситуацией:

Есть листбокс на диалоговой форме, который при создании формы заполняется строковыми значениями из колонки типа widestring одной из таблиц бд ( сервер фаербирд 2.5.2 ). При выборе одного из элементов листбокса вызывается процедура которая присваивает переменной отчета.
procedure Label3OnClick(Sender: TfrxComponent);
begin
      Set('ShiftHost' , ListBox3.Items[ListBox3.ItemIndex]);
end;

Далее в отчете есть запрос к бд, в котором одним из условий является равенство содержимого колонки типа widestring переменной 'ShiftHost'
G.HOST =(:ShiftHost)

В параметрах запроса :ShiftHost привязан к переменной отчета 'ShiftHost' с указанием типа widestring.
При выполнении отчета вылетает ошибка: Были обнаружены следующие ошибки: QGSM:QGSM: Ошибка в выражении 'OPERATOR': Неопределенный идентификатор:'OPERATOR'.

где 'OPERATOR' - содержание переменной ShiftHost и меняется если ткнуть другой итем в листбоксе

QGSM - имя запроса, в котором происходит сравнение.

Аналогичную ошибку ( неопределенный идентификатор) ловил когда просто в отчет вставлял мемо с содержанием этой переменной.
Помогите разобраться в чем проблема? Как исправить или обойти.


Комментарии

  • отредактировано 22:02
    Неужели никто не в курсе где ошибка зарыта или хотя бы где ее искать???
  • Stalker4Stalker4 123
    отредактировано 22:02
    roman4ik написал: »
    Неужели никто не в курсе где ошибка зарыта или хотя бы где ее искать???
    Судя по том, что переменной отчета вы присваиваете с помощью Set, эта переменная у Вас находится в "списке переменных" отчета.
    Поэтому в параметрах запроса надо указывать эту переменную в косых скобках, т.е. так: <ShiftHost>

    Если это не поможет, то попробуйте вместо
    Set('ShiftHost' , ListBox3.Items[ListBox3.ItemIndex])
    писать
    Set('ShiftHost' , CHR(39)+ListBox3.Items[ListBox3.ItemIndex]+CHR(39))

    т.е. заключит строку в дополнительные одинарные кавычки.
  • отредактировано May 2015
    Stalker4 написал: »
    Судя по том, что переменной отчета вы присваиваете с помощью Set, эта переменная у Вас находится в "списке переменных" отчета.
    Поэтому в параметрах запроса надо указывать эту переменную в косых скобках, т.е. так: <ShiftHost>

    Если это не поможет, то попробуйте вместо
    Set('ShiftHost' , ListBox3.Items[ListBox3.ItemIndex])
    писать
    Set('ShiftHost' , CHR(39)+ListBox3.Items[ListBox3.ItemIndex]+CHR(39))

    т.е. заключит строку в дополнительные одинарные кавычки.

    Спасибо. CHR(39) помогло.

    Правда теперь столкнулся с другой проблемой:

    Есть 2 запроса к разным таблицам в одной базе.
    В запросе есть условие возвращать записи находящиеся в пределах дат с Х по У. Переменные определяющие Х и У так же задаются через листбокс диалогового окна. Параметры переменных указаны в обоих запросах одинаково. Поля в таблицах баз данных с временем имеют одинаковый тип DateTime и представление "дд:мм:гггг чч:мм:сс". В одном запросе выборка выполняется правильно, во втором будто записей удовлетворяющих указанным временным рамкам - нет. хотя по факту записи есть

    условия указаны следующим образом:
    T.SHIFTFROM BETWEEN :ShiftFrom and :ShiftTo AND
    
    для первой и
    G.DATETIME BETWEEN :ShiftFrom and :ShiftTo AND
    

    во втором случае пробовал даже так:
    G.DATETIME BETWEEN CAST( :ShiftFrom AS TYPE OF COLUMN GSMARCHIVE.DATETIME) and CAST(:ShiftTo as TYPE OF COLUMN GSMARCHIVE.DATETIME)
    

    все ровно возвращает NULL, хотя, повторюсь, записи в указываемых промежутках времени по факту в таблице есть ( без указания условия по временным рамкам запрос отрабатывает, возвращая все записи удовлетворяющие остальным условиям, в том числе и со временем входящим в рамки предаваемых переменных <ShiftFrom> <ShiftTo>)
    Обескураживает то что в другом запросе все работает как надо. В параметрах запроса переменные указаны одинаково.
    Переменные присваиваю следующим образом:
    procedure ListBox1OnDblClick(Sender: TfrxComponent);
    begin
          Set('ShiftFrom' , StrToDateTime(ListBox1.Items[ListBox1.ItemIndex]));
          Set('ShiftNum' , ListBox2.Items[ListBox1.ItemIndex]);          
    end;
    
    procedure ListBox4OnClick(Sender: TfrxComponent);
    begin
          Set('ShiftTo' , StrToDateTime(ListBox4.Items[ListBox4.ItemIndex]));    
    end;
    
    листбоксы заполняются при активации диалогового окна по запросу из таблицы T.SHIFTFROM, т.е той с который запрос на выборку по дате работает на ура.
  • отредактировано June 2015
    Сам дурак оказывается.. в таблицах, как оказалось, хранятся данные за разные периоды времени.
    то есть 1 таблица хранит за весь период работы приложения в обобщенном виде, 2я только за определенный период времени от настоящего, но развернуто. то есть я просто выбирал из первой тот период, который отсутствовал во второй. Запрос работал как надо, просто не обратил внимание на содержание второй таблицы... внимательнее нужно быть ))))
    Всем спасибо за участие )

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.