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

jwcolby jwcolby at colbyconsulting.com
Sun Feb 22 07:09:29 CST 2009


Actually I think this solution adds too much burden on the developer.  The thing is it is the 
computer doing the work and as Rocky said, who cares if the computer is unhappy.

Drew's solution was brilliant, rather than stepping through all the controls, step through all the 
RECORDS, then use the control name in the record to index into the controls collection.

Simple, sweet, and to the point.

As you grab the data, store to a collection and you are done.  I did some testing however and 
storing to a collection specific to the form is required to keep the speeds up.  It is at this point 
that the class begins to make sense again.  One class for the form, one as a supervisor for doing 
this stuff.  The class form holds a collection for the strings for the specific form, plus all the 
code for loading the data from the recordset.  The supervisor has a collection to hold the class 
instances for each form plus the code to decide which form is being processed.

Simple, sweet, and to the point.

John W. Colby
www.ColbyConsulting.com


Stuart McLachlan wrote:
> 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
> 



More information about the AccessD mailing list