[AccessD] Find First in an Array?

jwcolby jwcolby at colbyconsulting.com
Thu Feb 19 11:47:09 CST 2009


ICK!

This application is PERFECT for caching.  The data does not change from the time the database opens 
to the time it closes.  The data is loaded once into collections and then the form is loaded from 
its specific collection (class instance).  If you are going to run through the entire recordset 
every time the form opens... why not simply load the data into a collection the first time and let 
the poor disk take a nap?

This is not rocket science.  In fact if I hadn't had some calls from clients interrupt me it would 
be done already.

John W. Colby
www.ColbyConsulting.com


Drew Wutka wrote:
> Hmmmm, actually, the way you have this set up, you could do this just
> fine without an array or collection.
> 
> Instead of this:
> 
> For Each ctl In frm
>     rstControls.FindFirst "fldLanguageForm = '" & argForm & "' and
> fldLanguageControl = '" _
>         & ctl.Name & "'"
> 
> Do this:
> 
> strSQL="SELECT fldLanguageControl, fldLanguage" & strLanguageToTranslate
> & " FROM tblYourTableName WHERE fldLanguageForm=""" & me.Name & """"
> set rs=New Recordset
> rs.open strsql,currentproject.connection, adopenkeyset,adlockreadonly
> if rs.eof=false then rs.movefirst
> do until rs.eof=true
> 	me(rs.fields(0).value).Caption=rs.fields(1).value
> Loop
> Rs.close
> Set rs=nothing
> 
> That way you are pulling the recordset up....and just running through it
> once...instead of trying to find every record based on the control.
> 
> Drew
> 
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Rocky Smolin
> at Beach Access Software
> Sent: Thursday, February 19, 2009 12:57 AM
> 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
> 



More information about the AccessD mailing list