Господа разработчики, пожалуйста, переставьте одну строку в коде

отредактировано 17:19 Раздел: FastReport 4.0
Уважаемые разработчики, я уже писал об этом баге здесь.
(а также здесь), здесь, а также в "стандартном" баг-репорте.

Пожалуйста, в модуле frxCustomDB, в определении класса TfrxDBLookupComboBox в секции published, разместите свойства ListField и KeyField после свойства DataSetName.
Чтобы секция published стала выглядеть вот так:

  TfrxDBLookupComboBox = class(TfrxDialogControl)
...
  published
    property AutoOpenDataSet: Boolean read FAutoOpenDataSet write FAutoOpenDataSet default False;
    property DataSet: TfrxDBDataset read FDataSet write SetDataSet;
    property DataSetName: String read GetDataSetName write SetDataSetName;
    property ListField: String read GetListField write SetListField;
    property KeyField: String read GetKeyField write SetKeyField;
    property DropDownWidth: Integer read GetDropDownWidth write SetDropDownWidth;
    property DropDownRows: Integer read GetDropDownRows write SetDropDownRows;
    property OnClick;
    property OnDblClick;
    property OnEnter;
    property OnExit;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
  end;


Далее - подробное описание бага.

Комментарии

  • отредактировано 17:19
    Описание бага + багофикс.

    Описание ошибки:

    При использовании TfrxDBLookupComboBox, когда в качестве поля ListField используется поле источника данных с алиасом, отличным от имени поля набора данных (например, "Компания" вместо "Company"), выбрасывается ошибка "Поле не найдено":
    - при вызове метода TfrxReport.ShowReport() - через короткий промежуток после начала просмотра отчета
    - при вызове метода TfrxReport.DesignReport() - после завершения просмотра отчета


    Способ воспроизведения:


    1. В папке \Demos\Main находим проект FRDemo.dpr, открываем.

    2. Открываем Unit2.pas, находим CustomersDS. Вызываем "Edit Field Aliases..."
    Для поля "Customer" задаем алиас "Компания", жмем ОК.

    3. Сохраняем, компилируем, запускам приложение.

    4. В деревце с отчетами открываем папку "Dialogs and script".
    Выбираем отчет "Hello FastReport", жмем кнопку Design.

    5. Меню - Отчет - Данные - ставим галку "Customers", жмем ОК.

    6. Открываем форму диалога DialogPage1.

    На форму бросаем DBLookupComboBox, настраиваем его свойства:
    AutoOpenDataSet = "True";
    DataSet = "Customers";
    KeyField = "Cust No";
    ListField = "Phone";
    

    Запускам, видим, видим, что DBLookupComboBox работает, жмем ОК, наблюдаем preview, закрываем Preview - все ОК.

    Меняем значение ListField.
    ListField = "Компания";
    

    Запускам, видим, видим, что DBLookupComboBox работает, жмем ОК, наблюдаем preview, закрываем Preview - получаем Exception.

    Сохраняем отчет (Ctrl+S), закрываем дизайнер, жмем Preview, видим, что DBLookupComboBox работает, жмем ОК, наблюдаем Exception на фоне Preview.


    Причина:


    Модуль unit frxCustomDB;

    При десериализации объекта TfrxDBLookupComboBox свойство ListField записывается/восстанавливается раньше, чем свойство DataSet.

    Поэтому код

    procedure TfrxDBLookupComboBox.SetListField(Value: String);
    begin
      if FDataSet <> nil then
        Value := FDataSet.ConvertAlias(Value);
      FDBLookupComboBox.ListField := Value;
    end;
    

    - не выполнит преобразования алиаса в физическое имя поля, и свойству ListField внутреннего компонента FDBLookupComboBox в нашем случае будет присвоено значение "Компания" (вместо "Company").


    Багофикс:

    Все, что нужно сделать - поменять порядок описания членов класса TfrxDBLookupComboBox в секции Published: - свойства KeyField и ListField разместить после свойства DataSetName;

    Секция published теперь должна выглядеть так:

    Код:
      
    
      TfrxDBLookupComboBox = class(TfrxDialogControl)
    ...
      published
        property AutoOpenDataSet: Boolean read FAutoOpenDataSet write FAutoOpenDataSet default False;
        property DataSet: TfrxDBDataset read FDataSet write SetDataSet;
        property DataSetName: String read GetDataSetName write SetDataSetName;
        property ListField: String read GetListField write SetListField;
        property KeyField: String read GetKeyField write SetKeyField;
        property DropDownWidth: Integer read GetDropDownWidth write SetDropDownWidth;
        property DropDownRows: Integer read GetDropDownRows write SetDropDownRows;
        property OnClick;
        property OnDblClick;
        property OnEnter;
        property OnExit;
        property OnKeyDown;
        property OnKeyPress;
        property OnKeyUp;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
      end;
    



  • отредактировано December 2010
    Честное слово, уже достало, что каждый раз при скачивании очередного релиза/билда приходится править исходники.

    Совершенно непонятно, что мешает сделать такое исправление.
  • отредактировано 17:19
    Всего лишь.... у меня куча модулей в которых надо все поменять.... Или добавить
    и каждый раз я им об этом пишу... кое что правда исправляют.. но очень редко.
  • отредактировано 17:19
    vlad написал: »
    Честное слово, уже достало, что каждый раз при скачивании очередного релиза/билда приходится править исходники.

    Совершенно непонятно, что мешает сделать такое исправление.

    Все будет исправлено в новой сборке

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

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