Запустить отчет о доступе, включая другой не связанный вложенный отчет с тем же диапазоном - PullRequest
1 голос
/ 31 октября 2019

В трех отчетах Access используются два сквозных запроса и стандартный запрос SELECT, и все они работают по отдельности. Один основной отчет запускается с помощью командной кнопки, которая берет две даты из формы для диапазона дат. Я вижу, как эти параметры даты изменяются в ptq после каждого использования. Один из прикрепленных отчетов выполняется на основе другого ptq с использованием предоставленных дат «по умолчанию» для диапазона дат (нет ничего, что сбрасывает эти даты ptq, так как присоединенные отчеты вызываются из основного отчета - это моя проблема или отключение, я считаю,), а другой - в стандартном запросе выбора с предложением WHERE, вызывающим даты из формы. Эти два отчета содержат дополнительные, но разные данные для основного отчета. Я не верю, что они будут вложенными отчетами со связанными основными и дочерними полями, поскольку основные данные отчета и прикрепленные данные отчета не связаны. Проблема в том, что диапазон дат не передается в один ptq для прикрепленного отчета, поэтому дата никогда не изменяется и возвращается только с диапазоном дат «по умолчанию», который находится в его ptq. Вот два ptqs:

exec dbo.uspJobsCompletedThruPress '2019-10-07 05:30:00','2019-10-12 14:29:59'
exec dbo.uspJobsCompletedThruPress_SubReport '2019-10-14 05:30:00','2019-10-19 14:29:59'

Подотчет sp возвращает одну запись, как и ожидалось.

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

Как получить параметры даты для передачи в ptq прикрепленного отчета из основного вызываемого отчета?

Другая проблема заключается в том, что эти прикрепленные отчеты расположены в разделе «Нижний колонтитул отчета», поэтому их данные будут напечатаны сразу после списка записей основного отчета. Однако, поскольку я использую два столбца, данные прикрепленного отчета всегда печатаются на следующей странице, а не в нижней части первого столбца (обычно) или второго столбца (с учетом достаточного количества записей), даже если в конце достаточно места. перечисленные записи. Как я могу сделать этот прикрепленный отчет сразу же после первого списка? Должен ли это быть другой вопрос?

TIA, Тим

1 Ответ

1 голос
/ 31 октября 2019

Ну, вы всегда можете настроить PT-запросы ДО того, как вы запустите отчет.

Таким образом, вы можете использовать некоторый код, подобный следующему:

Sub Mytestzz()


  Dim strDtStart     As String
  Dim strDtEnd       As String

  strDtStart = qudateT("some date source for start date")
  strDtEnd = qudateT("some date source for end date")


  With CurrentDb.QueryDefs("qryJobsPressPass")
     .SQL = "exec dbo.uspJobsCompletedThruPress " & strDtStart & "," & strDtEnd
  End With

  With CurrentDb.QueryDefs("qryJobsPressPassSub")
     .SQL = "exec dbo.uspJobsCompletedThruPress_SubReport " & strDtStart & "," & strDtEnd
  End With

  ' now launch your report.



End Sub

Итак, как только вы запустите вышеуказанное,тогда два используемых PT-запроса теперь все настроены и готовы к работе. Если вы запустите отчет, основанный на двух вышеупомянутых запросах, они будут соответствовать вашим критериям. Имейте в виду, что вы можете добавить дополнительное предложение «где» в открытый отчет, но клиентская сторона будет по-прежнему извлекать любые данные, которые у вас есть на основе вышеуказанных запросов PT (представление на самом деле лучше - поскольку вы не можете беспокоиться о PTзапросите и просто отправьте все свои критерии в команду open report, и при доступе будут только переданы все записи на основе переданных критериев. Это означает, что ваш предыдущий существующий код VBA для подачи фильтров в отчет будет работать, как и раньше. как правило, получается такая же хорошая производительность (если не лучше) с использованием представления в отличие от запроса PT (особенно, если вы предоставляете дополнительные критерии для команды openreport).

Кроме того, поскольку вы часто форматируете датыдля SQL Server и запросов PT, у меня есть подпрограмма для форматирования даты для меня. Выше я использовал qudateSQLt (который включает время). Так что эта удобная функция денди выглядит так:

Public Function qudateSQLt(myDate As Variant) As String

  ' returns a formatted string of date, surrounded with # signs
  ' format is mm/dd/yyyy as required for sql, regardless of date setting

  If IsNull(myDate) = True Then
     qudateSQLt = ""
  Else
     ' use ISO date format
     qudateSQLt = "'" & Format(myDate, "yyyy-mm-dd HH:NN:SS") & "'"
  End If

End Function
...