What do you not understand about using the unbound combobox to input search criteria and applying the input to filter report? It is not much different from what you have to open the report filtered by form current record PatientID. Review
http://www.allenbrowne.com/ser-62.html
Retrieving the most recent VisitDate can be done by query. Build an aggregate query that retrieves the maximum visit date for each patient then join that query to Patient table. Example of an all-in-one SQL:
SELECT Patient.*, MaxDate FROM Patient INNER JOIN (SELECT PatientID, Max([VisitDate]) As MaxDate FROM Visit GROUP BY PatientID) As LastVisit ON LastVisit.PatientID=Patient.PatientID;
or domain aggregate function:
SELECT Patient.*, DMax("VisitDate", "Visit", "PatientID=" & [PatientID]) AS MaxDate FROM Patient;
Or do the DMax in a textbox on report: =DMax("VisitDate", "Visit", "PatientID=" & [PatientID])
Domain aggregate functions can perform slowly.