#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-дневный период карантина, и помещения их в таблицу «Не отслеживается». Мне нужно будет взглянуть на эти два метода, поскольку я не использовал их раньше. Спасибо за помощь!