jwcolby
jwcolby at colbyconsulting.com
Thu Feb 19 19:24:55 CST 2009
I was trying so hard to keep quiet. ;-) And how could seek over and over and over and over be any faster than sucking the results out of a collection? OK, I'll go back to being quiet. John W. Colby www.ColbyConsulting.com Drew Wutka wrote: > 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 >> >