You need a space after the SELECT keyword.
John Viescas, Author
Effective SQL
SQL Queries for Mere Mortals
Microsoft Access 2010 Inside Out
Microsoft Access 2007 Inside Out
Microsoft Access 2003 Inside Out
Building Microsoft Access Applications
(Paris, France)
On Dec 14, 2016, at 5:25 PM, david.pratt@outlook.com [MS_Access_Professionals] <MS_Access_Professionals@yahoogroups.com> wrote:
and here is the current SQL:
strSQL = "INSERT INTO tblServiceReportDetails (ServiceReportID, SamplePointID, ParameterID) " & _
"SELECT" & Me.ServiceReportID & ", SamplePointID, ParameterID " & _
"FROM tblServiceTemplates " & _
"INNER JOIN tblServiceTemplateDetails " & _
"ON tblServiceTemplates.ServiceTemplateID = tblServiceTemplateDetails.ServiceTemplateID " & _
"WHERE tblServiceTemplates.ServiceTemplateID = " & Me.ServiceTemplateID & ";"
"SELECT" & Me.ServiceReportID & ", SamplePointID, ParameterID " & _
"FROM tblServiceTemplates " & _
"INNER JOIN tblServiceTemplateDetails " & _
"ON tblServiceTemplates.ServiceTemplateID = tblServiceTemplateDetails.ServiceTemplateID " & _
"WHERE tblServiceTemplates.ServiceTemplateID = " & Me.ServiceTemplateID & ";"
---In MS_Access_Professionals@yahoogroups.com, <JohnV@...> wrote :
After Update for the form should work - unless you have code somewhere that's forcing a save at some point. But yes, using the After Update of the Templates combo should also work. Is the combo bound (has a Control Source)? And where is the combo located?
---In MS_Access_Professionals@yahoogroups.com, <JohnV@...> wrote :
John Viescas, Author
Effective SQL
SQL Queries for Mere Mortals
Microsoft Access 2010 Inside Out
Microsoft Access 2007 Inside Out
Microsoft Access 2003 Inside Out
Building Microsoft Access Applications
(Paris, France)
On Dec 14, 2016, at 4:48 PM, david.pratt@... [MS_Access_Professionals] <MS_Access_Professionals@yahoogroups.com> wrote:
I would never have noticed the different quote marks; didn't even know there was such a thing as smart quotes and have no idea how they got there. Initially I copied your VBA code into OneNote and then pasted into my class module. Modified multiple times after that trying to get it to work, so no telling.
Anyway, I changed all the quotes and added the space - no joy. I gave up, deleted the entire sub and started from scratch. No syntax error now. No idea what is different in the strSQL now. It looks exactly the same to me. I then corrected a couple of small errors (no end if; Done:) and now it compiles and runs. Hallelujah.
However, the process needs to be modified. Since this is on the form AfterUpdate procedure, the code runs as soon as a new record is created. And apparently a record is created as soon as the Keys/Indexes are satisfied? In this case, as soon as the CustomerID and EquipmentID fields are completed, a record is created and the sub fires. At this point the user has not yet selected a template. I use customer and equipment to filter the Templates combo box, so I can't put the Templates combo box ahead of the Customer and Equipment fields.
It appears to me that I can move this sub to the AfterUpdate event for the Templates combo and it would still do all the same things. Correct?
---In MS_Access_Professionals@yahoogroups.com, <JohnV@...> wrote :
David-
---In MS_Access_Professionals@yahoogroups.com, <david.pratt@...> wrote :
---In MS_Access_Professionals@yahoogroups.com, <JohnV@...> wrote :
You can do it in the Immediate Window (CTRL+G) by copying the string and putting a question mark in front of it, then press enter:
?"INSERT INTO tblServiceReportDetails (ServiceReportID, SamplePointID, ParameterID) " & _
"SELECT " & 5 & ", SamplePointID, ParameterID " & _
"FROM tblServiceTemplates " & _
"INNER JOIN tblServiceTemplateDetails " & _
"ON tblServiceTemplates.ServiceTemplateID = tblServiceTemplateDetails.ServiceTemplateID " & _
"WHERE tblServiceTemplates.ServiceTemplateID = " & 5 & ";"
The window will then return it all as one string if the syntax is correct (note that I replaced the references to ServiceReportID and ServiceTemplateID with constants to make it work):
INSERT INTO tblServiceReportDetails (ServiceReportID, SamplePointID, ParameterID) SELECT 5, SamplePointID, ParameterID FROM tblServiceTemplates INNER JOIN tblServiceTemplateDetails ON tblServiceTemplates.ServiceTemplateID = tblServiceTemplateDetails.ServiceTemplateID WHERE tblServiceTemplates.ServiceTemplateID = 5;
You can then copy and paste that into the SQL window of a new query to see if it parses OK.
But I had problems when I went to test using a direct copy and paste from email. Note that SOME of your double quotes are "smart quotes" - not the simple double-quote character. Notably the quote at the beginning of every line except the INNER JOIN line and at the end of the first, third, fifth, and sixth lines. You're also missing a space after the last ampersand.
Fix those quote problems and try again!
John Viescas, Author
Effective SQL
SQL Queries for Mere Mortals
Microsoft Access 2010 Inside Out
Microsoft Access 2007 Inside Out
Microsoft Access 2003 Inside Out
Building Microsoft Access Applications
(Paris, France)
On Dec 13, 2016, at 4:29 PM, david.pratt@... [MS_Access_Professionals] <MS_Access_Professionals@yahoogroups.com> wrote:
John, I have been reading several sites about SQL looking for the source of the syntax error. I thought i had found the error when one place said the SQL has to end with a semi colon. I added that and still get the syntax error when I attempt to compile. Here is my SQL now:
strSQL = "INSERT INTO tblServiceReportDetails (ServiceReportID, SamplePointID, ParameterID) " & _
"SELECT " & Me.ServiceReportID & ", SamplePointID, ParameterID " & _
"FROM tblServiceTemplates " & _
"INNER JOIN tblServiceTemplateDetails " & _
"ON tblServiceTemplates.ServiceTemplateID = tblServiceTemplateDetails.ServiceTemplateID " & _
"WHERE tblServiceTemplates.ServiceTemplateID = " & Me.ServiceTemplateID &";"
"SELECT " & Me.ServiceReportID & ", SamplePointID, ParameterID " & _
"FROM tblServiceTemplates " & _
"INNER JOIN tblServiceTemplateDetails " & _
"ON tblServiceTemplates.ServiceTemplateID = tblServiceTemplateDetails.ServiceTemplateID " & _
"WHERE tblServiceTemplates.ServiceTemplateID = " & Me.ServiceTemplateID &";"
---In MS_Access_Professionals@yahoogroups.com, <david.pratt@...> wrote :
I copied your code into the module and I am still getting a "syntax error" code.
I see one thing that you did differently, is that the form controls are not within quotes. I also see that I had a couple of places where I failed to have a space between concatenated strings.
Someone needs to create a tool that will take strSQL compound strings and strip out the quotes so you can see if the SQL statement actually makes sense or not. Or does that already exist somewhere?
Anyway, still have the syntax error and the entire block of code with strSQL is highlighted.
---In MS_Access_Professionals@yahoogroups.com, <JohnV@...> wrote :
David-
Try this:
strSQL = "INSERT INTO tblServiceReportDetails (ServiceReportID, SamplePointID, ParameterID) " & _
"SELECT " & Me.ServiceReportID & ", SamplePointID, ParameterID " & _
"FROM tblServiceTemplates " & _
"INNER JOIN tblServiceTemplateDetails " & _
"ON tblServiceTemplates.ServiceTemplateID = tblServiceTemplateDetails.ServiceTemplateID " & _
"WHERE tblServiceTemplates.ServiceTemplateID = " & Me.ServiceTemplateID
"SELECT " & Me.ServiceReportID & ", SamplePointID, ParameterID " & _
"FROM tblServiceTemplates " & _
"INNER JOIN tblServiceTemplateDetails " & _
"ON tblServiceTemplates.ServiceTemplateID = tblServiceTemplateDetails.ServiceTemplateID " & _
"WHERE tblServiceTemplates.ServiceTemplateID = " & Me.ServiceTemplateID
John Viescas, Author
Effective SQL
SQL Queries for Mere Mortals
Microsoft Access 2010 Inside Out
Microsoft Access 2007 Inside Out
Microsoft Access 2003 Inside Out
Building Microsoft Access Applications
(Paris, France)
On Dec 12, 2016, at 11:04 PM, david.pratt@... [MS_Access_Professionals] <MS_Access_Professionals@yahoogroups.com> wrote:
John, I am trying to get the templates to work using the SQL code you provided and I am really struggling (hours). Since the combination key of CustomerID and EquipmentID is not unique I didn't see how the SQL could work when there was more than one template for Customer/Equipment. So, to make it easier and better, I placed another field in tblServiceReports - ServiceTemplateID. So now, each time that a new service report record is created, the user has to select the template which it is based upon.
Here is the strSQL that I am putting into the AfterUpdate procedure:
strSQL = "INSERT INTO tblServiceReportDetails (ServiceReportID, SamplePointID, ParameterID)" & _
"SELECT Me.ServiceReportID,SamplePointID,ParameterID" & _
"FROM tblServiceTemplates" & _
"INNER JOIN tblServiceTemplateDetails" & _
"ON tblServiceTemplates.ServiceTemplateID = tblServiceTemplateDetails.ServiceTemplateID" & _
"WHERE tblServiceTemplates.ServiceTemplateID = Me.ServiceTemplateID"
"SELECT Me.ServiceReportID,SamplePointID,ParameterID" & _
"FROM tblServiceTemplates" & _
"INNER JOIN tblServiceTemplateDetails" & _
"ON tblServiceTemplates.ServiceTemplateID = tblServiceTemplateDetails.ServiceTemplateID" & _
"WHERE tblServiceTemplates.ServiceTemplateID = Me.ServiceTemplateID"
When I try to compile, the error "Syntax Error" appears and the entire block of code above is highlighted. Sometimes the INTO keyword is highlighted and the error "expected end of statement" shows up.
I have spent hours and don't know how to correct it.
Thank you, David
__._,_.___
Posted by: John Viescas <johnv@msn.com>
Reply via web post | • | Reply to sender | • | Reply to group | • | Start a New Topic | • | Messages in this topic (31) |
Have you tried the highest rated email app?
With 4.5 stars in iTunes, the Yahoo Mail app is the highest rated email app on the market. What are you waiting for? Now you can access all your inboxes (Gmail, Outlook, AOL and more) in one place. Never delete an email again with 1000GB of free cloud storage.
.
__,_._,___
Tidak ada komentar:
Posting Komentar