Solved

Smart search for combo box

Posted on 2002-06-26
4
427 Views
Last Modified: 2008-03-17
What is the correct code for doing combo box smart searches in Access?

I have written VB 6.0 applications that use smart search logic for combo boxes.  I have the need to use this type of logic on a form in an Access 97 database application, but the logic isn't the same.  One issue is that the SendMessage call in the VB code requires the handle of the combo box, while access only has a property (hWnd) for at the form/report level, not the control level.  Another issue is the difference in the way the combo list items are referenced.

Below are some pieces of my modified VB code for Access that doesn't work.  It always goes to the first item in the list, based on the using the form's window handle?  Any ideas on how to fix this?

Public Declare Function SendMessage Lib "user32" _
    Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As _
    Long, ByVal wParam As Long, ByVal lParam As Any) As Long

Global Const CB_FINDSTRING = &H14C


Private Sub cboRepNum_KeyPress(KeyAscii As Integer)
    Dim intIndex As Long
    Dim strTemp As String
   
    'Figure out the string prefix to search for
    If cboRepNum.SelStart = 0 Then
        strTemp = cboRepNum.Text & Chr(KeyAscii)
    Else
        strTemp = Left(cboRepNum.Text, cboRepNum.SelStart) & Chr(KeyAscii)
    End If
   
    Dim intWindowHandle As Long
    intWindowHandle = Screen.ActiveForm.hwnd
   
    intIndex = SendMessage(intWindowHandle, CB_FINDSTRING, -1, strTemp)
    '-1 return code indicates failure to find the string
    If intIndex <> -1 Then
        'SendMessage returns the index of the first occurrence
        cboRepNum.ListIndex = intIndex
       
        'Set the text selection appropriately for the suggested match
        cboRepNum.SelStart = Len(strTemp)
        cboRepNum.SelLength = Len(cboRepNum.Text) - Len(strTemp)
        KeyAscii = 0
    End If
End Sub
0
Comment
Question by:garyw1
4 Comments
 
LVL 54

Expert Comment

by:nico5038
ID: 7112411
Hi,

I'm not sure what you mean with the "combo box smart searche".
Normally in access the combobox already has a feature called "autoappend". This will show matches as long as they are present in the underlaying table/query.

Can you explain what you want to do "functionally" ?

Nic;o)
0
 
LVL 1

Expert Comment

by:frankylew
ID: 7112768
Yes, agree with nico.
0
 
LVL 11

Accepted Solution

by:
joekendall earned 100 total points
ID: 7113986
This is how you get the hWnd of a control in Access. I also agree with Nico though that Access automatically will find an item in a combobox based on what you type in in the edit control of the combobox.

'-------------------------------------------------------------
'Taken from Dev Ashish web site www.mvps.org/access
'
'When an Access control on a form receives the focus,
'it becomes a true window and it's possible to retrieve
'it's handle by using the GetFocus API.   Note that
'because Access controls do not behave like VB controls,
'there's not a whole lot that we can do with the hWnd.
'
'Joe Kendall 8/13/2001
'-------------------------------------------------------------

Private Declare Function GetFocus Lib "user32" () As Long
         
Public Function fhWnd(ctl As Control) As Long
    On Error Resume Next
    ctl.SetFocus
    If err Then
        fhWnd = 0
    Else
        fhWnd = GetFocus
    End If
    On Error GoTo 0
End Function

Thanks!

Joe
0
 

Author Comment

by:garyw1
ID: 7146631
The GetFocus function did not fix my broken code problem, but it did answer the windows handle question for an Access form control.  As for my solution I will just stay with my original option and work around the default functionality of the combo box control.  Thank you for your time.


0

Featured Post

Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Experts-Exchange is a great place to come for help with solutions for your database issues, and many problems are resolved within minutes of being posted.  Others take a little more time and effort and often providing a sample database is very helpf…
Overview: This article:       (a) explains one principle method to cross-reference invoice items in Quickbooks®       (b) explores the reasons one might need to cross-reference invoice items       (c) provides a sample process for creating a M…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
In Microsoft Access, when working with VBA, learn some techniques for writing readable and easily maintained code.

856 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question