Связь один-к-одному

отредактировано 04:52 Раздел: FastReport 2.xx VCL
Нужно сделать отчет по датасету из формы, но этот датасет не содержит некоторый полей, нужных для отчета. Но эти поля можно молучить из добавочного запроса, который можно поместить на форму диалога фаста и указав datasource на основной датасет, но при этом если выполнить disablecontrols основному датасету, то связь мастер-детейл соответсвенно не работает. можно ли этот как-то обойти не изменяя основной запрос (именно средствами фаста)?

Комментарии

  • отредактировано 04:52
    А зачем вы выполняете DisableControls?
  • отредактировано 04:52
    а чтобы по гриду данные не "ехали", это
    1. неэстетично ;)
    2. заметно тормозит формирование отчета
  • отредактировано 04:52
    gelios написал:
    если выполнить disablecontrols основному датасету, то связь мастер-детейл соответсвенно не работает
    Что-то мне не верится. Должно работать. А ну-ка приведи полный код.
  • отредактировано 04:52
    procedure TfrmAccounts.test1Click(Sender: TObject);
    var
      b: string;
    begin
      inherited;
      qAccounts.DisableControls;
      b := qAccounts.Bookmark;
      try
        qAccounts.First;
        fr1.ShowReport;
      finally
        qAccounts.Bookmark := b;
        qAccounts.EnableControls;
      end;
    end;
    
    в этом случае все детейлы (которые описаны в отчете) связываеются с первой записью qAccounts. Определение детейлов на форме не помогло.
    Полностью автономный отчет сделать не представляется возможным.
  • отредактировано 04:52
    gelios написал:
    procedure TfrmAccounts.test1Click(Sender: TObject);
    var
      b: string;
    begin
      inherited;
      qAccounts.DisableControls;
      b := qAccounts.Bookmark;
      try
        qAccounts.First;
        fr1.ShowReport;
      finally
        qAccounts.Bookmark := b;
        qAccounts.EnableControls;
      end;
    end;
    
    в этом случае все детейлы (которые описаны в отчете) связываеются с первой записью qAccounts. Определение детейлов на форме не помогло.
    Полностью автономный отчет сделать не представляется возможным.
    Сделай так:
    inherited;
      b := qAccounts.Bookmark;
      try
        qAccounts.First;
        qAccounts.DisableControls;
    
  • отредактировано 04:52
    от перестановки мест слагаемых сумма не изменилась ;)
  • отредактировано 04:52
    И еще вот так:
    finally
       qAccounts.EnableControls;
       qAccounts.Bookmark := b;
    end;
    

    И вот это "Полностью автономный отчет сделать не представляется возможным" - тоже мало похоже на правду.
    Короче - подробнее.
  • отредактировано 04:52
    запрос qAccounts формируется динамически на основе установок юзера в фильтре. Реализовать этот фильтр средствами фаста технически невозможно (это не его стихия). Вариант добавления нужных для отчета полей в основной датасет (qAccounts) не предлагать и не рассматривать.
  • отредактировано 04:52
    Блин. Ну не хочешь по-другому делать - не надо! Твое дело...

    Но в приведенном коде что именно не работает - можешь сказать?
    Детайл не обновляется - не может быть! Гон!
    Или детайл обновился - а в отчет не передался - тоже мало верится.

    Дебаггером пользоваться умеешь в конце концов?!!!
  • отредактировано April 2005
    написал:
    Но в приведенном коде что именно не работает - можешь сказать?
    в приведенном коде все работает, но с учетом того, что при disable controls связь master-deteil не работает. Могу прислать небольшую демку, которая это демонстрирует. з.ы. ее можно взять в Fibplus\examples\delphi\additional\master_detail и добавить disable controls
    написал:
    Дебаггером пользоваться умеешь в конце концов?!!!
    А причем тут дебаггер? чтобы найти то место в вкл, где при disablecontrols не работает master-deteil?
  • отредактировано 04:52
    2 gelios:

    А не проще у гридового датасоурца обнулить DataSet перед формированием отчёта ?

    Типа такого:
    begin
      b := qAccounts.Bookmark;
      DBGrid.DataSource.Dataset:=nil;
      try
       qAccounts.First;
       fr1.ShowReport;
     finally
       qAccounts.Bookmark := b;
       DBGrid.DataSource.Dataset:=qAccounts;
     end;
    
  • отредактировано 04:52
    Сенки за идейку ;)
    теперь бы решить, что лучше - грид "ехал" или очищался на время формирования отчета ;)
  • отредактировано 04:52
    gelios написал:
    в приведенном коде все работает, но с учетом того, что при disable controls связь master-deteil не работает. Могу прислать небольшую демку, которая это демонстрирует. з.ы. ее можно взять в Fibplus\examples\delphi\additional\master_detail и добавить disable controls
    А причем тут дебаггер? чтобы найти то место в вкл, где при disablecontrols не работает master-deteil?
    Ни хрена у тебя не работает! И еще кое-что кроме кода плохо работает!

    Ибо мастер-деталь никак не зависит в твоем случае.
    Более того у тебя вообще связка мастер-деталь "отсутствует", потому что
    gelios написал:
    все детейлы (которые описаны в отчете) связываеются с первой записью qAccounts

    А дебаггер тебе просто необходим, чтобы выявить ошибку, которая НЕ СВЯЗАНА СО СВЯЗКОЙ МАСТЕР-ДЕТАЛЬ!
  • отредактировано 04:52
    да ну. Вы сами попробуйте, на гридах. Сделайте мастеру disable controls и проверьте, будет ли обновляться детейл.
  • отредактировано 04:52
    gelios написал:
    да ну. Вы сами попробуйте, на гридах. Сделайте мастеру disable controls и проверьте, будет ли обновляться детейл.
    Слезь с бронепоезда!
    У тебя нет связки мастер-деталь на момент выполнения отчета!
    Потому что из подчиненной таблицы тебе нужны записи, относящиеся ТОЛЬКО к ПЕРВОЙ записи мастер-таблицы. То есть фиксированный набор. Когда ты делаешь DisableControls мастер-таблицы, ты дизаблишь ее, а не деталь-таблицу. Таким образом деталь-таблица полностью функциональна! И отчет по ней строить можно также, как и обычно!

    Ясное дело, что у тебя твои проблемы связаны с DisableControls, но не по самому факту, а потому что ты его неправильно используешь! Переделай код - придет и на твою улицу счастье!

    А искать пути, типа занулить Datasourse у грида - это всего лишь выход из ситуации, но не решение проблемы.
  • отредактировано 04:52
    Мне наверное лучше знать мастер-детейл у меня или нет.
  • отредактировано 04:52
    Уфф... Вот упертый!
    Ну сделай простейший отчет с мастер-деталью и проверь его с DisableControls и без него.

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

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