In this step, you will create a SearchByName method routine and add code to the SearchButton.Click event to perform a search routine based on field STD_OBJ.
|
1. Create a SearchByName method routine. The surname search will use a LIKE operator in the SQL statement. The search value will have "wild card" characters added, so that the search finds all employees with their surname beginning or containing the search value. Add logic to perform the following:
Clear the list EmployeeList
Case of field STD_OBJ /* search type */
When = BEGIN
Assign STD_STRNG to SearchName as uppercase (see code below)
Assign STD_STRNG to QUOTE + STD_STRNG + % + QUOTE
When = CONTAINS
Assign STD_STRNG to QUOTE + % + SearchName.value.trim + % + QUOTE
EndCase
Assign STD_STRNG to SQL statement which retrieves fields Identification, Surname and Given Names from table XDEMOLIB.xEmployee where Surname LIKE STD_STRNG
SELECT_SQL for fields Identification, Surname and GivenNames Using STD_STRNG
Assign Fullname to surname.trim + ', ' + GivenNames.trim
Assign SD_DESCS to xEmployeeIdentification
Add each entry to EmployeeList
End Select
Assign xEmployeeIdentification, xEmployeeSurname and xEmployeeGivenNames to *null
Your code should look like the following:
Mthroutine Name(SearchByName)
Clr_List Named(#EmployeeList)
Case Of_Field(#STD_OBJ) /* search type */
When (= BEGIN)
* make search value uppercase
#std_strng := #SearchName.value.replacesubstring( 1 1 #SearchName.value.uppercase.substring( 1 1 ) )
#std_strng := #QUOTE + #STD_strng + '%' + #QUOTE
When (= CONTAINS)
#STD_STRNG := #QUOTE + '%' + #SearchName.value.trim + '%' + #QUOTE
Endcase
#STD_STRNG := 'SELECT xEmployeeIdentification, xEmployeeSurname, xEmployeeGivenNames FROM XDEMOLIB.XEMPLOYEE WHERE ("xEmployeeSurname" like ' + #std_strng.trim + ')'
#xEmployeeIdentification := *null
Select_Sql Fields(#xEmployeeIdentification #xEmployeeSurname #xEmployeeGivenNames) Using(#std_strng)
#iiiFullName := #xEmployeeSurname.trim + ', ' + #xEmployeeGivenNames.trim
#std_descs := #xEmployeeIdentification
Add_Entry To_List(#EmployeeList)
Endselect
#xEmployeeIdentification #xEmployeeSurname #xEmployeeGivenNames := *null
Endroutine
2. Add code to the SearchButton.Click event to invoke SearchByName or SearchByMonth based on field STD_OBJ.
Evtroutine Handling(#SearchButton.Click)
Case (#STD_OBJ) /* search type */
When ('= BEGIN' '= CONTAINS')
#com_self.SearchByName
When (= MONTH)
#COM_SELF.SearchByMonth
Endcase
Endroutine
3. Create a method routine SearchByMonth which will complete in a later step.
4. Compile and test the form. You should be able to perform a surname search. Search beginning such as value 'Sa will find all surnames beginning Sa. A Search contains value 'ph' will find surnames such as Randolph and Shepherd. You could easily provide many more name search options.
5. Complete the SearchByMonth routine. The SQL MONTH function returns the 2 digit month portion of a date field.
Add code to perform the following:
Clear list EmployeeList
Assign STD_STRNG to SQL statement which retrieves fields Identification, Surname, Given Names and DateOfBirth from table XDEMOLIB.xEmployee where MONTH(DateofBirth) = ' + #SearchMONTH.AsString
SELECT_SQL for fields Identification, Surname and GivenNames Using STD_STRNG
Assign Fullname to surname.trim + ', ' + GivenNames.trim
Assign STD_DESCS to xEmployeeIdentification
Add each entry to EmployeeList
End Select
Your code should look like the following:
Mthroutine Name(SearchByMonth)
Clr_List Named(#EmployeeList)
#STD_STRNG := 'SELECT xEmployeeIdentification, xEmployeeSurname, xEmployeeGivenNames, xEmployeeDateOfBirth FROM XDEMOLIB.XEMPLOYEE WHERE MONTH(xemployeedateofbirth) = ' + #iiiMonth.asstring
#xEmployeeIdentification := *null
Select_Sql Fields(#xEmployeeIdentification #xEmployeeSurname #xEmployeeGivenNames) Using(#std_strng)
#iiiFullName := #xEmployeeSurname.trim + ', ' + #xEmployeeGivenNames.trim
#STD_DESCS := #xEmployeeIdentification
Add_Entry To_List(#EmployeeList)
Endselect
#xEmployeeIdentification #xEmployeeSurname #xEmployeeGivenNames := *null
Endroutine
6. Compile and test the form. You should now be able to perform a search by month and select any month to return all employees with Date of Birth containing the search month.