?
Solved

Syntax Error in Query Expression

Posted on 2011-09-03
7
Medium Priority
?
379 Views
Last Modified: 2012-05-12
Ok, experts, the below query runs my logging routine for error handling.
On some errors, it works fine. On other, it crashes with a 3075. I cannot see anything wrong with the query syntax! JP-TechGroup-495674.flv
strSQL = "INSERT INTO tbl_log ( err_num, err_descrip, err_source, err_module, [timestamp], terminal, t_data, on_statement, [user], signed_on, [language], state, ct2offline)"
strSQL = strSQL & "Values(" & err.Number & ", '" & err.Description & "', '" & err.Source & "', '"
strSQL = strSQL & VBE.ActiveCodePane.CodeModule & "', #" & Now() & "#, " & terminal & ", '" & data & "', "
strSQL = strSQL & TStatus(terminal).onStatement & ", '" & TStatus(terminal).user & "', " & TStatus(terminal).SignedIn & ", "
strSQL = strSQL & TStatus(terminal).Lang & ", '" & State & "', " & CT2offline & ");"

Open in new window

0
Comment
Question by:JP_TechGroup
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
7 Comments
 
LVL 48

Expert Comment

by:Dale Fye
ID: 36478232
do you have an error handler?

How are you running this action query?  If you are using:

currentdb.execute strSQl, dbfailonerror

Then add a line to your error handler (within your error log routine) that will print out the SQL string.

Is [User] a required field in your table?  In the SQL string, it looks like that is an empty string.
0
 
LVL 34

Expert Comment

by:Norie
ID: 36478246
Where does the last line in the error message come from?

It looks like a repeat of the previous line.

In fact it seems like the SQL statement has been terminated with ; but then something has been added on.
0
 

Author Comment

by:JP_TechGroup
ID: 36478282
The whole things is bizzare.
This is part of the error handler. It writes the error to a log file and then sends the user to a message stating the problem. I am using currentdb.execute

Depending on when the error occurs, there may not be a user, so sometimes there is data missing, which has never been a problem. On that note, I have seen this query fail like this when all the fields are populated.

Here is where it gets odder still. Below is a debug print of the string when it fails. It looks like the query is running 3 times.


INSERT INTO tbl_log ( err_num, err_descrip, err_source, err_module, [timestamp], terminal, t_data, on_statement, [user], signed_on, [language], state, ct2offline)Values(2482, 'C-Tracker v2.0.3 can't find the name 'USER' you entered in the expression.', 'Project', 'Module1', #9/3/2011 11:51:05 AM#, 10, '', 3, '', True, 1, '', False);
INSERT INTO tbl_log ( err_num, err_descrip, err_source, err_module, [timestamp], terminal, t_data, on_statement, [user], signed_on, [language], state, ct2offline)Values(3075, 'Syntax error (missing operator) in query expression ''C-Tracker v2.0.3 can't find the name 'USER' you entered in the expression.', 'Project', 'Module1', #9/3/2011 11:51:05 AM#, 10, '', 3, '', True, 1, '', False);'.', 'DAO.Database', 'Module1', #9/3/2011 11:51:05 AM#, 10, '1', 3, '', True, 1, '', False);
INSERT INTO tbl_log ( err_num, err_descrip, err_source, err_module, [timestamp], terminal, t_data, on_statement, [user], signed_on, [language], state, ct2offline)Values(3075, 'Syntax error (missing operator) in query expression ''Syntax error (missing operator) in query expression ''C-Tracker v2.0.3 can't find the name 'USER' you entered in the expression.', 'Project', 'Module1', #9/3/2011 11:51:05 AM#, 10, '', 3, '', True, 1, '', False);'.', 'DAO.Database', 'Module1', #9/3/2011 11:51:05 AM#, 10, '1', 3, '', True, 1, '', False);'.', 'DAO.Database', 'Module1', #9/3/2011 11:51:05 AM#, 10, '1', 3, '', True, 1, '', False);

Open in new window

0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:JP_TechGroup
ID: 36478285
Here is an example of the same query working correctly on a debug.print.
INSERT INTO tbl_log ( err_num, err_descrip, err_source, err_module, [timestamp], terminal, t_data, on_statement, [user], signed_on, [language], state, ct2offline)Values(11, 'Division by zero', 'Project', 'Module1', #9/3/2011 11:53:12 AM#, 0, '', 0, '', False, 0, '', False);

Open in new window

0
 
LVL 61

Accepted Solution

by:
mbizup earned 1000 total points
ID: 36478339
Try revising line 4 in your orriginal post.

You currently have this:

<<strSQL = strSQL & TStatus(terminal).onStatement & ", '" & TStatus(terminal).user & "', " & TStatus(terminal).SignedIn & ", " >>


Change the User section to this:

strSQL = strSQL & TStatus(terminal).onStatement & ", " & chr(34) & TStatus(terminal).user & chr(34) & ", " & TStatus(terminal).SignedIn & ", "

This uses chr(34) which is double quotes instead of single quotes (') to delimit your usernames.  If you have Irish usernames like O'Brien or O'Malley, using single quotes as in your original post *will* cause your query to fail with this error.

0
 
LVL 10

Assisted Solution

by:plummet
plummet earned 1000 total points
ID: 36478373
As mbizup says, your problem is because you are trying to insert a string that contains a single quote, which will of course confuse the hell out of it.

You need to check that strings don't contain a single quote and if they do I'd suggest replace the single with two single quotes, ie:

use the replace function to replace a single quote "'" with two "''". I realise that may look terrible on screen here so maybe copy it to Access and see what I mean. The function should be like this:

replace(err.Description,"'","''")

Open in new window


so in place in your SQL build:

strSQL = "INSERT INTO tbl_log ( err_num, err_descrip, err_source, err_module, [timestamp], terminal, t_data, on_statement, [user], signed_on, [language], state, ct2offline)"
strSQL = strSQL & "Values(" & err.Number & ", '" & replace(err.Description,"'","''") & "', '" & err.Source & "', '"
strSQL = strSQL & VBE.ActiveCodePane.CodeModule & "', #" & Now() & "#, " & terminal & ", '" & data & "', "
strSQL = strSQL & TStatus(terminal).onStatement & ", '" & TStatus(terminal).user & "', " & TStatus(terminal).SignedIn & ", "
strSQL = strSQL & TStatus(terminal).Lang & ", '" & State & "', " & CT2offline & ");"

Open in new window


I think you should also do the replace on other fields, such as user, just in case. It should do the trick!
0
 

Author Closing Comment

by:JP_TechGroup
ID: 36478405
That did the trick and explains why this error kept tanking the system. This has been driving me nuts! Thank you.
0

Featured Post

What Is Blockchain Technology?

Blockchain is a technology that underpins the success of Bitcoin and other digital currencies, but it has uses far beyond finance. Learn how blockchain works and why it is proving disruptive to other areas of IT.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Preparing an email is something we should all take special care with – especially when the email is for somebody you may not know very well. The pressures of everyday working life stacked with a hectic office environment can make this a real challen…
This article describes two methods for creating a combo box that can be used to add new items to the row source -- one for simple lookup tables, and one for a more complex row source where the new item needs data for several fields.
Using Microsoft Access, learn some simple rules for how to construct tables in a relational database. Split up all multi-value fields into single values: Split up fields that belong to other things into separate tables: Make sure that all record…
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …
Suggested Courses

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question