When I use Dynamic Parameterized Queries I will create an Instant If statement to test the control on the form for Null, like this
IIf([Forms]![عرض بيانات المرضي]![txtID]<>"",[Forms]![عرض بيانات المرضي]![txtID],[Patients].[ID])
Your SQL was not good. Beyond the testing for Null issue, you were employing the AND operator where you should be using the OR operator. The following SQL statement will work if you use it to replace the SQL in your current query named searchQ.
Code:
SELECT Patients.ID, Patients.PatientName, Patients.Gender, Patients.Nationality, Patients.FileNumber, Patients.PatientNumber, Patients.YearOfBirth, Patients.NationalID, Patients.YearlyCheckDate, Patients.PatientType, Patients.Treatment, Patients.CellNumber
FROM Patients
WHERE (((Patients.ID)=IIf([Forms]![عرض بيانات المرضي]![txtID]<>"",[Forms]![عرض بيانات المرضي]![txtID],[Patients].[ID]))) OR (((Patients.PatientName)=IIf([Forms]![عرض بيانات المرضي]![txtName]<>"",[Forms]![عرض بيانات المرضي]![txtName],[Patients].[PatientName]))) OR (((Patients.FileNumber)=IIf([Forms]![عرض بيانات المرضي]![txtFileNo]<>"",[Forms]![عرض بيانات المرضي]![txtFileNo],[Patients].[FileNumber]))) OR (((Patients.PatientNumber)=IIf([Forms]![عرض بيانات المرضي]![txtPatID]<>"",[Forms]![عرض بيانات المرضي]![txtPatID],[Patients].[PatientNumber]))) OR (((Patients.NationalID)=IIf([Forms]![عرض بيانات المرضي]![TxtNationalID]<>"",[Forms]![عرض بيانات المرضي]![TxtNationalID],[Patients].[NationalID]))) OR (((Patients.CellNumber)=IIf([Forms]![عرض بيانات المرضي]![txtPhoneNo]<>"",[Forms]![عرض بيانات المرضي]![txtPhoneNo],[Patients].[CellNumber])));
On your form, you are using an embedded Macro with your control button's Click Event. If it works, fine, keep it. Otherwise, replace the control with a new Command Button. In the new command button use VBA in the click event.
Me.ResultView.Requery
I believe that is correct. If not, try
Me.ResultView.Form.Requery