2012-06-06 2 views
0

Привет, это моя цель. У меня есть поле даты начала (start_Date) и конечной даты (end_Date) и отчет, который имеет кросс-таблицу в качестве источника записи. Я хочу иметь возможность сортировать данные в своем отчете на основе дат, указанных в форме. Я попробовал 3 разных подхода.Проблема с ссылкой MS Access с полями формы

  1. Запуск макроса и открытие отчета с которой условие в этом случае доступа будет жаловаться и говорить «[Отчеты]! [AuditPTETotal]! [Дата] не является допустимой ссылка»

  2. Настройка «где условие» моего отчета через VBA. Другая ссылочная ошибка, но на этот раз она говорит, что поля моих форм недопустимы.

    Private Sub ViewReport_Click() 
    
        Dim strWhere As String 
    
        If Not IsNull(Me.start_Date) Then 
         strWhere = strWhere & " AND [Reports]![AuditPTETotal]![Date] >=#" & [Forms]! [AuditPTETotals]![start_Date] & "# " 
        End If 
        If Not IsNull(Me.end_Date) Then 
         strWhere = strWhere & " AND [Reports]![AuditPTETotal]![Date] <=#" & [Forms]! [AuditPTETotals]![end_Date] & "# " 
        End If 
        DoCmd.OpenReport "AuditPTETotal", acViewNormal, , strWhere 
    
        End Sub 
    
  3. И, наконец, передавая мои значения форм в запрос. Ни один из этих подходов не работал для меня, и мне действительно нужно сделать это. Я не в порядке. Любая помощь будет оценена по достоинству.

Запрос

PARAMETERS [Forms]![AuditPTETotals]![start_Date] DateTime, [Forms]![AuditPTETotals]! [end_Date] DateTime; 
TRANSFORM Sum(ScrapCollection.PTEtotal) AS SumOfPTEtotal 
SELECT ScrapCollection.Date, ScrapCollection.regNum 
FROM ScrapCollection INNER JOIN (ScrapTireType INNER JOIN ScrapCollectionTireType ON (ScrapTireType.scrapTireTypeID = ScrapCollectionTireType.scrapTireTypeID) AND (ScrapTireType.scrapTireTypeID = ScrapCollectionTireType.scrapTireTypeID)) ON ScrapCollection.scrapCollectionID = ScrapCollectionTireType.scrapCollectionID 
WHERE (((ScrapCollection.Date) Between [Forms]![AuditPTETotals]![start_Date] And [Forms]![AuditPTETotals]![end_Date])) 
GROUP BY ScrapCollection.Date, ScrapCollection.regNum 
PIVOT ScrapTireType.description; 
+0

Вы говорите, что вы хотите отсортировать дату, но ваш код подсказывает, что вы хотите отфильтровать дату, которую вы хотите сделать? Для кросс-таблиц, если вы хотите отфильтровать с помощью формы, вы должны включить параметр. – Fionnuala

+0

Это '[Reports]! [AuditPTETotal]! [Date]' предполагает, что у вас есть поле или элемент управления, называемый «Date». Дата является зарезервированным словом и не должна использоваться для обозначения объектов. – Fionnuala

+0

По существу, я хочу, чтобы в моем отчете отображались только записи, которые находятся между диапазоном дат, заданным start_Date и end_Date. – d9120

ответ

1

Если вы хотите ограничить результаты кросс-таблицы, используя форму, вы должны иметь параметры:

PARAMETERS [Forms]![AForm]![text0] DateTime, [Forms]![AForm]![text2] DateTime; 
TRANSFORM Count(Table1.AKey) AS CountOfAKey 
SELECT Table1.AText 
FROM Table1 
WHERE (((Table1.ADate) Between [Forms]![AForm]![text0] And [Forms]![AForm]![text2])) 
GROUP BY Table1.AText 
PIVOT Table1.ADate; 
+0

Спасибо. Я сделаю это. – d9120

+0

Сообщение об ошибке изменилось ... «Механизм базы данных Microsoft Access не распознает» как допустимое имя или выражение поля » – d9120

+0

My Query выше – d9120

Смежные вопросы