[AccessD] Find First in an Array?

Drew Wutka DWUTKA at Marlow.com
Thu Feb 19 22:27:39 CST 2009


Hmmmmm, probably true.  The best way to go is still with a class and
collection.  But reversing the logic to loop through the recordset is
probably the best solution, between speed and least coding....

Drew

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Salakhetdinov
Shamil
Sent: Thursday, February 19, 2009 6:04 PM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Find First in an Array?

Hi Drew,

But the point isn't that ".Seek is faster then simply running through
the recordset" - the point is that .Seek is good(/speedy) enough and
that using .Seek involves the least amount of code refactoring work for
Rocky AFAIS - please correct me if I'm wrong...

Thank you.

--
Shamil

-----Original Message-----
From: "Drew Wutka" <DWUTKA at marlow.com>
To: "Access Developers discussion and problem
solving"<accessd at databaseadvisors.com>
Date: Thu, 19 Feb 2009 17:38:01 -0600
Subject: Re: [AccessD] Find First in an Array?

> 
> But how could seek be any faster then simply running through the
> recordset?
> 
> Drew
> 
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of
Salakhetdinov
> Shamil
> Sent: Thursday, February 19, 2009 3:40 PM
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] Find First in an Array?
> 
> You decide, Rocky,
>  
> Do you have time for that experimenting?
> 
> May I warn you about what is known as:
>  
> "Premature Optimization"
> http://c2.com/cgi/wiki?PrematureOptimization 
>  
> and 
>  
> "Premature Generalization" 
> http://c2.com/cgi/wiki?PrematureGeneralizationIsEvil 
>  
> ?
>  
> Have a look:
>  
> "Death by premature generalization" 
> http://ryanfarley.com/blog/archive/2004/04/30/570.aspx
>  
>  
> My name is Shamil, you know :) and I have been a premature generalizer
> in many cases I must admit - but I'm getting more and more XP/SCRUM
> agile habits these days, and I'm getting more fun from programming
real
> life business tasks without my premature generalization and
optimization
> not so good(?) past habits...
>  
> IMO in the case of the context of this thread using .Seek is the
closest
> and quickest yet good enough (and maybe the only one needed for many
> years ahead) solution/transition from your existing .FindFirst-based
> code...
>  
> If that would not be good/speedy enough in your case then I'd
probaably
> use static array loaded on first call/after reset using .GetRows()
with
> accompanying static collection with FormName/ControlName as a key to
> keep value for static array entry index, and a function to get
> translation value using this collection/array...
>  
> etc...
>   
> Thank you.
>  
> --
> Shamil
> 
> -----Original Message-----
> From: "Rocky Smolin at Beach Access Software" <rockysmolin at bchacc.com>
> To: "'Access Developers discussion and problem
> solving'"<accessd at databaseadvisors.com>
> Date: Thu, 19 Feb 2009 09:56:55 -0800
> Subject: Re: [AccessD] Find First in an Array?
> 
> > 
> > Dang.  I think you're right.  Gotta try that.  You think it'll be
> faster
> > than SEEK? 
> > 
> > 
> > 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 Drew
Wutka
> > Sent: Thursday, February 19, 2009 9:33 AM
> > To: Access Developers discussion and problem solving
> > Subject: Re: [AccessD] Find First in an Array?
> > 
> > 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
> > 
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com The information contained
in
> this
> > transmission is intended only for the person or entity to which it
is
> > addressed and may contain II-VI Proprietary and/or II-VI Business
> Sensitive
> > material. If you are not the intended recipient, please contact the
> sender
> > immediately and destroy the material in its entirety, whether
> electronic or
> > hard copy. You are notified that any review, retransmission,
copying,
> > disclosure, dissemination, or other use of, or taking of any action
in
> > reliance upon this information by persons or entities other than the
> > intended recipient is prohibited.
> > 
> > 
> > -- 
> > 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
> The information contained in this transmission is intended only for
the person or entity to which it is addressed and may contain II-VI
Proprietary and/or II-VI Business Sensitive material. If you are not the
intended recipient, please contact the sender immediately and destroy
the material in its entirety, whether electronic or hard copy. You are
notified that any review, retransmission, copying, disclosure,
dissemination, or other use of, or taking of any action in reliance upon
this information by persons or entities other than the intended
recipient is prohibited.
> 
> 
> -- 
> 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
The information contained in this transmission is intended only for the person or entity to which it is addressed and may contain II-VI Proprietary and/or II-VI Business Sensitive material. If you are not the intended recipient, please contact the sender immediately and destroy the material in its entirety, whether electronic or hard copy. You are notified that any review, retransmission, copying, disclosure, dissemination, or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited.





More information about the AccessD mailing list