Help needed in creating either a crosstab query or an equivalent VBA function.

bfuchs used Ask the Experts™
Hi Experts,

I need to have the following in a sub form within a main form.

From the table Patients_Daily_Medications

with the fields below.

I need a crosstab query that would show me Medications as column heading and sequence as row heading and TimeGiven as the values.

See attached what the data looks like, and what I am trying to accomplish (not completed as you can see...)

At the end I would need this query as the record source of a form that has a patientID and a date as fields, so this should only return values of a sibgle patient at a particular day.

PS- Note TimeGiven has a date+time, we need to extract the Time only.

PS -, a VBA function that will open a recordset of that table, Accept two params (PatientID,Day) and return the following would also serve the purpose.
ALBUTEROL: 9:00 AM, 11:00 AM      BUDESONIDE: 11:AM, 1:00PM, 5:00 PM      MIRALAX: 3:PM

Thanks in advance.
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
John TsioumprisSoftware & Systems Engineer

I think that a form based on a crosstab query is not a very good idea...since crosstab is readonly...unless you use it as an optical that you put it as a "subform' along with a helping form to input the "data"
so that you put it as a "subform' along with a helping form to input the "data"
Correct, this is what I'm trying to do.
However I am open to a vba solution as well.
This is the function I was looking for...
Public Function GetMedications(PatID As Long, Day As Date) As String
    Dim rs As DAO.Recordset, s As String, sMed As String
    Set rs = CurrentDb.OpenRecordset("Select Medication, TimeGiven from Patients_Daily_Medications where PatientID = " & PatID & " and Day = #" & Day & "# and medication is not null and TimeGiven is not null order by Medication, Sequence")
    If rs.EOF Then
        GetMedications = ""
        Exit Function
    End If
    While Not rs.EOF
        If sMed <> rs("Medication") Then
            s = s & "    " & rs("Medication") & ";"
        End If
        s = s & ", " & Format(rs("TimeGiven"), "HH:MM")
        sMed = rs("Medication")
    GetMedications = Trim(Replace(s, ";,", ";"))
End Function

Open in new window

Mark EdwardsChief Technology Officer

So you answered your own question......

I don't think you get any points for answering your own question, but I'll let the moderator be the judge of that.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial