Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Smart search for combo box

Posted on 2002-06-26
4
Medium Priority
?
444 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 300 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

Veeam Disaster Recovery in Microsoft Azure

Veeam PN for Microsoft Azure is a FREE solution designed to simplify and automate the setup of a DR site in Microsoft Azure using lightweight software-defined networking. It reduces the complexity of VPN deployments and is designed for businesses of ALL sizes.

Question has a verified solution.

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

Microsoft Access is a place to store data within tables and represent this stored data using multiple database objects such as in form of macros, forms, reports, etc. After a MS Access database is created there is need to improve the performance and…
A Case Study of using the Windows API to provide RS232 communications capability in Access without the use of Active-X controls.
With just a little bit of  SQL and VBA, many doors open to cool things like synchronize a list box to display data relevant to other information on a form.  If you have never written code or looked at an SQL statement before, no problem! ...  give i…
The Relationships Diagram is a good way to get an overall view of what a database is keeping track of. It is also where relationships are defined. A relationship specifies how two tables connect to each other. As you build tables in Microsoft Ac…
Suggested Courses

578 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