[AccessD] Find First in an Array? - The Solution

Stuart McLachlan stuart at lexacorp.com.pg
Sun Feb 22 06:39:54 CST 2009


Here's my simple procedural take on the problem.   
I started thinking about  ways to avoid stepping through the whole controls collection for the 
form and to optimise looping through the ones we are interested in.

This method opens a form containing over 200 labels and buttons with no discernable delay.

All that is required is that you:
a. Maintain a standard naming convention for Labels and Buttons:
 Label1, Label2 etc and  Button1001,Button1002 etc within the form

b. Define a FormID constant in each form's module,
c. Define constants in each form's module which record the number of labels and buttons   
d. Store your translation strings with two fields, FormNumber and ControlNumber


FormNumber - Long
ControlNumber - Long
Language1 - String
Language 2 - String
Language 3 - String
etc 

1. When the user changes language, load the new one into a Translation collection.
In a Module:

Global gcolTranslation As New Collection

Function GetLanguage(Language  as long) 
  Dim rs as DAO Recordset 
 If gcolTranslation.Count > 0 Then
     For i = 1 To gcolTranslation.Count
        gcolTranslation.Remove 1
     Next
  End If
  Set rs = currentdb.openrecordset("uSysTranslationTable")
  While not rs.eof
   gcolTranslation.Add rs(Language + 2), _
         Format(rs(0),"00") & rs(1)
   rs.movenext
  wend
  rs.close
  set rs = nothing
End Function

2.  In each Form create 3 constants:
Const FormID As String = "01"
Const NoOfLabels As Long = 200
Const NoOfButtons as Long = 5

3.  Use the following on_open event for each form.

Private Sub Form_Open(Cancel As Integer)
Dim ctl As Control
Dim x As Long
Dim sX As String
For x = 1 To NoOfLabels
  Me("Label" & x).Caption = gcolTranslation(FormID & x)
Next
For x = 1001 To 1000 + NoOfButtons
  Me("Button" & x).Caption = gcolTranslation(FormID & (x)
Next
End Sub

-- 
Stuart






More information about the AccessD mailing list