Возникли проблемы при компиляции подсчета из таблицы в MS Access

#ms-access

#ms-access

Вопрос:

Я любитель использовать MS Access для создания некоторых баз данных для работы. В настоящее время я пытаюсь создать базу данных для отслеживания людей, находящихся на карантине из-за потенциального заражения COVID-19. У меня есть исходные данные, но мне нужна помощь в подсчете чисел, чтобы получить результат, который нам нужен. Я не могу получить доступ к этому сайту на работе, а дома работаю по памяти, так что, пожалуйста, потерпите меня. Та часть, где я постоянно получаю ошибки, связана со строкой, похожей на:

TallyRecordset![Pos подрядчика, а не Hos] = 0

Я получаю сообщение об ошибке, которое, как мне кажется, говорит о том, что оно не определено, но я снова отключаюсь от памяти и думаю, что это была ошибка 3021. Я пытался прийти к этому несколькими разными способами, уже используя вложенные операторы if / then (потому что вышеприведенный пример будет выглядеть как подрядчик, у которого положительный результат теста, но он не был госпитализирован, поэтому его нельзя считать прямым), и подсчет идет непосредственно в таблицу, которую я сделал для подсчета с полями в виде чисел иэто не сработало. И тогда я подумал, что создание целочисленной переменной и превращение их в поля в таблице, которые я изменил на строки, решит проблему, но я получил ту же ошибку. После поиска проблемы в Google в течение нескольких дней и не получив никаких решений, которые имеют смысл для меня, я даже не уверен, что я делаю это правильно. Я предполагаю, что мне нужно что-то делать с запросами, но я понятия не имею. Спасибо, что нашли время, чтобы прочитать это, и за любой вклад, который у вас есть.

Редактировать: Ошибка, которую я получаю, это:

Ошибка времени выполнения ‘3021’: нет текущей записи

. Он выделяет линию:

CountRecordset.Edit

