У меня есть запрос с именем qryActive.
Возвращает всех активных пациентов, которые у меня есть в базе данных пациентов.Я использую этот запрос для заполнения подробного раздела отчета с именем: rpt_handover_concise.
В этом отчете приводятся сведения об отдельных пациентах, а также создается строка, в которой показаны все их методы для облегчения боли, которые в настоящее время используются.
При выполнении через код он попадает в определенную запись с уникальным идентификатором Patient_UID = 17.
Он работает через код, и все результаты такие, какими они должны быть.Однако сразу после этого он снова вызывает эту запись и снова просматривает код, но на этот раз он изменил некоторые детали облегчения боли, в результате чего вызывается другая подпрограмма, которая не содержит данных, относящихся к этому пациенту.
Детали запроса следующие:
SELECT PatientDB.Patient_UID, PatientDB.Patient_ReferralDate,
PatientDB.Patient_Surname, PatientDB.Patient_Firstname,
PatientDB.Patient_CHI, Locations.Locations_Name,
PatientDB.Patient_Referral, PatientDB.Patient_Notes,
PatientDB.Patient_Active, PatientDB.Patient_NeedsReview,
PatientDB.Adjuncts_Nil, PatientDB.Adjuncts_Other,
PatientDB.Adjuncts_ITM, PatientDB.Adjuncts_ITF,
PatientDB.Adjuncts_KetInf, PatientDB.Adjuncts_LidInf,
PatientDB.Adjuncts_Block, PatientDB.Adjuncts_Cath,
Analgesia_Primary.Analgesia_Name,
Analgesia_Primary.Analgesia_UID, Locations.Locations_UID
FROM Analgesia_Primary INNER JOIN (Locations INNER JOIN
PatientDB ON Locations.Locations_UID = PatientDB.Location) ON
Analgesia_Primary.Analgesia_UID = PatientDB.Primary_Analgesia
WHERE (((PatientDB.Patient_Active)=True));
Он фильтрует базу данных пациентов, чтобы получить только «активные», а также получает несколько битов информации из других таблиц для справки.
Когда я запускаю запрос, данные, которые я получаю, полностью верны.
Когда я запускаю отчет с кодом в разделе format_detail:
Option Compare Database
Option Explicit
Private Sub Detail_Format(Cancel As Integer, FormatCount As
Integer)
'run for each detail section of the form
On Error GoTo ErrHandler
Dim adjuncts As String
lblCatheter.Visible = False 'sets catheter refill label to
invisible
txtRefill.value = "" 'resets value of text box
txtRefill.Visible = False 'hides refill text box
Select Case Patient_NeedsReview.value
Case True 'if needsReview = TRUE
lblPainReview.Visible = True 'show needs review label
Case False 'case if FALSE
lblPainReview.Visible = False 'hide label
End Select
If Me.Adjuncts_Nil.value = -1 Then
' if no adjuncts
txtAdjuncts.value = "No adjuncts" 'print this
Exit Sub
Else
Select Case Me.Adjuncts_Block.value
Case True 'if they have a nerve block
adjuncts = "Nerve block" + vbCrLf 'add this to adjuncts string
End Select
Select Case Me.Adjuncts_Cath.value
Case True 'if they have a nerve catheter
getCatheterRefill 'get information for refill
adjuncts = adjuncts + "Nerve Catheter" + vbCrLf 'add tis to
string
Case False
lblCatheter.Visible = False 'hide catheter label
txtRefill.Visible = False
End Select
Select Case Me.Adjuncts_ITF.value 'if used ITF
Case True
adjuncts = adjuncts + "Intrathecal Fentanyl" + vbCrLf 'add to
adjuncts string
End Select
Select Case Me.Adjuncts_ITM.value 'if used ITM
Case True
adjuncts = adjuncts + "Intrathecal Morphine" + vbCrLf
End Select
Select Case Me.Adjuncts_KetInf.value 'if used ketamine infusion
Case True
adjuncts = adjuncts + "Ketamine Infusion" + vbCrLf
End Select
Select Case Me.Adjuncts_LidInf 'if used lidocaine infusion
Case True
adjuncts = adjuncts + "Lidoncaine Infusion" + vbCrLf
End Select
Select Case Me.Adjuncts_Other.value 'if used any other adjuncts
Case True
adjuncts = adjuncts + "Other"
End Select
End If
Me.txtAdjuncts.value = adjuncts 'set value of adjuncts to
complete string
Exit Sub
ErrHandler:
MsgBox Err.Number & ": " & Err.Description, vbOKOnly, "Error"
End Sub
Private Sub getCatheterRefill() 'subroutine to get catheter
refill info
On Error GoTo ErrHandler
Dim sql As String 'sql string to run
Dim rst As DAO.Recordset 'new recordset
Dim refillTime As Date 'refill date/time variable
'write SELECT statement to get refill time / date from
Catheter_Info table where Patient_UID matches
sql = "SELECT Refill FROM Catheter_Info WHERE [Catheter_Info].
[Patient_UID] = " & Me.Patient_UID & ";"
Set rst = CurrentDb.OpenRecordset(sql) 'opens recordset using
query
If rst.RecordCount = 0 Then 'no records
lblCatheter.Visible = False
txtRefill.Visible = False
Exit Sub
Else
If IsNull(rst!Refill) Then
'refill will not be required
txtRefill.value = "Refill will not be needed"
lblCatheter.Visible = True
Else
refillTime = rst!Refill 'gets refilltime from recordset
lblCatheter.Visible = True ' shows label and textbox and writes
refill time to textbox
txtRefill.value = refillTime
txtRefill.Format = "dd/mm/yy, hh:mm"
txtRefill.Visible = True
End If
End If
Exit Sub
ErrHandler:
MsgBox Err.Number & ": " & Err.Description, vbOKOnly, "Error"
Exit Sub
End Sub
Закрытая подпрограмма format_details проходит дваждыдля каждой записи, найденной в таблице Patient_DB.Я не совсем уверен, почему это так.
Я удалил все свои данные (как это только на стадии тестирования) и сбросил все свои номера и т. Д. При добавлении 3 новых записей, кажется, работает нормально, хотяон по-прежнему запускает format_detail дважды для каждой записи, и я не могу понять это.
Ранее во второй раз, когда он пробегал раздел, информация, которую он читал для текущей записи, изменилась, например, Adjuncts_Nil изменился с -1на 0, а Adjuncts_Cath был изменен с 0 на -1, поэтому он начал бы поиск информации о катетере боли, используя другую подпрограмму (неуместно).
Любые идеи, которые высоко ценятся, или, если вам нужна дополнительная информация, пожалуйста, дайте мнезнаю.
Большое спасибо,
Джефф