Thanks Crystal. I'll try and digest this and see if I can get it to work.
--- In MS_Access_Professionals@yahoogroups.com, Crystal <strive4peace2008@...> wrote:
>
> Hi John,
>
> Create a Report Filter (WhereCondition clause of OpenReport)
> ~~~
>
> design a report to show the information (for ALL records)
>
> set up a form to be used as a Report Menu with, for example:
> comboboxes to choose specific criteria
> a textbox or combo for Date1
> a textbox or combo for Date2
> a command button to launch the report
>
> It is best to build a filter string for the report (as opposed to embedding a parameter in a query)--in this way, you can use textboxes, comboboxes, listboxes, etc to make it easier for the user to choose criteria and you can ignore criteria when it has not been specified...
>
> ~~~
> here is an example that tests criteria and builds a filter string to use as a parameter in OpenReport for the WHERECONDITION clause
>
> DoCmd.OpenReport reportname[, View][, FilterName][, WhereCondition]
>
> ie:
>
> DoCmd.OpenReport "MyReport", acViewPreview,, "city IN ('Ct','JHB')"
> ~~~
> ********************************
> ********************************
>
> I like to avoid dynamic criteria in queries ... and actually almost anywhere -- code writes a lot of SQL <smile>
>
> This is used a lot:
>
> CODE
> Â Â Â Â Â DoCmd.OpenReport "ReportName", acPreview, , varCriteria
>
>
> WHERE
> varCriteria is how to limit the records. For instance -->
> "CustomerID = " & Me.CustomerID
> OR
> "PartID = " & me.PartID & " AND OrderDate =#" & me.OrderDate & "#"
>
> varCriteria is the WHERE clause of an SQL statement without the word "where"
>
> another advantage of using controls on forms is that you can ignore the criteria is the user didn't fill anything out because you can test for that in your code.
>
> ~~~
> assuming you are in the code behind the ReportMenu form... here is a general case:
>
> CODE
> '~~~~~~~~~~~~~~~~~~~~~~~~~~
> Â Â 'tell Access you are going to create a variable
> Â Â dim varFilter as variant
> Â
> Â Â 'initialize the variable
> Â Â varFilter = null
>
> Â Â 'substitute YOUR controlname in here after "Me."
> Â Â 'we are testing to see if it is filled out
> Â Â 'if it is, we are going to make varFilter hold the criteria
> Â Â If not IsNull(me.text_controlname ) Then
>      varFilter = "[TextFieldname]= '" & me.controlname_for_text & "'"
> Â Â end if
> Â
> Â Â 'test the next control
> Â Â If not IsNull(me.date_controlname ) Then
> Â Â Â Â Â 'if we alread have criteria, add AND to specify that and more
> Â Â Â Â Â varFilter = (varFilter + " AND ") _
>        & "[DateFieldname]= #" & me.controlname_for_date & "#"
> Â Â end if
>
> Â Â 'test the next control
> Â Â If not IsNull(me.numeric_controlname ) Then
> Â Â Â Â Â varFilter = (varFilter + " AND ") _
> Â Â Â Â Â Â Â & "[NumericFieldname]= " & me.controlname_for_number
> Â Â end if
> Â
>
> Â Â if not IsNull(varFilter) thenÂ
> Â Â Â Â Â Â DoCmd.OpenReport "ReportName", acViewPreview, , varFilter
> Â Â else
> Â Â Â Â Â Â DoCmd.OpenReport "ReportName", acViewPreview
> Â Â endif
>
> '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 'SPACE UNDERSCORE at the end of a line means that the statement is continued on the next line
> '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>
> I have used:
>
> TextFieldname to show how text needs to be delimited - with single quote marks (you can also use double quote marks
>
> DateFieldname to show that dates need to be delimited with #
>
> NumericFieldname to show that numbers are not delimited
>
> each time, we are testing to see if a filter control is filled out.
>
> If it is, we are going to see if we first need to add AND (if the filter string already says something)
> Then we are going to add the criteria for that filter
> varFilter = (varFilter + " AND ") & ... ' some other criteria
>
> make sure that the referenced fields are in the underlying RecordSet for the report -- and it is sometimes necessary for the fields to be in controls on the report (the Visible property can be No)
>
> For a Date Range, you would do:
>
> CODE
> Â Â If not IsNull(me.date1_controlname ) Then
> Â Â Â Â Â varFilter = (varFilter + " AND ") _
> Â Â Â Â Â Â Â & "[DateFieldname]>= #" & me.controlname_for_date1Â & "#"
> Â Â end if
>
> Â Â If not IsNull(me.date2_controlname ) Then
> Â Â Â Â Â varFilter = (varFilter + " AND ") _
> Â Â Â Â Â Â Â & "[DateFieldname] <= #" & me.controlname_for_date2Â & "#"
> Â Â end if
>
>
> '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> If you are not using the American Date Format, then you may wish to use the ISO 8601 representation of the date:
>
> CODE
> Format(me.date_controlname, "\#yyyy\-mm\-dd\#")
>
> instead of
> "#" & me.date_controlname & "#"
>
> '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> IF you want to also PRINT the criteria on the report
>
> put a LABEL on your PageFooter
> name --> Label_Criteria
>
> then, in the OnFormat event of the ReportHeader
>
> CODE
> '~~~~~~~~~~~~~~~~~~
> Â Â if len(trim(nz(Me.Filter,""))) > 0 then
> Â Â Â Â Â me.Label_Criteria.Caption = Me.Filter
> Â Â Â Â Â me.Label_Criteria.Visible = true
> Â Â else
> Â Â Â Â Â me.Label_Criteria.Visible = false
> Â Â end if
> '~~~~~~~~~~~~~~~~~~
>
>
>
> '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Difference between + and &
> '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> & and + are both Operators
>
> The standard Concatenation Operator is ampersand (&). If a term that is concatenated is Null (has no data; unknown), all terms will display if you use ampersand.
>
> The Addition Operator is the plus sign (+) ⦠but, even if one of the terms has a value, the result will be Null if any term is Null (kind of like multiplying by 0). As in math, what is enclosed in parentheses will be evaluated first.
>
> Null + "anything" = Null
> Null & "anything = "anything"
>
> "something " + "anything" = "something anything"
> "something " & "anything" = "something anything"
> no difference because both of the terms have a value
>
> Null + "" = Null
> Null & "" = ""
>
> (Null + " ") & "Lastname" = "Lastname"
> (Null & " ") & "Lastname" = " Lastname"
> in the second case, the parentheses do not make a difference, each term is concatenated -- and note the space in the result before Lastname
>
> Do you see the difference between using + and using & ? For instance, if you want to add a space between first and last name but you are not sure that first name will be filled out, you can do this:
>
> (Firstname + " ") & Lastname
>
> What is in the parentheses is evaluated first -- then it is concatenated to what comes next
>
> You might also want to do this:
>
> (Firstname + " ") & (Middlename + " ") & Lastname
>
> Combining + and & in an expression gives you a way to make the result look right without having to test if something is not filled out.
>
> What if firstname is filled but nothing else? There will be a space at the end. Usually, this is not a problem but if you want to chop it off, you can wrap the whole expression in the Trim function, which truncates leading and trailing spaces.
>
> Trim((Firstname + " ") & (Middlename + " ") & Lastname)
>
> for more on delimiters and other fundamental topics, read Access Basics*. All your fields come from tblJob. Your data structure needs to be normalized. Especially focus on the chapters on Normalization and Relationships in Access Basics
>
> *Access Basics by Crystal
> http://www.AccessMVP.com/strive4peace
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> also, you are using reserved words. TYPE is a reserved word; do not use it as a name of any of your objects (fields, tables, controls, aliases, etc)
>
> Problem names and reserved words in Access, by Allen Browne
> http://www.allenbrowne.com/AppIssueBadWord.html
>
>
> Warm Regards,
> Crystal
>
> Â *
> Â Â (: have an awesome day :)
> Â *
>
>
>
> ________________________________
> From: yshopper
> Subject: Re: [MS_AccessPros] Parameter Query Listbox
>
> Report will work as well. How would I go about doing that?
>
> Thanks
>
> --- In Crystal <strive4peace.> wrote:
> >
> > Hi John,
> >
> > basing a form on a parameter query is not a good idea as forms are primarily used to change data. See the code in the thread, "Filter a continuous form", which has been discussed today. It shows how to set a form filter based on unbound criteria controls that the user can specify
> >
> >
> > Are you wanting to display information only? If so, a Report is best
> >
> > Warm Regards,
> > Crystal
> >
> > Â *
> > Â Â (: have an awesome day :)
> > Â *
> >
> >
> >
> > ________________________________
> >Â From: yshopper
> >Â
> > I need to create a Form based on a Parameter query. The Parameter can be selected from multiple choices. Table tbl_Items has a Binding Status field that is a lookup from Table tbl_BindingStatus.
> >
> > I tried basing the query on just the Items table, but that did not work. I alos tried a query using both tables, but don't think I entering the Criteria correctly.
> >
> > I did find a way to do this w/o a Listbox, but would like to get this way to work.
> >
> > Any help or tips are appreciated.
> >
> > Thanks,
> > John
> >
>
>
> [Non-text portions of this message have been removed]
>
Jumat, 30 Desember 2011
Re: [MS_AccessPros] Parameter Query Listbox
__._,_.___
MARKETPLACE
.
__,_._,___
Langganan:
Posting Komentar (Atom)
Tidak ada komentar:
Posting Komentar