Question

Syntax error in Access 2000 query

Asked by: mike99c

I have inherited a complex SQL query for Access 2000 which I have attached. It is not too important what the query does but I have had to modify it by adding the following statement in line 6 of the first SELECT clause:

(Select TOP 1 ItemCategories.Enable FROM ItemCategories WHERE Items.CategoryRefID = ItemCategories.RefId) AS CategoryEnabled

In the final WHERE clause I then use the result of this query by adding the following statement in line 34:

AND CategoryEnabled = True

Unfortunately when I run the query I get the following error:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

If I leave the additional WHERE clause statement out the query runs without error but I need it to check the CategoryEnabled flag.

Any help would be appreciated.

SELECT 
   ItemTexts.Name, 
   t2.rank, 
   t1.stockid, 
   items.*, 
   (Select TOP 1 ItemCategories.Enable FROM ItemCategories WHERE Items.CategoryRefID = ItemCategories.RefId) AS CategoryEnabled 
FROM 
   ( items inner join 
     ( SELECT 
              t1.rank, t1.StockID, pi1.ItemRefID 
       FROM 
              priceditems pi1 
       INNER JOIN 
              ( SELECT 
                        o1.stockid,count(o1.stockid) as rank 
                FROM 
                        orders AS o1 
                WHERE 
                        o1.transactionid IN 
                           ( SELECT DISTINCT 
                                  o2.TransactionID 
                             FROM 
                                  PricedItems pi2 
                                  LEFT JOIN orders o2 ON pi2.StockID = o2.StockID 
                             WHERE ((pi2.ItemRefID=46245974) and o2.transactionid<>'') ) 
                 GROUP BY o1.stockid ) as t1 
         ON pi1.stockid=t1.stockid 
         WHERE 
               pi1.StockStatusRefID <> -1 AND pi1.itemrefid <> 46245974 ) as t2 
       ON items.refID=t2.ItemRefID ) 
      LEFT JOIN itemTexts ON itemtexts.RefId=items.RefID 
WHERE 
     ItemTexts.lang='en' 
     AND CategoryEnabled = True 
     AND Items.Enable=True 
OREDR BY 
     t2.rank desc

                                  
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:

Select allOpen in new window

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-05-21 at 11:34:59ID24428815
Tags

access 2000

,

sql

Topics

SQL Query Syntax

,

Microsoft Access Database

Participating Experts
3
Points
0
Comments
15

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Microsoft OLE DB Provider for ODBC Drivers error '800…
    I am keep on getting the error message below: Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Syntax error (comma) in query expression 'ID = 1, 9'. /humanresources/policies_update.asp, line 111 I am using ultradev a...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: mbizupPosted on 2009-05-21 at 11:48:47ID: 24444620

The "too few paramaters" error means that a field name is unrecognized.

If this runs fine without the WHERE clause as you stated, scrutinize the WHERE clause for typos or incorrect field names.

 

by: jparulPosted on 2009-05-21 at 11:53:43ID: 24444680


When you run the query without the WHERE clause, do you see CategoryEnabled as one of the output columns?
Is it possible for you to post a sampel of output you get without the WHERE clause?

 

by: mike99cPosted on 2009-05-21 at 12:04:44ID: 24444800

To answer both responses, I don't think it is a typo but for some reason it does not recognise the alias name of CategoryEnabled which was introduced at the end of line 6.

Removing the WHERE clause would certainly not produce CategoryEnabled as an output as the alias would be removed.

 

by: GRayLPosted on 2009-05-21 at 12:24:53ID: 24444976

Why not put the addition WHERE clause in line 6?  BTW, with all the SELECTS flying around, it might be helpful to qualify the field CategoryEnabled with its table name which I presume is ItemCategories.

 

by: mike99cPosted on 2009-05-21 at 12:35:15ID: 24445067

Hi GRayL,
Can you please show me what you actually mean. I am not sure how to qualify the CategoryEnabled field with the ItemCategories table. When I tried I kept getting errors because of all the joins. Can you please help me here by showing how I can modify the SQL?
Thanks

 

by: GRayLPosted on 2009-05-21 at 13:03:26ID: 24445320

Line 6 becomes:

(Select TOP 1 ItemCategories.Enable FROM ItemCategories WHERE Items.CategoryRefID = ItemCategories.RefId AND ItemCatgegories.Enable = True) AS CategoryEnabled

Be aware you cannot use an alias which you used in the SELECT portion of a query after THE FROM clause - you have to repeat the whole subquery.  CategoryEnabled is an alias.  Is is not just as easy to restrict the selection in the subquery??

 

by: mike99cPosted on 2009-05-21 at 15:11:04ID: 24446370

