Ряд вопросов (наболело)

отредактировано April 2009 Раздел: FastReport 4.0
Использую FastReport 4.6.5 (интегрирован в стороннюю программу). Есть разница в данном случае в функциональности?
Как-то довольно слабовато, многое не устраивает.
1) создал DialogPage, поместил в него ComboBox. Как запретить редактирование списка (Items)?
2) в Code пишу ComboBox1. - почему после точки автоматически не выбираются нужные свойства из выпадающего списка? Это как-то настраивается?
3) почему если выделить текст не вызывается контекстное меню? Например, копирование я могу делать только на горячих клавишах. Я так понимаю о прочих прелестях цивилизации, типа быстрой справки по выделенному (например, для ComboBox1.Items я выделю Items) можно не спрашивать?
4) Как вызвать запрос из кода в нужный момент? Например по нажатию кнопки в DialogPage я хочу записать некие данные в базу. Если создать запрос в Data то он сработает единожды.
5) Сообщения об отсутствии ##table это глюк или фича? Таблица создается в хранимой процедуре вызываемой из одного запроса, и читается в другом запросе. Вот он-то при открытии (для редактирования) отчета ругается что мол нет такой таблицы, конечно ее может не быть, она же временная. Все-бы ничего, да FastReport висит после такого сообщения.

Комментарии

  • отредактировано 11:46
    1. В дизайнере ?
    Без изменения исходников никак.
    2-3. У нас упрощенный синтаксис мемо.
    4. ExecSQL.
    5. Дизайнер заполняет дерево данных при открытии шаблона и естественно для этого пытается обработать датасеты(получить список полей).
  • отредактировано 11:46
    написал: »
    1. В дизайнере ?
    Без изменения исходников никак.
    Нет, при старте отчета в диалоговом окне пользователь должен выбрать значение из списка без возможности изменить саму выбранную строку.
    написал: »
    4. ExecSQL.
    Можно пример?


  • отредактировано 11:46
    По 4 пункту вроде разобрался.

    procedure ButtonSaveOnClick(Sender: TfrxComponent); // СОХРАНИТЬ НАСТРОЙКИ
    begin
    qrySaveConfig.ExecSQL;
    end;
  • отредактировано 11:46
    Что за хрень. Упростил запрос до минимума, всегда ноль пишется.

    DECLARE @S1_B INTEGER -- НАЧАЛО ПЕРВОЙ СМЕНЫ
    SET @S1_B=:S1_B

    UPDATE Tablica SET S1_B=@S1_B WHERE USERNAME='Администратор'

    А вот так записывается 10, т.е. не передается :S1_B
    DECLARE @S1_B INTEGER -- НАЧАЛО ПЕРВОЙ СМЕНЫ
    SET @S1_B=10

    UPDATE Tablica SET S1_B=@S1_B WHERE USERNAME='Администратор'

    Просто фантастика! В другом запросе в том же отчете тот же параметр передается как надо. Я уже всяко пробовал, и имена разные и вообще разные переменные передавать, все-равно всегда ноль получаю.

  • Stalker4Stalker4 123
    отредактировано 11:46
    DMITRYF написал: »
    Использую FastReport 4.6.5 (интегрирован в стороннюю программу). Есть разница в данном случае в функциональности?
    Как-то довольно слабовато, многое не устраивает.
    1) создал DialogPage, поместил в него ComboBox. Как запретить редактирование списка (Items)?
    Установить свойство ComboBox.Style в значение csDropDownList.
    Точно так же, как это делается и в самой Delphi.
  • отредактировано 11:46
    Stalker4 написал: »
    Установить свойство ComboBox.Style в значение csDropDownList.
    Точно так же, как это делается и в самой Delphi.
    Спасибо, я понятия не имею как это в дельфи делается, т.к. никогда на нем не писал.
  • отредактировано 11:46
    Взялся снова за ExecSQL, не работает.
    Уже простой запрос для проверки создал - qrySaveConfig:

    DECLARE @S_INDEX INTEGER -- ИНДЕКС СТРОКИ В СПИСКЕ
    SET @S_INDEX=:S_INDEX
    SELECT @S_INDEX as S_INDEX

    Это в коде:
    Обработчик события (выбор из списка):
    procedure ComboBox2OnClick(Sender: TfrxComponent);
    begin
    S_INDEX:=ComboBox2.ItemIndex
    end;

    Обработчик события (нажатие кнопки):
    procedure ButtonSaveOnClick(Sender: TfrxComponent); // СОХРАНИТЬ НАСТРОЙКИ
    begin

    qrySaveConfig.ExecSQL;
    end;

    Если не жать кнопку (т.е. не выполняю qrySaveConfig.ExecSQL; ) в бэнде [qrySaveConfig."s_index"] возвращает правильное значение, а вот если нажать всегда получаю ноль. В профайлере смотрю, ноль подставляется. Даже если перед qrySaveConfig.ExecSQL; поставить S_INDEX:=1; В чем проблема? Я уже кучу времени на простые вещи потратил, ужас.
  • отредактировано 11:46
    ExecSQL нельзя использовать для получения данных - он только выполняет запрос, ничего не возвращая. Поэтому после выполнения события нажатия кнопки получается 0, а без выполнения события FR сам открывает запрос методом Open и выдает ожидаемое значение.
  • отредактировано 11:46
    Rumi написал: »
    ExecSQL нельзя использовать для получения данных - он только выполняет запрос, ничего не возвращая.
    Мне не надо возвращать, надо передать в запрос значения чтоб он их записал. Но ExecSQL и этого не может. Абсурд како-то, зачем запрос которому нельзя передать переменную?
  • отредактировано 11:46
    Вот так, например, получилось записать число десять:
    VALUE1:=10;
    Query1.SQL.Clear;
    Query1.SQL.Add('UPDATE TABLICA SET POLE1='+IntToStr(VALUE1));
    Query1.ExecSQL;
    Query1.Close;
    В принципе, думаю любую переменную можно будет сохранить. Никак иначе не получалось.
    Ну что, нельзя было проще сделать? Да уж, далеко вам до 1С...

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

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