Я пытаюсь получить результат, который легко скопировать и вставить в таблицу в PowerPoint для слайда.

 Private Sub Command18_Click()

    Dim TrackingDatabase As Database, TrackingRecordset As Recordset
    Set TrackingDatabase = CurrentDb
    Set TrackingRecordset = TrackingDatabase.OpenRecordset("Roster", dbOpenDynaset)

    TrackingRecordset.MoveFirst
    While Not TrackingRecordset.EOF
        If TrackingRecordset![Quarrantined Until at Least] > Date Then
            Dim NotTrackingDatabase As Database, NotTrackingRecordset As Recordset
            Set NotTrackingDatabase = CurrentDb
            Set NotTrackingRecordset = NotTrackingDatabase.OpenRecordset("Formerly Tracked People", dbOpenDynaset)
            NotTrackingRecordset.AddNew
                NotTrackingRecordset![Status] = TrackingRecordset![Status]
                NotTrackingRecordset![Last Name] = TrackingRecordset![Last Name]
                NotTrackingRecordset![First Name] = TrackingRecordset![First Name]
                NotTrackingRecordset![Rank] = TrackingRecordset![Rank]
                NotTrackingRecordset![Unit] = TrackingRecordset![Unit]
                NotTrackingRecordset![DoD ID Number] = TrackingRecordset![DoD ID Number]
                NotTrackingRecordset![Age] = TrackingRecordset![Age]
                NotTrackingRecordset![Case Number] = TrackingRecordset![Case Number]
                NotTrackingRecordset![Confirmed Case] = TrackingRecordset![Confirmed Case]
                NotTrackingRecordset![Hospitalized] = TrackingRecordset![Hospitalized]
                NotTrackingRecordset![Asymptomatic] = TrackingRecordset![Asymptomatic]
                NotTrackingRecordset![Symptomatic] = TrackingRecordset![Symptomatic]
                NotTrackingRecordset![Date of Symptoms] = TrackingRecordset![Date of Symptoms]
                NotTrackingRecordset![Date of Last Contact] = TrackingRecordset![Date of Last Contact]
                NotTrackingRecordset![Quarrantined Until at Least] = TrackingRecordset![Quarrantined Until at Least]
                NotTrackingRecordset![Date of Notification] = TrackingRecordset![Date of Notification]
                NotTrackingRecordset![Notes] = TrackingRecordset![Notes]
            NotTrackingRecordset.Update
            Call NotTrackingRecordset.Close
            TrackingRecordset.Delete
            TrackingRecordset.MoveNext
        Else
            TrackingRecordset.MoveNext
        End If
    Wend

    Dim DependentsRecovered, DependentsQnotPos, DependentsQPos, DependentsPosnotHos, DependentsPosHos As Integer
    Dim OtherContractorRecovered, OtherContractorQnotPos, OtherContractorQPos, OtherContractorPosnotHos, OtherContractorPosHos As Integer
    Dim TotalRecovered, TotalQnotPos, TotalQPos, TotalPosnotHos, TotalPosHos As Integer

    DependentsRecovered = 0
    DependentsQnotPos = 0
    DependentsQPos = 0
    DependentsPosnotHos = 0
    DependentsPosHos = 0
    OtherContractorRecovered = 0
    OtherContractorQnotPos = 0
    OtherContractorQPos = 0
    OtherContractorPosnotHos = 0
    OtherContractorPosHos = 0
    TotalRecovered = 0
    TotalQnotPos = 0
    TotalQPos = 0
    TotalPosnotHos = 0
    TotalPosHos = 0

    TrackingRecordset.MoveFirst
    While Not TrackingRecordset.EOF
        If TrackingRecordset![Status] = "Other Contractor" Then
            If TrackingRecordset![Confirmed Case] = "Yes" Then
                OtherContractorQPos = OtherContractorQPos   1
                If TrackingRecordset![Hospitalized] = "Yes" Then
                    OtherContractorPosHos = OtherContractorPosHos   1
                    TrackingRecordset.MoveNext
                Else
                    OtherContractorPosnotHos = OtherContractorPosnotHos   1
                    TrackingRecordset.MoveNext
                End If
            Else
                OtherContractorQnotPos = OtherContractorQnotPos   1
                TrackingRecordset.MoveNext
            End If
        Else
            If TrackingRecordset![Confirmed Case] = "Yes" Then
                DependentsQPos = DependentsQPos   1
                If TrackingRecordset![Hospitalized] = "Yes" Then
                    DependentsPosHos = DependentsPosHos   1
                    TrackingRecordset.MoveNext
                Else
                    DependentsPosnotHos = DependentsPosnotHos   1
                    TrackingRecordset.MoveNext
                End If
            Else
                DependentsQnotPos = DependentsQnotPos   1
                TrackingRecordset.MoveNext
            End If
        End If
    Wend

    Call TrackingRecordset.Close

    Set NotTrackingDatabase = CurrentDb
    Set NotTrackingRecordset = NotTrackingDatabase.OpenRecordset("Formerly Tracked People", dbOpenDynaset)

    NotTrackingRecordset.MoveFirst
    While Not NotTrackingRecordset.EOF
        If NotTrackingRecordset![Status] = "Other Contractor" Then
            If NotTrackingRecordset![Confirmed Case] = "Yes" Then
                If NotTrackingRecordset![Hospitalized] = "Yes" Then
                    OtherContractorPosHos = OtherContractorPosHos   1
                    OtherContractorRecovered = OtherContractorRecovered   1
                    NotTrackingRecordset.MoveNext
                Else
                    OtherContractorPosnotHos = OtherContractorPosnotHos   1
                    OtherContractorRecovered = OtherContractorRecovered   1
                    NotTrackingRecordset.MoveNext
                End If
            Else
                NotTrackingRecordset.MoveNext
            End If
        Else
            If NotTrackingRecordset![Confirmed Case] = "Yes" Then
                If NotTrackingRecordset![Hospitalized] = "Yes" Then
                    DependentsPosHos = DependentsPosHos   1
                    DependentsRecovered = DependentsRecovered   1
                    NotTrackingRecordset.MoveNext
                Else
                    DependentsPosnotHos = DependentsPosnotHos   1
                    DependentsRecovered = DependentsRecovered   1
                    NotTrackingRecordset.MoveNext
                End If
            Else
                NotTrackingRecordset.MoveNext
            End If
        End If
    Wend

    Call NotTrackingRecordset.Close

    TotalRecovered = DependentsRecovered   OtherContractorRecovered
    TotalQnotPos = DependentsQnotPos   OtherContractorQnotPos
    TotalQPos = DependentsQPos   OtherContractorQPos
    TotalPosnotHos = DependentsPosnotHos   OtherContractorPosnotHos
    TotalPosHos = DependentsPosHos   OtherContractorPosHos

    Dim CountDatabase As Database, CountRecordset As Recordset
    Set CountDatabase = CurrentDb
    Set CountRecordset = CountDatabase.OpenRecordset("Counts", dbOpenDynaset)

    CountRecordset.Edit
        CountRecordset![Total Recovered] = TotalRecovered
        CountRecordset![Total Q not Pos] = TotalQnotPos
        CountRecordset![Total Q Pos] = TotalQPos
        CountRecordset![Total Pos not Hos] = TotalPosnotHos
        CountRecordset![Total Pos Hos] = TotalPosHos
        CountRecordset![Dependents Recovered] = DependentsRecovered
        CountRecordset![Dependents Q not Pos] = DependentsQnotPos
        CountRecordset![Dependents Q Pos] = DependentsQPos
        CountRecordset![Dependents Pos not Hos] = DependentsPosnotHos
        CountRecordset![Dependents Pos Hos] = DependentsPosHos
        CountRecordset![Other Contractor Recovered] = OtherContractorRecovered
        CountRecordset![Other Contractor Q not Pos] = OtherContractorQnotPos
        CountRecordset![Other Contractor Q Pos] = OtherContractorQPos
        CountRecordset![Other Contractor Pos not Hos] = OtherContractorPosnotHos
        CountRecordset![Other Contractor Pos Hos] = OtherContractorPosHos
    CountRecordset.Update

    Call CountRecordset.Close
 

Комментарии:

1. Предлагаю вам отметить детали сообщения об ошибке, где используется это выражение, структуру данных и желаемый результат в виде текстовых таблиц и отредактировать вопрос с этой информацией. Если это запрос, то предоставьте инструкцию SQL. Если VBA, то почтовый индекс.

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

3. Не предоставил таблицы данных. Скорее всего, есть более простой способ выполнить, но без выборочных данных и таблиц желаемых результатов трудно сказать, что именно. Добавленная информация не показывает строку, которую вы изначально назвали проблемой. Ошибка при редактировании набора записей, вероятно, означает, что в CountRecordset нет записей для редактирования. Почему у Графов нет никаких записей?

4. Во-первых, вместо циклического выполнения кода для подсчета, почему бы не выполнить агрегированный запрос с критериями фильтрации? Или агрегатная функция домена DCount ()?

5. Я не могу предоставить фактические таблицы данных, потому что это медицинская информация. Каждая запись будет содержать имя человека, возраст, статус (или, я полагаю, должность), если у него симптомы или симптомы, подтвержденный случай COVID, и госпитализирован он или нет. Код, который был отредактирован вверху, по сути, предназначался для удаления людей, прошедших 14-дневный период карантина, и помещения их в таблицу «Не отслеживается». Мне нужно будет взглянуть на эти два метода, поскольку я не использовал их раньше. Спасибо за помощь!