A.D. Tejpal
adtp at airtelmail.in
Wed Dec 23 03:22:05 CST 2009
Rocky, Sample procedure named P_BuildQueryBySearchOnAllFields() as given below, will build a query outputting the records containing search sub-string in any of the fields. Sample call would be as follows: P_BuildQueryBySearchOnAllFields "<<MyTable>>", _ "<<MySearchString>>", "<<MyDestnQuery>>" This query can then be used to set up a recordset as needed. However, if you are keen to set up the recordset directly, without simultaneously building a query, it can be done by using sample function named Fn_GetRecordsetBySearchOnAllFields() as given below. Sample call would be as follows (rst being an object variable of DAO.Recordset type): Set rst = Fn_GetRecordsetBySearchOnAllFields( _ "<<MyTable>>", "<<MySearchString>>") An alternative style for handling the recordset generated by the sample function could be as follows: ' Code in VBA module '===================================== Sub TestFunction() With Fn_GetRecordsetBySearchOnAllFields( _ "<<MyTable>>", "<<MySearchString>>") Debug.Print "Recordset Details:" Debug.Print "Tot Fields = " & .Fields.Count Debug.Print "First field values in output:" .MoveFirst Do Until .EOF Debug.Print .Fields(0) .MoveNext Loop Debug.Print "Tot records = " & .RecordCount End With End Sub '=================================== If at any stage, you happen to need more complex search on all fields, my sample db named Form_SearchAllFields could be of interest to you. It is in Access 2000 file format and is available at Rogers Access Library. Link - http://www.rogersaccesslibrary.com/forum/forum_topics.asp?FID=45 The sample db provides advanced search features across whole data source (all fields - all records). For example, for a group of space separated words typed by the user, search for matching field values could be conducted in any of the following styles: (a) Match field values having any of search words. (b) Match field values having all of search words, but not necessarily in the same order as entered in search box. (c) Match field values having all of search words, in the same order as entered in search box. (d) Exact match of full field values against full contents of search box. Best wishes, A.D. Tejpal ------------ ' Code in VBA module '============================== Sub P_BuildQueryBySearchOnAllFields( _ TableName As String, _ SearchString As String, _ DestnQryName As String) Dim fd As DAO.Field Dim Qst As String, Crit As String Qst = "SELECT * FROM " & TableName Crit = "" With DBEngine(0)(0) ' Build criteria For Each fd In .TableDefs(TableName).Fields Crit = Crit & IIf(Len(Crit) > 0, " OR ", "") Crit = Crit & fd.Name & " Like '*" & _ SearchString & "*'" Next ' Delete destn query if already existing by that name On Error Resume Next DoCmd.DeleteObject acQuery, DestnQryName On Error GoTo 0 ' Create destn query Qst = Qst & IIf(Len(Crit) > 0, _ " WHERE " & Crit, "") & ";" .CreateQueryDef DestnQryName, Qst .QueryDefs.Refresh End With Set fd = Nothing End Sub '--------------------------------------------------- Function Fn_GetRecordsetBySearchOnAllFields( _ TableName As String, _ SearchString As String) As DAO.Recordset Dim fd As DAO.Field Dim Qst As String, Crit As String Qst = "SELECT * FROM " & TableName Crit = "" With DBEngine(0)(0) ' Build criteria For Each fd In .TableDefs(TableName).Fields Crit = Crit & IIf(Len(Crit) > 0, " OR ", "") Crit = Crit & fd.Name & " Like '*" & _ SearchString & "*'" Next ' Build SQL Qst = Qst & IIf(Len(Crit) > 0, _ " WHERE " & Crit, "") & ";" ' Set up recordset as per freshly built SQL Set Fn_GetRecordsetBySearchOnAllFields = _ .OpenRecordset(Qst, dbOpenDynaset) End With Set fd = Nothing End Function '=================================== ----- Original Message ----- From: Rocky Smolin To: 'Access Developers discussion and problem solving' Sent: Wednesday, December 23, 2009 02:24 Subject: [AccessD] Search All Fields Dear List: A client wants to search for the occurrence of a string in ANY field of a table similar to what he does in datasheet view of a table. But he wants all records with that string to end up in a recordset. Is there a way to do that in a query? MTIA Rocky Smolin