Rabu, 13 Juli 2011

[MS_AccessPros] Re: Help with reports.

 

Hey John, I'm trying to make the report but I'm having a small problem. Here is the query I'm using...

SELECT tblCustomers.IdCustomer, tblStatus.Status, tblCustomers.AccountNum, tblCustomers.CompanyName, tblCustomers.Notes1, tblAddresses.City, qryServices.ProxServ
FROM tblStatus INNER JOIN (tblCustomers INNER JOIN (tblAddresses INNER JOIN (tblInventory INNER JOIN qryServices ON tblInventory.IdInventory = qryServices.IdInventory) ON tblAddresses.IdAddress = tblInventory.IdAddress) ON tblCustomers.IdCustomer = tblAddresses.IdCustomer) ON tblStatus.IdStatus = tblCustomers.IdStatus
WHERE (((tblStatus.Status)=[ENTRAR STATUS]) AND ((tblAddresses.City)=[ENTRAR PUEBLO]) AND ((qryServices.ProxServ)=[ENTRAR MES]));

Now the problem is that each customer shows up in the report once for every record in the qryServices.ProxServ. I only need each customer to show up only once. I placed an updated sample of the db in assistance needed.
Edgar

--- In MS_Access_Professionals@yahoogroups.com, "rivera_vazquez_edgar" <xtintores@...> wrote:
>
> ALLRIGTH! Thanks John, It's working so far, queries are running right. So now to structure the report. I'll get to that this evening after work.
>
> Edgar
>
> --- In MS_Access_Professionals@yahoogroups.com, "John Viescas" <john@> wrote:
> >
> > Edgar-
> >
> > Hmmm. I see your confusion.
> >
> > You probably want to make note of the exact last service date and time, so
> > ServiceDate should remain Date/Time. Interval should also remain an integer.
> > What you need to change is qryServices:
> >
> > SELECT tblServices.IdService, tblServices.IdInventory, tblServices.IdEmp,
> > tblServices.ServDate, tblServices.Service, tblServices.Interval,
> > IIf(((Month([tblServices].[ServDate])+[tblServices].[Interval]) Mod
> > 12)=0,12,(Month([tblServices].[ServDate])+[tblServices].[Interval]) Mod 12) AS
> > ProxServ
> > FROM tblServices;
> >
> > Be sure to also remove the Format from the ProxServ field - it should display as
> > a number, not a month.
> >
> > qryActiveCustomers now looks like:
> >
> > PARAMETERS [Enter Service Month:] Short;
> > SELECT tblCustomers.*, tblAddresses.*, tblContacts.*, tblInventory.*,
> > MonthName([qryServices].[ProxServ]) & ", " &
> > IIf(Month(Date())<[qryServices].[ProxServ],Year(Date())+1,Year(Date())) AS
> > NextServ
> > FROM tblCustomers INNER JOIN ((tblAddresses INNER JOIN tblContacts ON
> > tblAddresses.IdAddress = tblContacts.IdAddress) INNER JOIN (tblInventory INNER
> > JOIN qryServices ON tblInventory.IdInventory = qryServices.IdInventory) ON
> > tblAddresses.IdAddress = tblInventory.IdAddress) ON tblCustomers.IdCustomer =
> > tblAddresses.IdCustomer
> > WHERE (((tblCustomers.IdStatus)=1) AND ((qryServices.ProxServ)=[Enter Service
> > Month:]));
> >
> >
> > John Viescas, author
> > Microsoft Office Access 2010 Inside Out
> > Microsoft Office Access 2007 Inside Out
> > Building Microsoft Access Applications
> > Microsoft Office Access 2003 Inside Out
> > SQL Queries for Mere Mortals
> > http://www.viescas.com/
> > (Paris, France)
> >
> >
> >
> > -----Original Message-----
> > From: MS_Access_Professionals@yahoogroups.com
> > [mailto:MS_Access_Professionals@yahoogroups.com] On Behalf Of
> > rivera_vazquez_edgar
> > Sent: Friday, July 08, 2011 1:00 AM
> > To: MS_Access_Professionals@yahoogroups.com
> > Subject: [MS_AccessPros] Re: Help with reports.
> >
> > John, I'm not quite sure on what to do.
> >
> > You saying to go ahead and make a table for the months with 3 fields, IdMonth,
> > MthNum, and MthName. Then include the IdMonth field in tblServices. If so, I
> > wont need ServiceDate field in tblService but you include that field in the code
> > for ProxServ. Also, the Interval field will have two posible options for data
> > input "6" or "12" because the services are either every 6 or 12 months. I
> > mention it because I don't see the 6 in the formula for ProxServ.
> >
> > Edgar
> >
> > --- In MS_Access_Professionals@yahoogroups.com, "John Viescas" <john@> wrote:
> > >
> > > Edgar-
> > >
> > > Instead of putting "January" in the table, put the month number - 1. 2 for
> > > February, 3 for March, and so on. If you want to display the month name, use
> > a
> > > combo box, but store the number. Now ProxServ looks like:
> > >
> > > IIf((tblService.ServiceDate + tblService.Interval) Mod 12 = 0, 12,
> > > (tblService.ServiceDate + tblService.Interval) Mod 12)
> > >
> > > In your query, use one parameter to prompt for the month number:
> > >
> > > PARAMETERS [Enter Service Month:] Integer;
> > > SELECT tblCustomers.*, tblAddresses.*, tblContacts.*, tblInventory.*
> > > FROM tblCustomers INNER JOIN ((tblAddresses INNER JOIN tblContacts ON
> > > tblAddresses.IdAddress = tblContacts.IdAddress) INNER JOIN (tblInventory INNER
> > > JOIN qryServices ON tblInventory.IdInventory = qryServices.IdInventory) ON
> > > tblAddresses.IdAddress = tblInventory.IdAddress) ON tblCustomers.IdCustomer =
> > > tblAddresses.IdCustomer
> > > WHERE (tblCustomers.IdStatus = 1) AND (qryServices.ProxServ =
> > > [Enter Service Month:]);
> > >
> > >
> > > John Viescas, author
> > > Microsoft Office Access 2010 Inside Out
> > > Microsoft Office Access 2007 Inside Out
> > > Building Microsoft Access Applications
> > > Microsoft Office Access 2003 Inside Out
> > > SQL Queries for Mere Mortals
> > > http://www.viescas.com/
> > > (Paris, France)
> > >
> > >
> > >
> > > -----Original Message-----
> > > From: MS_Access_Professionals@yahoogroups.com
> > > [mailto:MS_Access_Professionals@yahoogroups.com] On Behalf Of
> > > rivera_vazquez_edgar
> > > Sent: Thursday, July 07, 2011 1:54 PM
> > > To: MS_Access_Professionals@yahoogroups.com
> > > Subject: [MS_AccessPros] Re: Help with reports.
> > >
> > > John, that IdCustomer in tblContacts is not suposed to be there, I erased it.
> > > tblContacts is suposed to be linked to tblAddresses not tblCustomers because
> > > every contact belongs to an address. I fixed this and now I get data out of
> > the
> > > query.
> > >
> > > I'm seeing something that makes me think of changing the way the db records
> > the
> > > service dates. The way it's designed so far, if I want to see the customers I
> > > need to visit for service in july 2011 than I use the 1/jul/2011 to
> > 31/jul/2011
> > > dates. That will give me the right info, but, what if last year (2010) a db
> > > user forgot to change the status of an out-of business customer from active to
> > > out-of-business? That customer won't show up as a result in the query because
> > > the next service date was for july 2010 and it was not performed, BUT I would
> > > not see that the customer status was not changed, for as, if I recive that
> > > customer's data when I run the query for july 2011 and see that no service was
> > > done last year, I would know that the status was not changed.
> > >
> > > I don't know if you understand the example but, the thing is, the db we are
> > > using right now, althoug very poor in design (reason to make a new one),
> > manages
> > > the service date by month, reguardless of the year, ofcourse its not a
> > DateTime
> > > field.
> > >
> > > What comes to mind is (spit-balling):
> > >
> > > Make a tblMonth with all 12 months to replace the ServDate field in
> > tblServices
> > > using a combo box to edit the data...
> > > Leave the interval field in tblServices but limit the input value to 12 or 6
> > > (months) and for the ProxServ field (next service date), make a series of "if"
> > > conditions
> > >
> > > where (if(tblService.ServDate = "January" and tblService.Interval =
> > > "12","January","June")) OR (if(tblService.ServDate = "February" and
> > > tblService.Interval = "12","Febuary","July"))
> > >
> > > and so on for every month. The thing is, would that expression (being so long)
> > > work? or would I need to make a query for every month?
> > >
> > > Edgar
> > >
> > > --- In MS_Access_Professionals@yahoogroups.com, "John Viescas" <john@> wrote:
> > > >
> > > > Edgar-
> > > >
> > > > You had an error in qryServices. It should be:
> > > >
> > > > PARAMETERS [Enter From Date:] DateTime, [Enter To Date:] DateTime;
> > > > SELECT tblCustomers.*, tblAddresses.*, tblContacts.*, tblInventory.*
> > > > FROM tblCustomers INNER JOIN ((tblAddresses INNER JOIN tblContacts ON
> > > > tblAddresses.IdAddress = tblContacts.IdAddress) INNER JOIN (tblInventory
> > INNER
> > > > JOIN qryServices ON tblInventory.IdInventory = qryServices.IdInventory) ON
> > > > tblAddresses.IdAddress = tblInventory.IdAddress) ON tblCustomers.IdCustomer
> > =
> > > > tblAddresses.IdCustomer
> > > > WHERE (((tblCustomers.IdStatus)=1) AND ((qryServices.ProxServ) Between
> > [Enter
> > > > From Date:] And [Enter To Date:]));
> > > >
> > > > When I run qryServices, I find that services are to be scheduled in July
> > 2011
> > > > for inventory 4, 5, and 6. The addresses for these three items are 3 and 4.
> > > > BUT there is no contact linked for those two addresses! Addresses 3 and 4
> > are
> > > > for customers 4 and 5, respectively. The contacts listed for customers 4
> > and
> > > 5
> > > > are contacts 5 and 6 - but those two contact records do not have a related
> > > > IdAddress. The query will return zero rows as long as this is the case.
> > > >
> > > > Do you mean to link to contacts via IdCustomer? If so, why is there an
> > > > IdAddress in tblContacts at all?
> > > >
> > > >
> > > > John Viescas, author
> > > > Microsoft Office Access 2010 Inside Out
> > > > Microsoft Office Access 2007 Inside Out
> > > > Building Microsoft Access Applications
> > > > Microsoft Office Access 2003 Inside Out
> > > > SQL Queries for Mere Mortals
> > > > http://www.viescas.com/
> > > > (Paris, France)
> > > >
> > > >
> > > > -----Original Message-----
> > > > From: MS_Access_Professionals@yahoogroups.com
> > > > [mailto:MS_Access_Professionals@yahoogroups.com] On Behalf Of
> > > > rivera_vazquez_edgar
> > > > Sent: Wednesday, July 06, 2011 9:32 PM
> > > > To: MS_Access_Professionals@yahoogroups.com
> > > > Subject: [MS_AccessPros] Re: Help with reports.
> > > >
> > > > Ok John, I placed a copy of the db on the need asistance folder. the file is
> > > > called Fire Service Pro.
> > > >
> > > > Maybe this way you can actually test the db. Feel free to make changes.
> > > >
> > > > --- In MS_Access_Professionals@yahoogroups.com, "John Viescas" <john@>
> > wrote:
> > > > >
> > > > > Edgar-
> > > > >
> > > > > You said the field from qryServices was named NxtServ, so that's why I'm
> > > > testing
> > > > > for that field. Did you really name it ProxServ?
> > > > >
> > > > > I guessed at the name of the linking Status field in tblCustomers and the
> > > > actual
> > > > > underlying value that means "Active". If the field name or the value is
> > > > > different, you'll have to change that.
> > > > >
> > > > > I'm prompting for a "from" - "to" date because I assume "NxtServ" or
> > > > "ProxServ"
> > > > > is a Date/Time value. The Format of the field has no impact. Even if you
> > > > > format the field as "mmm," the underlying value that the query tests is
> > > still
> > > > a
> > > > > full date/time value. If you want the user to be able to enter a month
> > > > > abbreviation, then you would need to do:
> > > > >
> > > > > WHERE Format(qryServices.ProxServ, "mmm") = [Enter month (xxx)
> > abbreviation
> > > > for
> > > > > the next service:]
> > > > >
> > > > > But that will run much more slowly than entering a specific "from" and
> > "to"
> > > > > date.
> > > > >
> > > > >
> > > > > John Viescas, author
> > > > > Microsoft Office Access 2010 Inside Out
> > > > > Microsoft Office Access 2007 Inside Out
> > > > > Building Microsoft Access Applications
> > > > > Microsoft Office Access 2003 Inside Out
> > > > > SQL Queries for Mere Mortals
> > > > > http://www.viescas.com/
> > > > > (Paris, France)
> > > > >
> > > > >
> > > > >
> > > > > -----Original Message-----
> > > > > From: MS_Access_Professionals@yahoogroups.com
> > > > > [mailto:MS_Access_Professionals@yahoogroups.com] On Behalf Of
> > > > > rivera_vazquez_edgar
> > > > > Sent: Wednesday, July 06, 2011 9:01 PM
> > > > > To: MS_Access_Professionals@yahoogroups.com
> > > > > Subject: [MS_AccessPros] Re: Help with reports.
> > > > >
> > > > > Ok John, I made the changes according to the actual field names. Here is
> > the
> > > > > update:
> > > > >
> > > > > PARAMETERS [Enter From Date:] DateTime, [Enter To Date:] DateTime;
> > > > > SELECT tblCustomers.*, tblAddresses.*, tblContacts.*, tblInventory.*
> > > > > FROM (((tblCustomers INNER JOIN tblAddresses ON
> > > > > tblCustomers.CustomerID=tblAddresses.IdCustomer) INNER JOIN tblContacts ON
> > > > > tblAddresses.IdAddress=tblContacts.IdAddress) INNER JOIN tblInventory ON
> > > > > tblAddresses.IdAddress=tblInventory.IdAddress) INNER JOIN qryServices ON
> > > > > tblInventory.IdInventory=qryServices.IdInventory
> > > > > WHERE tblCustomers.IdStatus=1 And qryServices.ProxServ Between [Enter From
> > > > > Date:] And [Enter To Date:];
> > > > >
> > > > > It's on the right track as to what I need, but can you make these changes?
> > > > >
> > > > > In the PARAMETERS it should only ask for the date in the field ProxServ
> > from
> > > > the
> > > > > qryService, wich is in the following format (mmm)
> > > > >
> > > > > Also, instead of asking for the customer id, it should ask for the city
> > from
> > > > > tblAddress, so i'll get every customer in a given city for a specific
> > month.
> > > > >
> > > > > If that's how it should work the way you wrote the code, than I might be
> > > doing
> > > > > something wrong.
> > > > >
> > > > > Edgar
> > > > >
> > > > >
> > > > > --- In MS_Access_Professionals@yahoogroups.com, "John Viescas" <john@>
> > > wrote:
> > > > > >
> > > > > > Edgar-
> > > > > >
> > > > > > Your query might look like:
> > > > > >
> > > > > > PARAMETERS [Enter From Date:] DateTime, [Enter To Date:] DateTime;
> > > > > > SELECT tblCustomers.*, tblAddresses.*, tblContacts.*, tblInventory.*
> > > > > > FROM (((tblCustomers INNER JOIN tblAddresses
> > > > > > ON tblCustomers.CustomerID = tblAddresses.CustomerID)
> > > > > > INNER JOIN tblContacts
> > > > > > ON tblAddresses.AddressID = tblContacts.AddressID)
> > > > > > INNER JOIN tblInventory
> > > > > > ON tblAddresses.AddressID = tblInventory.AddressID)
> > > > > > INNER JOIN qryServices
> > > > > > ON tblInventory.InventoryID = qryServices.InventoryID
> > > > > > WHERE tblCustomers.StatusID = 1
> > > > > > AND qryServices.NxtServ BETWEEN [Enter From Date:] And [Enter To Date:];
> > > > > >
> > > > > > I just guessed at the names of the linking fields.
> > > > > >
> > > > > >
> > > > > > John Viescas, author
> > > > > > Microsoft Office Access 2010 Inside Out
> > > > > > Microsoft Office Access 2007 Inside Out
> > > > > > Building Microsoft Access Applications
> > > > > > Microsoft Office Access 2003 Inside Out
> > > > > > SQL Queries for Mere Mortals
> > > > > > http://www.viescas.com/
> > > > > > (Paris, France)
> > > > > >
> > > > > >
> > > > > >
> > > > > > -----Original Message-----
> > > > > > From: MS_Access_Professionals@yahoogroups.com
> > > > > > [mailto:MS_Access_Professionals@yahoogroups.com] On Behalf Of
> > > > > > rivera_vazquez_edgar
> > > > > > Sent: Wednesday, July 06, 2011 2:20 PM
> > > > > > To: MS_Access_Professionals@yahoogroups.com
> > > > > > Subject: Re: [MS_AccessPros] Help with reports.
> > > > > >
> > > > > > Ah ok...
> > > > > >
> > > > > > tblCustomers many to one tblStatus
> > > > > > tblCustomers one to many tblAddresses
> > > > > > tblAddresses one to many tblContacts
> > > > > > tblAddresses one to many tblInventory
> > > > > > tblInventory one to many tblServices
> > > > > >
> > > > > > Now, I made a query (qryServices) to calculate the next service date, so
> > > the
> > > > > > query has the field "NxtServ" wich is not in tblServices. I use
> > qryService
> > > > in
> > > > > my
> > > > > > form to input the data and see the next service date. I guess I need to
> > > do
> > > > > the
> > > > > > same in the report to filter for this date.
> > > > > >
> > > > > > The report needs to look something like this:
> > > > > >
> > > > > > 1. Customer's main info from tblCustomer but only for those with
> > "Active"
> > > > > Status
> > > > > > and a specific month in qryServices
> > > > > > 2. Customer address from tblAddresses
> > > > > > 3. Contact person for that specific address
> > > > > > 4. Inventory for that specific address
> > > > > > 5. Last service done for each inventory item from qryServices
> > > > > > 6. If the customer has another address with service due the same month,
> > > then
> > > > > > display #2-5 again for each address.
> > > > > >
> > > > > > Would I need to make a query for every month?
> > > > > > I'm preaty sure I need to make a query for every Status if I want a
> > report
> > > > of
> > > > > > the inactive and out-of-business customers also.
> > > > > >
> > > > > > Let me know if you need more info.
> > > > > > Edgar
> > > > > >
> > > > > > --- In MS_Access_Professionals@yahoogroups.com, "John Viescas" <john@>
> > > > wrote:
> > > > > > >
> > > > > > > Edgar-
> > > > > > >
> > > > > > > You say tblAddresses is related to tblCustomer, but you don't say how.
> > > I
> > > > > > assume
> > > > > > > it's many addresses for one customer. How is inventory and service
> > > > related
> > > > > to
> > > > > > > these two tables?
> > > > > > >
> > > > > > >
> > > > > > > John Viescas, author
> > > > > > > Microsoft Office Access 2010 Inside Out
> > > > > > > Microsoft Office Access 2007 Inside Out
> > > > > > > Building Microsoft Access Applications
> > > > > > > Microsoft Office Access 2003 Inside Out
> > > > > > > SQL Queries for Mere Mortals
> > > > > > > http://www.viescas.com/
> > > > > > > (Paris, France)
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: MS_Access_Professionals@yahoogroups.com
> > > > > > > [mailto:MS_Access_Professionals@yahoogroups.com] On Behalf Of
> > > > > > > rivera_vazquez_edgar
> > > > > > > Sent: Wednesday, July 06, 2011 4:09 AM
> > > > > > > To: MS_Access_Professionals@yahoogroups.com
> > > > > > > Subject: [MS_AccessPros] Help with reports.
> > > > > > >
> > > > > > > I'm still having problems making my report.
> > > > > > >
> > > > > > > Here is my structure:
> > > > > > >
> > > > > > > tblCustomer related to tblAddresses. Each address has a contact
> > person
> > > > and
> > > > > an
> > > > > > > inventory (tblInventory) and each inventory has a service
> > (qryService).
> > > > > > >
> > > > > > > I need all this info on the report but I need to filter the info by
> > two
> > > > > fields
> > > > > > > in diferent tables/query. There is a table for Status related to
> > > > > tblCustomer
> > > > > > > and a field for next service date in qryService.
> > > > > > >
> > > > > > > I need, for example, every active customer with their address and
> > > contact
> > > > > > person
> > > > > > > and the inventory for that address, but only show customers with a
> > next
> > > > > > service
> > > > > > > date of July wich is in a table called tblService related to the
> > > inventory
> > > > > > > table.
> > > > > > >
> > > > > > > I'm realy stuck, HELP!
> > > > > > >
> > > > > > > Edgar
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > ------------------------------------
> > > > > > >
> > > > > > > Yahoo! Groups Links
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > ------------------------------------
> > > > > >
> > > > > > Yahoo! Groups Links
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > ------------------------------------
> > > > >
> > > > > Yahoo! Groups Links
> > > > >
> > > >
> > > >
> > > >
> > > >
> > > > ------------------------------------
> > > >
> > > > Yahoo! Groups Links
> > > >
> > >
> > >
> > >
> > >
> > > ------------------------------------
> > >
> > > Yahoo! Groups Links
> > >
> >
> >
> >
> >
> > ------------------------------------
> >
> > Yahoo! Groups Links
> >
>

__._,_.___
Recent Activity:
.

__,_._,___

Tidak ada komentar:

Posting Komentar