Rocky Smolin at Beach Access Software
rockysmolin at bchacc.com
Thu Feb 19 07:52:28 CST 2009
Max:
That's pretty much what I'm doing now, except the language choice is in a
global variable.
Rocky Smolin
Beach Access Software
858-259-4334
www.e-z-mrp.com
www.bchacc.com
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Max Wanadoo
Sent: Thursday, February 19, 2009 12:50 AM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Find First in an Array?
Rocky,
This is a simple coding solution. I have no idea of how fast it might be
viz-a-viz the Collections/Class solutions, but might give a reasonable
response time.
Called on the form's onload
Public Function pfTranslateLabels(frm As Form, strLanguage As String) ' EG:-
strLanguage = "fldLanguageChineseComplex"
Dim sql As String, rst As DAO.Recordset, ctl As Control, strFind As String
sql = "Select * from tblLanguages Where fldLanguageForm ='" & frm.Name &
"'"
Set rst = CurrentDb.OpenRecordset(sql)
If Not rst.EOF Then
For Each ctl In frm.Controls
If ctl.Type = acLabel Then
strFind = "fldLanugageControl='" & ctl.Name & "'"
rst.FindFirst strFind
If Not rst.NoMatch Then
ctl.Caption = rst(strLanguage)
End If
End If
Next ctl
End If
exithere:
Set rst = Nothing: Set ctl = Nothing
Exit Function
End Function
If you have lots of forms doing this, you might want to open the RecordSet
as a persistent one and not close it down after each form.
Max
On Thu, Feb 19, 2009 at 7:01 AM, Rocky Smolin at Beach Access Software <
rockysmolin at bchacc.com> wrote:
>
> Oops, just checked - those fields are indexed.
>
> Rocky Smolin
> Beach Access Software
> 858-259-4334
> www.e-z-mrp.com
> www.bchacc.com
>
>
>
> -----Original Message-----
> From: Rocky Smolin at Beach Access Software
> [mailto:rockysmolin at bchacc.com ]
> Sent: Wednesday, February 18, 2009 10:57 PM
> To: 'Access Developers discussion and problem solving'
> Subject: RE: [AccessD] Find First in an Array?
>
> John:
>
> The table layout is:
>
> fldLanguageID Autonumber
> fldLanguageForm Text Name of the form that the control is on
> fldLanguageControl Text Name of the control
> fldLanguageControlType Text Not Used
> fldLanguageEnglish Text
> fldLanguageChineseComplex Text
> fldLanguageChineseSimple Text
> fldLanguageSpanish Text
> fldLanguageFrench Text
>
> In the translate routine I use:
>
> Set frm = Forms(argForm)
> For Each ctl In frm
> rstControls.FindFirst "fldLanguageForm = '" & argForm & "' and
> fldLanguageControl = '" _
> & ctl.Name & "'"
>
> Where argForm is the form name passed to the function. So I think I
> might get a big boost in response time by indexing fldLanguageForm and
> fldLanguageControl.
>
> There are only about 2500 records in the table so I'm thinking that
> the whole recordset is probably in memory anyway.
>
>
> Rocky Smolin
> Beach Access Software
> 858-259-4334
> www.e-z-mrp.com
> www.bchacc.com
>
>
>
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of jwcolby
> Sent: Wednesday, February 18, 2009 5:46 PM
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] Find First in an Array?
>
> Does this imply a table structure of:
>
> TR_ID Auto
> TR_CtlName Text
> TR_L1 text (or memo?) for language 1
> TR_L2 text (or memo?) for language 2
> Etc
>
> I would suggest that you add a form (or container) field. A control
> name is unique on a form, however it could be the same on different
> forms but have a different language string. By having a form field
> you could pull subsets of records based on the form name, then use the
> control name (now guaranteed to be unique), then obtain the language
> string.
>
> It appears from your email however that you already have this stuff
> set up, so you might be resistant to modifying how it works.
>
> If this is all just one big table with control names guaranteed to be
> unique then you could just stash it in one big collection. There is a
> problem however which is that classes get pretty slow as they get
> large. If you get up past 10,000 strings (I don't know the exact
> point) it would bog back down. If you broke it down into controls on
> a form, then you would ensure that the total strings in any given
> collection is pretty small.
>
> Again I would build a class for all the code and the collection to
> load one form. then a supervisor class to hold instances of this form
> class keyed on form name.
>
> John W. Colby
> www.ColbyConsulting.com
>
>
> Rocky Smolin at Beach Access Software wrote:
> > Max:
> >
> > That would work except the table driven approach is so much more easier.
> > Easy to add a language (got French and Spanish now in addition to
> > traditional and simplified Chinese), too, or make a change to a
> translation.
> > To add a language I just add a column for that language to the
> > Control and Messages tables and send them to the translator. Add
> > that language to the language selector combo on the Preferences
> > form, and walla! Another language.
> >
> >
> > Rocky Smolin
> > Beach Access Software
> > 858-259-4334
> > www.e-z-mrp.com
> > www.bchacc.com
>
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com