Thanks for the suggestion GRayL but the solution you have given is not going to work as I need to read the CategoryEnabled alias so that I can restrict the rows returned from the query where CategoryEnabled=False.

I have taken a step back and now realise that I may have over complicated this. I have attached a modifed code which I believe is closer to what I require. The chages are as follows:

  1. Replaced nested SELECT query with
    ItemCategories.Enable 
  2. Added extra inner join statement before last WHERE clause.
    INNER JOIN ItemCategories ON ItemCategories.RefID = items.RefID 
  3. Replaced AND CategoryEnabled = True in last WHERE clause with
    AND ItemCategories.Enable = True 

I now get the following error:

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'itemtexts.RefId=items.RefID inner join ItemCategories ON ItemCategories.RefID = items.RefID'.

I believe there is a syntax issue with the join that I added. I am more familiar with SQL server so I may have got the syntax a little wrong for Access SQL.

SELECT 
   ItemTexts.Name, 
   t2.rank, 
   t1.stockid, 
   items.*, 
   ItemCategories.Enable
FROM 
   ( items inner join 
     ( SELECT 
              t1.rank, t1.StockID, pi1.ItemRefID 
       FROM 
              priceditems pi1 
       INNER JOIN 
              ( SELECT 
                        o1.stockid,count(o1.stockid) as rank 
                FROM 
                        orders AS o1 
                WHERE 
                        o1.transactionid IN 
                           ( SELECT DISTINCT 
                                  o2.TransactionID 
                             FROM 
                                  PricedItems pi2 
                                  LEFT JOIN orders o2 ON pi2.StockID = o2.StockID 
                             WHERE ((pi2.ItemRefID=46245974) and o2.transactionid<>'') ) 
                 GROUP BY o1.stockid ) as t1 
         ON pi1.stockid=t1.stockid 
         WHERE 
               pi1.StockStatusRefID <> -1 AND pi1.itemrefid <> 46245974 ) as t2 
       ON items.refID=t2.ItemRefID ) 
      LEFT JOIN itemTexts ON itemtexts.RefId=items.RefID
      INNER JOIN ItemCategories ON ItemCategories.RefID = items.RefID
WHERE 
     ItemTexts.lang='en'
     AND ItemCategories.Enable = True  
     AND Items.Enable=True 
OREDR BY 
     t2.rank desc
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:

Select allOpen in new window

 

by: jparulPosted on 2009-05-22 at 11:18:14ID: 24453722

You have an extra closing parenthesis before

LEFT JOIN itemTexts ON itemtexts.RefId=items.RefID

Try this

SELECT 
   ItemTexts.Name, 
   t2.rank, 
   t1.stockid, 
   items.*, 
   ItemCategories.Enable 
   FROM items 
      inner join 
		     ( SELECT 
		              t1.rank, t1.StockID, pi1.ItemRefID 
			FROM 
		              priceditems pi1 
		       INNER JOIN 
		              ( SELECT o1.stockid,count(o1.stockid) as rank 
		                FROM 
		                        orders AS o1 
                		WHERE 
		                        o1.transactionid IN 
                				( SELECT DISTINCT o2.TransactionID 
			                          FROM PricedItems pi2 
		                                  LEFT JOIN orders o2 ON pi2.StockID = o2.StockID 
                			          WHERE ((pi2.ItemRefID=46245974) and o2.transactionid<>'') 
						) 
		                 GROUP BY o1.stockid ) 
				as t1 
			        ON pi1.stockid=t1.stockid 
			         WHERE pi1.StockStatusRefID <> -1 AND pi1.itemrefid <> 46245974 
			) as t2 
       ON items.refID=t2.ItemRefID  
      LEFT JOIN itemTexts ON itemtexts.RefId=items.RefID
      INNER JOIN ItemCategories ON ItemCategories.RefID = items.RefID
WHERE 
     ItemTexts.lang='en'
     AND ItemCategories.Enable = True  
     AND Items.Enable=True 
OREDR BY 
     t2.rank desc

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:

Select allOpen in new window

 

by: mike99cPosted on 2009-05-24 at 11:40:04ID: 24462480

Hi iparul,

Thanks for the new query but when I tried it I got the following error:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'items.refID=t2.ItemRefID left join itemTexts on itemtexts.RefId=items.RefID inner join ItemCategories ON ItemCategories.RefID = items.RefID'.

Remember that the query is for Access 2000. I think it may need extra brackets but I am not sure where.

 

by: mike99cPosted on 2009-05-26 at 08:33:10ID: 24474292

Can anyone please assist me with the attached query?

