[AccessD] Strategies for populating combo boxes

Gustav Brock Gustav at cactus.dk
Wed Nov 8 04:34:39 CST 2006


Hi Shamil

Very good.

Of course, if the data aren't static a static array (or static collection or static recordset) cannot be used or, at least, it has to be refilled/required somehow when the underlying data changes. A global variable can be used which is set when data change and reset after the array is refilled.

To watch how intensely a callback function is called, insert a debug line like this:

Public Function OrderListPrint( _
  ctl As Control, _
  ID As Long, _
  row As Long, _
  col As Long, _
  Code As Integer)
  
  Static astrPrint(1 To 7) As String
  
  Dim varValue            As Variant
  Dim lngCount            As Long
  
  Select Case Code
    Case acLBInitialize
      ' Global variable can be set to force a refill of array.
      If Len(astrPrint(1)) = 0 Or pbooRefill = True Then
        ' Fill array.
        For lngCount = 1 To 7
          astrPrint(lngCount) = GetMsg("SaleId90" & lngCount)
        Next
        ' Reset global variable.
        pbooRefill = False
      End If
      varValue = True
    Case acLBOpen
      varValue = Timer
    Case acLBGetRowCount
      varValue = 7    ' Rows.
    Case acLBGetColumnCount
      varValue = 2    ' Columns.
    Case acLBGetColumnWidth
      varValue = -1   ' Column width.
    Case acLBGetValue
      If col = 0 Then
        varValue = row + 1
      ElseIf col = 1 Then
        varValue = astrPrint(row + 1)
      End If
    Case acLBGetFormat     ' Format the data.
      ' varValue = strFormat      
    Case acLBEnd
      ' Do something when form with listbox closes or
      ' listbox is requeried.
  End Select
  
  Debug.Print code, varValue
  OrderListPrint = varValue
    
End Function

/gustav

>>> shamil at users.mns.ru 07-11-2006 19:29:37 >>>
Drew and Gustav,

I will try to "cook" a sample where static array caching can't be used and
then a combo could result in datasheet form scrolling slowdown...

If I will not come with such a sample here in a month (no time currently to
trick around it) then the case I mentioned was the case of the bad callback
function design.

BTW, in MS Access online help is written: "The number of times your
user-defined function is called for acLBGetValue and acLBGetFormat to get
list entries and to format strings varies depending on the number of
entries, the user's scrolling, and other factors." 

"The user's scrolling" they say - be aware of that when using callback
functions - this is what I meant first of all...

--
Shamil 





More information about the AccessD mailing list