2015年3月6日 星期五

Return Access Form input to Access Report or Form or Query

This tutorial explains how to return Access Form input to Access Query, Access Report, Access Form


MS Access Search Form


In order to explains how to return Access Form input to Access Query, Access Report, Access Form, , I will illustrate with a room booking system example.


To goal of the below example is to allow employee search which room he has booked in the system.


search_form_09


Step 1 – Create a room booking database


In this database, I created four fields, each employee can book multiple room.


search_form_00


Step 2 – Create a room booking search Form


Create a Form as below, using Employee ID and Booking Date as search criteria.


– Rename Empl ID text box as EmplID_tb


– Rename Booking Date text box as bookingDate_tb


– Change Record Selectors to No


search_form_03


Step 3 – Store user Input as Global variable


User input of Employee ID and Booking Date need to be stored in VBA Global variables, and then pass these variables to a search result.


Press ALT+F11, create a new Module called “globalVar” to declare these two variables. I separate these variables in a new Module just for easy reference. searchSQL_global is for used in SQL statement that I will explain later on.


Public emplID_global
Public bookingDate_global
Public searchSQL_global

Right click on Search button > Build Event > Code Builder, a new Access Class Objects called “Form_Search_Form” is created. Copy and paste the below code


Private Sub search_btn_Click()
   emplID_global = EmplID_tb.Value
   bookingDate_global = bookingDate_tb.Value
End Sub

Once you click on the Search button, the text boxes in the Form are stored as global variable.


Step 4 – Return result from database using SQL


You can return SQL result in Report, Form, or Query.


Method 1: Return SQL result in Query


The below code creates a Query called “tempQry” using CreateQueryDef Method and then open it using DoCmd.OpenQuery Method.


Just in case “tempQry” already exists in database, DoCmd.DeleteObject Method deletes tempQry if it exists.


Private Sub search_btn_Click()
    Dim db As DAO.Database
    Set db = CurrentDb
    Dim qdf As DAO.QueryDef
    Dim searchSQL_global As String
    
    emplID_global = EmplID_tb
    bookingDate_global = DateSerial(Year(bookingDate_tb), Day(bookingDate_tb), Month(bookingDate_tb))
    searchCriteria = "where [Empl ID] =" & "'" & emplID_global & "'" & " AND [Booking Date]=#" & bookingDate_global & "#"
    searchSQL_global = "Select * From [Schedule_Table] " & searchCriteria
    
    On Error Resume Next
    DoCmd.DeleteObject acQuery, "tempQry"
    On Error GoTo 0
    
    Set qdf = db.CreateQueryDef("tempQry", searchSQL_global)
    DoCmd.OpenQuery ("tempQry")
'DoCmd.OpenForm "Result_Form"
'DoCmd.OpenReport "Result_Report", acViewPreview
End Sub

Return Access Form input in Query


search_form_05


Method 2: Return SQL result in another Form


Create a Form called Result Form as below, and then


search_form_04


– Change Record Source to tempQry


– Change Allow Additions to No (not allow user to add record, because it would show an additional blank row)


– Change Record Selectors to No (Optional, I just don’t like the selector)


– Insert code in Method 1 and change the last line to DoCmd.OpenForm “Result_Form


Return Access Form input in Form


search_form_06


Method 3: Return SQL result in Report


Create a Form called Result Report as below, and then


search_form_07


– Change Record Source to tempQry


– Insert code in Method 1 and change the last line to DoCmd.OpenReport “Result_Report”, acViewPreview


Return Access Form input in Report


search_form_08


Alternative method to return Access Form input


Instead of creating a Query to use as Record Source for Form / Report, you can also use the SQL (searchSQL_global) as Record Source to return Access Form input.


Private Sub search_btn_Click()
    Dim db As DAO.Database
    Set db = CurrentDb
    Dim searchSQL_global As String
    
    emplID_global = EmplID_tb
    bookingDate_global = DateSerial(Year(bookingDate_tb), Day(bookingDate_tb), Month(bookingDate_tb))
    searchCriteria = "where [Empl ID] =" & "'" & emplID_global & "'" & " AND [Booking Date]=#" & bookingDate_global & "#"
    searchSQL_global = "Select * From [Schedule_Table] " & searchCriteria
    
    DoCmd.OpenForm "Result_Form", acViewPreview, searchSQL_global
    'DoCmd.OpenReport "Result_Report", acViewPreview, searchSQL_global
End Sub

 


Outbound References


https://msdn.microsoft.com/en-us/library/office/ff820845.aspx?f=255&MSPPError=-2147217396


 



Return Access Form input to Access Report or Form or Query

沒有留言:

張貼留言