DBCombo - Won't search...

Posted on 1999-01-06
Last Modified: 2013-12-25
I've used the DBCombo control on several apps in VB5/ISGDataControl(ADO).  Works fine, displays the ListField items in dropdown -  but have never been able to get it to search the ListField for the users input. VB5 help sez: "Users can search the DBCombo control by typing a value into the text box portion of the control. Once entered, this value is located in the list and the current list item is set to that item." This isn't happening, regardless of how I set any/every property that appears even remotely related to the seach behavior that I assume exists.  Any help would be greatly appreciated.
Dan Foster
Question by:danfoster
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
  • 3
  • 2
  • 2
  • +2

Expert Comment

ID: 1498781
you could try to change the style of the DBCombo to
2 - dbcDropdownList...although there might be some limitations to this style...1 that i know is that you can't assign value to the combo can only drop down to select the value...

Expert Comment

ID: 1498782
the style of the combo box is change at the Properties windows...

Author Comment

ID: 1498783
Thanks, but I've tried the dbcDropDownList Style setting - and just about every other property/method that I can find, without success. I am using the DBCombo control that came with the Enterprise version of VB5 with SPk3 installed. I'll try an eval of 3rd party list controls, but still I wonder if it is a known limitation of the standard control when using ADO (ISGData control)or something else...
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!


Expert Comment

ID: 1498784
I've experienced the same non-behavior... I think the control just doesn't work as advertised. You MAY be able to code the darn thing to search and select in the keypress event of the control. (just thought of this... may do is myself) But as for the "factory" control, I don't think it will do it.

Expert Comment

ID: 1498785
try this:
style of the DBCombo to 2 - dbcDropdownList and then set the
MatchEntry property to 1 - Extended Matching.



Accepted Solution

CraigLazar earned 100 total points
ID: 1498786
Hi DanFosyer
Try this it worked for me

Put the following code in the combo...

Private Sub cboAccess_KeyUp(Index As Integer, KeyCode As _
                            Integer, Shift As Integer)
   Call cboAddChar(cboAccess(Index), KeyCode, Shift)
End Sub

and put the following code in a module ....

Public Function cboAddChar(pComboListBox As Object, pKey As Integer, pShift As Integer) As Long
' This function will check to see if the text value of the combo
' box is equal to any of the list items.  The list will be check
' only if the shiftstate is not control or alt and if the key is
' a control character

   Dim lResult As Long
   On Error GoTo Err_cboAddChar
   lResult = -1
   Select Case pKey
      Case 0 To 31
      Case vbKeyEnd, vbKeyHome, vbKeyLeft, vbKeyUp, _
           vbKeyRight, vbKeyInsert, vbKeyDelete

         If pShift = 2 Then 'control key pressed
            lResult = cboSelString(pComboListBox)
         End If

      Case Else

         If pShift < 2 Then 'shift key or none
            lResult = cboSelString(pComboListBox)
         End If
   End Select
   cboAddChar = lResult
   Exit Function
   Select Case Err.Number
      Case Else
         cboAddChar = -1
         Exit Function
   End Select
End Function

Public Function cboSelString(pComboListBox As Object) As Long
'this function works like a quick fill in Quicken. This function is called
'in a change event of a combobox and finds the item in the list based on the
'first characters that the user types. If it finds a match, the user's input
'is left unhighlighted while the remaining characters are highlighted.

   Dim nIndex As Long
   Dim cSearch As String
   Dim cFound As String
   ' get the contents in input box
   cSearch = LTrim(pComboListBox.Text)    

   nIndex = SendMessage(pComboListBox.hwnd, CB_FINDSTRING, -1, _

   If (nIndex <> -1) Then           ' -1 means found nothing
      pComboListBox.ListIndex = nIndex 'display the found item
      cFound = pComboListBox.List(nIndex)
      If (Len(cFound) >= Len(cSearch)) Then 'highlight remainder
         pComboListBox.SelStart = Len(cSearch)
         pComboListBox.SelLength = Len(cFound) - Len(cSearch)
      End If
   End If
   cboSelString = nIndex     'returns -1 if not found, else returns index
End Function

good luck


Author Comment

ID: 1498787
Craig, Thanks for the code. I gave it a shot in a testApp.  Encountered problem because the SendMessage function from your code appears to be undefined.  My testApp chokes on:

   nIndex = SendMessage(pComboListBox.hwnd, CB_FINDSTRING, -1, _

I can't finded any embedded functions by this name. What does SendMessage reference.  Thanks, Dan

Expert Comment

ID: 1498788
Sorry mate i forgot to put that in

it is a call to the windows api
'Put this in the global declarations of the form
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

(Let me know what happens)


Author Comment

ID: 1498789
Thanks Craig, I got it to work. Learned a bit about making API calls which is new territory for me.

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Introduction In a recent article ( for the Excel community, I showed an improved version of the Excel Concatenate() function.  While writing that article I realized that no o…
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
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…

756 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