Обращение к источнику даных

blgblg
отредактировано 23:28 Раздел: FastReport 4.0
Работаю со встроеным в склад.прогу FR4.9. Доступа к исходникам нет.
Добавил два обьеката данных TfrxAdoQuery (ADOQuery1=Select kod=1, ADOQuery2=Select kod=1);
На странице один бенд мастер дата привзан к ADOQuery2.
Код тут:
procedure Memo1OnPreviewClick(Sender: TfrxView; Button: TMouseButton; Shift: Integer; var Modified: Boolean);
begin
  ShowMessage(AdoQuery1.Name);                                                           
end;

begin
  ShowMessage(AdoQuery1.Name);    
end.
Если запустить из конструктора отчетов все норм оба сообщени выводят "ADOQuery1",
а вот при запуске из складской программы
первой сообщение "ADOQuery1"б потом кликаем на мемо поле и получаем почемуто сообщение "ADOQuery2" :) Это как??????

У мен есть реальная задача в которой по клику на мемо обновляю данные в датасет и вношу изменение в ДБ.
В конструкторе все работает а вот при запуске из склад.программы соотвественно куча ошибок из-за вызова не того датасета.

Комментарии

  • blgblg
    отредактировано 23:28
    Ахаха, а если сделать так
    procedure Memo1OnPreviewClick(Sender: TfrxView; Button: TMouseButton; Shift: Integer; var Modified: Boolean);
    begin
      ShowMessage(AdoQuery2.Name);                                                           
    end;
    
    begin
      ShowMessage(AdoQuery2.Name);    
    end.
    

    то получается наоборот все
    первое сообщение "ADOQuery2" потом кликаем на мемо поле и получаем сообщение "ADOQuery1" ??????

    Толи лыжи не едуть толи я .......
  • blgblg
    отредактировано 23:28
    Может при загрузке отчета существуют какие то параметры, которые могут к таким фокусам привести?
  • blgblg
    отредактировано January 2014
    Пока решил проблему так
    AdoQuery:=Report.FindObject('AdoQuery1');
    

    Но вопрос остаетс в силе, хотелось бы иметь представление о том, что может происходить при формировании отчет и влечет за собой эту ошибку при обращении к обьекту по имени?
  • gpigpi
    отредактировано 23:28
    написал:
    хотелось бы иметь представление о том, что может происходить при формировании отчет
    Без исходников программы сделать это будет трудно. Возможно, в коде динамически в отчёт добавляются TfrxADOQuery
  • blgblg
    отредактировано January 2014
    gpi написал: »
    Без исходников программы сделать это будет трудно. Возможно, в коде динамически в отчёт добавляются TfrxADOQuery

    Возможно, но все равно, ведь обращаюсь к обьекту по имени, почему к этому имени привязана ссылка на другой обьект, а нужный обьект при этом привзан к другому имени. Как и где регистрируются обьекты TfrxADOQuery?

    Я хочу обратитьтся к разработчику программы и указать ему на этот баг, но для этого желательно знать возможную причину проблемы.

    в догонку:

    У меня по клику на мемо поле выполняется запрос с инсерт и с одним параметром, если вызывать его таким способом:
    AdoInsert:=Report.FindObject('insWrk');
    AdoInsert.ExecSql
    
    то параметр в запросе пустой, т.е. fr подставляет пустое значение в код запроса.
    пробовал вместо AdoInsert.ExecSql так AdoInsert.Open, и так AdoInsert.DataSet.Open вобщем методом втыка пробовал по разному, никак.
    Кстати, эта проблема тоже возникает только при запуске из под скл.программы, в дизайнере все работает.
    Как правильно его запустить??
    Вопрос решил, проблема была та же что и в топике, только тут не мог обратиться по имени к обьекту DateEdit, из которого я брал значение параметра.

    И еще вопрос, на форуме его задавали но точного ответа так и не нашел, при выходе из дизайнера отчета автоматом отрабатывает запрос из TfrxADOQuery, который не привзан ни к отчету ни к бенду. Если запустить отчет из программы, все нормально, обьект отрабатывает только при вызове метода. Как бы это отключить, а то не удобно при отладке??
  • gpigpi
    отредактировано 23:28
    написал:
    Кстати, эта проблема тоже возникает только при запуске из под скл.программы, в дизайнере все работает.
    Попробуйте в главной процедуре отчёта прописать Report.EngineOptions.DestroyForms := False;

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

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