I am not familiar with the Access 200 SQL JOIN syntax. Can someone please assist me with the join syntax?

SELECT 
   ItemTexts.Name, 
   t2.rank, 
   t1.stockid, 
   items.*, 
   ItemCategories.Enable 
   FROM items 
      inner join 
		     ( SELECT 
		              t1.rank, t1.StockID, pi1.ItemRefID 
			FROM 
		              priceditems pi1 
		       INNER JOIN 
		              ( SELECT o1.stockid,count(o1.stockid) as rank 
		                FROM 
		                        orders AS o1 
                		WHERE 
		                        o1.transactionid IN 
                				( SELECT DISTINCT o2.TransactionID 
			                          FROM PricedItems pi2 
		                                  LEFT JOIN orders o2 ON pi2.StockID = o2.StockID 
                			          WHERE ((pi2.ItemRefID=46245974) and o2.transactionid<>'') 
						) 
		                 GROUP BY o1.stockid ) 
				as t1 
			        ON pi1.stockid=t1.stockid 
			         WHERE pi1.StockStatusRefID <> -1 AND pi1.itemrefid <> 46245974 
			) as t2 
       ON items.refID=t2.ItemRefID  
      LEFT JOIN itemTexts ON itemtexts.RefId=items.RefID
      INNER JOIN ItemCategories ON ItemCategories.RefID = items.RefID
WHERE 
     ItemTexts.lang='en'
     AND ItemCategories.Enable = True  
     AND Items.Enable=True 
OREDR BY 
     t2.rank desc

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:

Select allOpen in new window

 

by: jparulPosted on 2009-05-26 at 08:49:19ID: 24474452

Hi

Sorry for getting back to you late. Anyways, I don't have Access 2000, so I am unable to test the query. But I tried to format the query with some parenthesis and put a ; at th end. Try and see if this works:

SELECT 
   ItemTexts.Name, 
   t2.rank, 
   t1.stockid, 
   items.*, 
   ItemCategories.Enable 
   FROM (((items 
      inner join 
		     ( SELECT 
		              t1.rank, t1.StockID, pi1.ItemRefID 
			FROM 
		              priceditems pi1 
		       INNER JOIN 
		              ( SELECT o1.stockid,count(o1.stockid) as rank 
		                FROM 
		                        orders AS o1 
                		WHERE 
		                        o1.transactionid IN 
                				( SELECT DISTINCT o2.TransactionID 
			                          FROM PricedItems pi2 
		                                  LEFT JOIN orders o2 ON pi2.StockID = o2.StockID 
                			          WHERE ((pi2.ItemRefID=46245974) and o2.transactionid<>'') 
						) 
		                 GROUP BY o1.stockid ) 
				as t1 
			        ON pi1.stockid=t1.stockid 
			         WHERE pi1.StockStatusRefID <> -1 AND pi1.itemrefid <> 46245974 
			) as t2 
       ON items.refID=t2.ItemRefID) 
      LEFT JOIN itemTexts ON itemtexts.RefId=items.RefID)
      INNER JOIN ItemCategories ON ItemCategories.RefID = items.RefID)
WHERE 
     ItemTexts.lang='en'
     AND ItemCategories.Enable = True  
     AND Items.Enable=True 
ORDER BY 
     t2.rank desc ;
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:

Select allOpen in new window

 

by: mike99cPosted on 2009-05-26 at 09:15:52ID: 24474698

Hi,
Thanks for getting back to me. We are getting a lot closer. I executed the query and there were no errors. However the query did not return any results which is unexpected as it should return several rows.
Do you think the last inner join is in the right place?

 

by: jparulPosted on 2009-05-26 at 09:18:26ID: 24474724

I think the joins are in right place. If the query is not returning any results, then there is a possibility that all the conditions are not being met. Did you check that all the join conditions and where conditions are okay and that there are rows that satisfy those conditions?

 

by: mike99cPosted on 2009-05-26 at 09:32:50ID: 24474870

Hi iparul,

If it helps, I posted another post here:
http://www.experts-exchange.com/Microsoft/Development/MS_Access/Q_24438548.html

In it I show the original query which does work and what I actually want to add. You may want to refer to this post as it gives a better starting point.

 

by: jparulPosted on 2009-05-26 at 10:41:18ID: 24475573

Okay

Here's what I would do:

Starting from the query that worked, and looking at the final query we have which doesn't give any errors, try adding one clause (where condition, join, additional col in select etc) one at a time and see if it gives the expected results. Here's the order I would do it

a) Add ItemCategories.Enable  in the select statement

b) Add inner join statement

c) Add condition for ItemCategories.Enable = True  

See if this helps and let me know.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...