Как в Microsoft Access 2010 ссылаться на связанный элемент управления в отчете? - PullRequest
1 голос
/ 12 июня 2011

Я создаю отчет для отображения данных о клиентах с несколькими подотчетами для отображения различных демографических данных, разбитых по финансовым кварталам. Например, мой подчиненный отчет на основном языке клиентов имеет элемент управления со списком для создания строк в разделе сведений; элемент управления привязан к моей таблице выбора языка (я не уверен, что это актуально, но я использовал AutoNumber для первичного ключа выбора языка вместо имени самого языка в качестве ключа. Я могу изменить это, хотя если требуется). Для столбцов я создал метку для каждого финансового квартала. То, что я пытаюсь сделать, это для каждого выбора языка в этом связанном элементе управления, мне нужно, чтобы он увидел, какие клиенты говорят на этом языке, чтобы увидеть, когда они были впервые обслужены, чтобы разбить их на соответствующий финансовый квартал, и отобразить счетчик в соответствующие коробки.

В других подотчетах, таких как пол новых клиентов, с разбивкой по финансовым кварталам это было легко Есть только M / F, поэтому нет необходимости расширять его, поэтому я просто создал две строки с метками / прямоугольниками и использовал некоторый VBA для ссылки на запрос, который собрал мои данные клиента. Запрос выглядит, чтобы увидеть, когда они были впервые обработаны, и я написал функцию, возвращающую, к какому финансовому кварталу они относятся (Внимание: любительское кодирование впереди = D)

Public Function FiscalQuarter(InputDate As Date) As Integer

Dim ReportMonth As Integer
Dim ReportDay As Integer
Dim ReportYear As Integer
Dim FiscalYear As Integer


'''!!! Break up Current Date !!!'''
ReportMonth = Month(InputDate)
ReportDay = Day(InputDate)
ReportYear = Year(InputDate)

' Quarter 1
    If ReportMonth = "9" Then
        FiscalQuarter = 1
        FiscalYear = ReportYear + 1
    End If
    If ReportMonth = "10" Then
        FiscalQuarter = 1
        FiscalYear = ReportYear + 1
    End If
    If ReportMonth = "11" Then
        FiscalQuarter = 1
        FiscalYear = ReportYear + 1
    End If

' Quarter 2
    If ReportMonth = "12" Then
        FiscalQuarter = 2
        FiscalYear = ReportYear + 1
    End If
    If ReportMonth = "1" Then
        FiscalQuarter = 2
        FiscalYear = ReportYear
    End If
    If ReportMonth = "2" Then
        FiscalQuarter = 2
        FiscalYear = ReportYear
    End If

' Quarter 3
    If ReportMonth = "3" Then
        FiscalQuarter = 3
        FiscalYear = ReportYear
    End If
    If ReportMonth = "4" Then
        FiscalQuarter = 3
        FiscalYear = ReportYear
    End If
    If ReportMonth = "5" Then
        FiscalQuarter = 3
        FiscalYear = ReportYear
    End If

' Quarter 4
    If ReportMonth = "6" Then
        FiscalQuarter = 4
        FiscalYear = ReportYear
    End If
    If ReportMonth = "7" Then
        FiscalQuarter = 4
        FiscalYear = ReportYear
    End If
    If ReportMonth = "8" Then
        FiscalQuarter = 4
        FiscalYear = ReportYear
    End If

End Function

Затем в отчете ClientGender я использовал следующий код:

MaleFirstQ = DCount("MinOfEventDate", "qryQRChildDemographics", "FiscalQuarter([MinOfEventDate])=1 And [Gender]='M'")
MaleFirst.Caption = MaleFirstQ

Для каждого поля пола / квартала у меня есть фрагмент кода, похожего на приведенный выше, для назначения заголовка.

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

Я признаю, что я в некотором роде новичок, и мне нравится самому разбираться, играя с этим, но я совершенно застрял. Я медленно перебирал книги по Microsoft Access 2010, Microsoft Access 2010 и книги Справочника по программированию Wrox Microsoft Access 2010 (только что начатый), но пока не нашел того, что мне нужно. У меня такое ощущение, что мой подход к этой задаче совершенно неправильный, поэтому, если кто-нибудь и укажет мне правильное направление в том, что я пропускаю, и какие инструменты я буду использовать, я буду очень признателен!


Я пробовал несколько разных способов, но все они похожи на это с небольшими изменениями во втором критерии:

LanguageFirst.Caption = DCount("PrimaryLanguage", "qryQRChildDemographics", "FiscalQuarter([MinOfEventDate])=1 AND Me!LanguageField")

Выдает ошибку времени выполнения 2471 Мне не нравится Me! LanguageField.

Я также попробовал это как второй критерий:

[PrimaryLanguage]=Me.Controls!LanguageField

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

Ответы [ 3 ]

2 голосов
/ 13 июня 2011

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

  1. поля со списком не относятся к отчетам.Они являются объектами пользовательского интерфейса для редактирования, и отчет не может быть отредактирован (хотя я предполагаю, что с A2010 есть возможность редактирования данных в отчете, я бы не рекомендовал такую ​​вещь).Вместо этого вы должны выполнить соединение с таблицей, которая является основой поля со списком в источнике записей вложенного отчета.

  2. вы используете метки, когда вы должны использовать текстовые поля.Когда вы кодируете это:

    LanguageFirst.Caption = DCount ("PrimaryLanguage", "qryQRChildDemographics", "FiscalQuarter ([MinOfEventDate]) = 1 AND Me! LanguageField")

... вы назначаете данные для подписи.Вместо этого удалите заголовок и замените его текстовым полем, которое имеет в качестве своего ControlSource формулу DCount ().Вам также нужно будет изменить предложение WHERE, поскольку в DCount () не может быть Me!LanguageField (на самом деле я не понимаю, как это могло бы работать в любом контексте).

ЕслиВы делаете вышеизложенное (т. е. заменяете надписи, заголовки которых вы редактируете текстовыми полями), вы теряете проблему необходимости кодировать материал в VBA и получать код в правильных событиях и т. д.

1 голос
/ 12 июня 2011

Это не ответ на ваш вопрос, но он не так хорошо работает, как комментарий.Поскольку вы только начинаете использовать VBA, посмотрите, предпочитаете ли вы этот подход для своей функции FiscalQuarter.

Public Function FiscalQuarter(InputDate As Date) As Integer

    Select Case Month(InputDate)
      Case 9 To 11 ' Quarter 1
        FiscalQuarter = 1
      Case 1, 2, 12 ' Quarter 2
        FiscalQuarter = 2
      Case 3 To 5 ' Quarter 3
        FiscalQuarter = 3
      Case 6 To 8 ' Quarter 4
        FiscalQuarter = 4
    End Select

End Function
1 голос
/ 12 июня 2011

Попробуйте ввести третий параметр:

"FiscalQuarter([MinOfEventDate])=1 AND [PrimaryLanguage] = " & Me!LanguageField.Value

Вы должны создать строку, но если вы поместите Me!LanguageField в кавычки, то это будет рассматриваться как текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...