Solved

Smart search for combo box

Posted on 2002-06-26
4
429 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Save Selections in MS Access 3 30
Access #Deleted data 20 42
MS Access Pasthru Query to Execute SQL Stored procedure 8 37
Error 438 6 13
Introduction The Visual Basic for Applications (VBA) language is at the heart of every application that you write. It is your key to taking Access beyond the world of wizards into a world where anything is possible. This article introduces you to…
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…
In Microsoft Access, learn how to “cascade” or have the displayed data of one combo control depend upon what’s entered in another. Base the dependent combo on a query for its row source: Add a reference to the first combo on the form as criteria i…
With Microsoft Access, learn how to specify relationships between tables and set various options on the relationship. Add the tables: Create the relationship: Decide if you’re going to set referential integrity: Decide if you want cascade upda…

749 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