John W. Colby
jwcolby at colbyconsulting.com
Tue Oct 12 23:47:09 CDT 2004
Oops, sorry, the call to set a value would be Fltr "MyVarName", MyVarValue John W. Colby www.ColbyConsulting.com Contribute your unused CPU cycles to a good cause: http://folding.stanford.edu/ -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of John W. Colby Sent: Wednesday, October 13, 2004 12:28 AM To: 'Access Developers discussion and problem solving' Subject: RE: [AccessD] Help with syntax please....OpenRecordset BTW, the concept of the "static stored value" can be made even more useful if you use a collection to store the value, keyed on the name of the variable. In that way you can use a single function to set / retrieve a multitude of different stored values. Option Compare Database Option Explicit Private mcolFilter As Collection Private mblnFltrInitialized As Boolean Public Function Fltr(lstrName As String, Optional lvarValue As Variant) As Variant On Error GoTo Err_Fltr 'This sets up the collection if it isn't already initialized If mblnFltrInitialized = False Then Set mcolFilter = New Collection mblnFltrInitialized = True End If If IsMissing(lvarValue) Then 'This path is used to retrieve a value from the collection On Error Resume Next Fltr = mcolFilter(lstrName) If Err <> 0 Then Fltr = Null End If Else 'This path is used to store a variable on the collection On Error Resume Next mcolFilter.Remove lstrName mcolFilter.Add lvarValue, lstrName Fltr = lvarValue End If Exit_Fltr: Exit Function Err_Fltr: MsgBox Err.Description, , "Error in Function basFltrFunctions.Fltr" Resume Exit_Fltr Resume 0 '.FOR TROUBLESHOOTING End Function One function can now be called with a "variable name" and a value to store a value into a "variable". fltr MyValue, "MyVarName" MyValue can be anything at all, string numeric etc. If the variable name already exists, then it is removed and replaced with the new value. This effectively stores the value passed in even if there was already a value in the collection keyed on that name. To retrieve a value, just call the function passing in the name of the "variable" you want the value of. If there is no such variable name a null will be returned. MyVar = fltr("MyVarName") I don't remember right off hand whether a control or form can be passed in to a variant though I believe it can. Thus you need to be careful that you either do not pass in pointers to objects or that you make sure you clean out the collection before terminating your program. If there are no objects, it doesn't matter, i.e. the collection and its values can be cleaned up by VB as the app closes. If there are pointers to objects in there however VB may not correctly clean up the collection and the program may hang instead of exiting. John W. Colby www.ColbyConsulting.com Contribute your unused CPU cycles to a good cause: http://folding.stanford.edu/ -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Kath Pelletti Sent: Tuesday, October 12, 2004 11:50 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Help with syntax please....OpenRecordset Done, done and done. Thanks all for your help. I had no idea that a form criterion parameter couldn't be used in that way and could have wasted even more time. Kath ----- Original Message ----- From: Stuart McLachlan To: Access Developers discussion and problemsolving Sent: Wednesday, October 13, 2004 1:00 PM Subject: Re: [AccessD] Help with syntax please....OpenRecordset On 13 Oct 2004 at 11:46, Kath Pelletti wrote: > I am trying to use a saved query for my recordset source....but keep getting an error 'Too few parameters - expected 1' on the line 'Set rs = ' > After many hours, I can't fix it so would appreciate the help..... > The problem is in the query "QryWebLetter_ReadRecipientsEmai". You are probably using a reference a control on a form as a criterion/paramter for your query. You can't do that when you call the query as a recordset. My usual workaround is to create a Static function called StoredValue() to store the parameter, change the criterion in the query to "=StoredValue()" and set the value of the function before calling the query with "retval = StoredValue(Forms!myForm.myControl)" or just "StoredValue Forms!myForm.myControl" -- Stuart -- _______________________________________________ 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