Access VBA SQL syntax, errors 3061 and 3075 - vba

I am new to Access VBA, I am using SQL statement to get data for creating excel file. The query uses a combo box [FBrpt_FbReason_Cbo] value as a criteria for the data. This is the first code I modified from the Access Query SQL mode:
SQL = "SELECT FB_Register.FB_Date_Received AS [Date received], FB_Register.FB_Resp_date AS [Response date], FB_Register.FB_Title AS [Feedback title], FB_Register.FB_Reason AS Reason " & _
"FROM FB_Register " & _
"WHERE (((FB_Register.FB_Reason)=[Forms]![Feedback_Reports]![FBrpt_FbReason_Cbo])) " & _
"ORDER BY FB_Register.FB_Date_Received DESC; "
It returns the error - Error number: 3061 = Too few parameters. Expected 1.
I then modified the Where line to:
"WHERE FB_Register.FB_Reason = " & [Forms]![Feedback_Reports]![FBrpt_FbReason_Cbo] & _
" ORDER BY FB_Register.FB_Date_Received DESC"
This returns the error – Error Number: 3075= Syntax error (missing operator) in query expression ‘FB_Register.FB_Reason = Positive feedback’.
In this case I have "Positive feedback" selected in the combo box. This code ‘FB_Register.FB_Reason = Positive feedback’ looks to me how it should be. What am I missing?

I figured it out, I needed the extra quotes - I believe - to turn the value into a string, even though its already a string
"WHERE FB_Register.FB_Reason = '" & [Forms]![Feedback_Reports]![FBrpt_FbReason_Cbo] & _ "' ORDER BY FB_Register.FB_Date_Received DESC"

Related

Microsoft Access VBA code with Select SQL String and Where clause

I'm using Microsoft Access to develop a database app. An important feature the user would need is to automatically send an email update to all relevant stakeholders.
The problem is that I'm getting
Run-time error '3075' Syntax error in query expression.
Here it is below:
Set rs = db.OpenRecordset("SELECT StakeholderRegister.[StakeholderID], StakeholderRegister.[ProjectID], StakeholderRegister.[FirstName], StakeholderRegister.[LastName], StakeholderRegister.[EmailAddress] " & _
" FROM StakeholderRegister " & _
" WHERE (((StakeholderRegister.[ProjectID]=[Forms]![ChangeLog]![cboProjectID.Value])) ;")
Funny thing is that I created a query table on Access to create the relevant recordset and the turned on SQL view to copy the exact sql string that's above. That query works however it opens an Input Parameter box, whereas this code should be using the value typed into a forms text box as a matching criteria.
To use a variable as a parameter, do not include it within the quotes:
" WHERE StakeholderRegister.[ProjectID]=" & [Forms]![ChangeLog]![cboProjectID].[Value]
or just
" WHERE StakeholderRegister.ProjectID=" & Forms!ChangeLog!cboProjectID.Value
Note: You really only need the square brackets when there is something like a space in the name, which is not the best practice anyway.
I also took the liberty to remove the parentheses, as they are not needed in such a simple WHERE clause, and can cause more trouble than they are worth.
Try,
Dim strSQL As String
strSQL = "SELECT StakeholderRegister.[StakeholderID], StakeholderRegister.[ProjectID], StakeholderRegister.[FirstName], StakeholderRegister.[LastName], StakeholderRegister.[EmailAddress] " & _
" FROM StakeholderRegister " & _
" WHERE StakeholderRegister.[ProjectID]=" & [Forms]![ChangeLog]![cboProjectID].Value & " ;"
Set rs = Db.OpenRecordset(strSQL)
if [ProjectID] field type is text then
Dim strSQL As String
strSQL = "SELECT StakeholderRegister.[StakeholderID], StakeholderRegister.[ProjectID], StakeholderRegister.[FirstName], StakeholderRegister.[LastName], StakeholderRegister.[EmailAddress] " & _
" FROM StakeholderRegister " & _
" WHERE StakeholderRegister.[ProjectID]='" & [Forms]![ChangeLog]![cboProjectID].Value & "' ;"
Set rs = Db.OpenRecordset(strSQL)

MS Access SQL code in VBA is causing troubles

Please can I ask that someone assist with the below SQL code. I am trying to open a recordset based on a variable BUSINESSTERM.
My SQL string looks like this:
sqlstr = "SELECT TblBusinessTerm.BusinessTermID, TblBusinessTerm.BusinessTerm, TblBusinessTerm.BusinessTermDesc, TblBusinessTerm.DomainCatID, " _
& " TblBusinessTerm.BusinessTermLongDesc, TblBusinessTerm.DomainID, TblBusinessSynonym.UpdatedBusinessTerm, * " _
& " FROM TblBusinessTerm LEFT JOIN TblBusinessSynonym ON TblBusinessTerm.BusinessTermID = TblBusinessSynonym.BusinessTermID " _
& " WHERE (TblBusinessTerm.BusinessTermID)= ; " & businessterm
Me.RecordSource = sqlstr
The issue is in the WHERE Statement. I keep on getting the error that I have to many parenthesis, and then when I remove the parenthesis I get an error
Syntax missing operator
Any assistance would be appreciated.
Thank you
Try this:
WHERE TblBusinessTerm.BusinessTermID=" & businessterm
And better:
WHERE TblBusinessTerm.BusinessTermID=" & Nz(businessterm, 0)

SQL Statement in Access

Ive been trying to get a query I ran in Access to run in VBA but I keep getting errors due to the number of exclamation marks I've been using. The statement I am using is
SQLstat = "SELECT tbl_Date_Check.DateofChecklist, tbl_Tasks.QuestionNumber,tbl_Tasks.Frequency, tbl_Tasks.Questions " _
& "FROM tbl_Tasks, tbl_Date_Check " _
& "WHERE (((tbl_Date_Check.DateofChecklist)=""" & [Forms]![Daily_Checker]![TxtDate] & """) And ((tbl_Tasks.Frequency) = """ & [Forms]![Daily_Checker]![ComFreq]"""))"
Any help would be great thanks
This can possibly be explained by the following SO question: What is the difference between single and double quotes in SQL?
This explains that you need to utilize single quotes '' to surround text in SQL in almost every instance. The fact that you are using double quotes "" may be what is causing the error.
I hope this helps.
-C§
It must read like this for dates:
SQLstat = "SELECT tbl_Date_Check.DateofChecklist, tbl_Tasks.QuestionNumber,tbl_Tasks.Frequency, tbl_Tasks.Questions " _
& "FROM tbl_Tasks, tbl_Date_Check " _
& "WHERE ((tbl_Date_Check.DateofChecklist = #" & Format([Forms]![Daily_Checker]![TxtDate], "yyyy\/mm\/dd") & "#) And (tbl_Tasks.Frequency = " & [Forms]![Daily_Checker]![ComFreq] & "))"

Access Query SQL Type mismatch error when trying to update query via VBA

I have a query that takes multiple criteria from comboboxes on a form.
In order to alter the sort of the query for reporting purposes I use the below code:
Dim oDB As Database
Dim oQuery As QueryDef
Set oDB = CurrentDb
Set oQuery = oDB.QueryDefs("qry_AdjustmentDataSplitGroup")
oQuery.SQL = ("SELECT tbl_AdjustmentData.POLICY, tbl_AdjustmentData.MD, tbl_AdjustmentData.[EFF DTE], tbl_AdjustmentData.NAME, tbl_AdjustmentData.[DEP/PREM], tbl_AdjustmentData.[LST PREM], tbl_AdjustmentData.GROUP, tbl_AdjustmentData.[WA DATE] FROM tbl_AdjustmentData WHERE (((tbl_AdjustmentData.Group) Is Not Null)) ORDER BY tbl_AdjustmentData.[WA DATE];")
Set oQuery = Nothing
Set oDB = Nothing
And change the ORDER BY depending on what button is pressed on the form. This works OK.
However, I thought it would be the same if I needed to alter the query criteria (or the WHERE) I just change that line like I can change the ORDER BY part of the code.
When I use the below code for a different query:
Dim oDB As Database
Dim oQuery As QueryDef
Set oDB = CurrentDb
Set oQuery = oDB.QueryDefs("qry_AdjustmentDataSplitNonGroupApr")
oQuery.SQL = ("SELECT qry_AdjustmentDataSplitNonGroup.POLICY, qry_AdjustmentDataSplitNonGroup.MD, qry_AdjustmentDataSplitNonGroup.[EFF DTE], qry_AdjustmentDataSplitNonGroup.NAME, qry_AdjustmentDataSplitNonGroup.[DEP/PREM], qry_AdjustmentDataSplitNonGroup.[LST PREM], qry_AdjustmentDataSplitNonGroup.[WA DATE], Right([EFF DTE],2) & " / " & Mid([EFF DTE],5,2) & " / " & Left([EFF DTE],4) AS EffectiveDate, Right([WA DATE],2) & " / " & Mid([WA DATE],5,2) & " / " & Left([WA DATE],4) AS WADate, Left([EFF DTE],4) AS [Year], Left([WA DATE],4) AS WAYear FROM qry_AdjustmentDataSplitNonGroup WHERE (((Left([EFF DTE],4))=[Forms]![frm_Index]![cbo_YearPicker]) AND ((Left([WA DATE],4))=[Forms]![frm_Index]![cbo_WAPicker]) AND ((Mid([EFF DTE],5,2))=""04""));")
Set oQuery = Nothing
Set oDB = Nothing
I want to be able to remove this part:
AND ((Left([WA DATE],4))=[Forms]![frm_Index]![cbo_WAPicker])
Using an option button on the form, leaving the rest the same.
The problem though, is when I try this I get a 'Type mismatch' error on the line beginning oQuery.SQL.
I assume it's to do with the section where Mid([EFF DTE],5,2))=""04"" and I've tried double quotes as in this case, I've tried single quotes and I've tried no quotes at all changing the record in the Table from Text to Number, but always get the same error.
Is there an easier way to do this? Or can my code be ammended to work correctly?
Final note, the reason for the option button at all is to remove the 'WA Date' criteria from the query as that criteria reads from a combobox and when I fiddled with the combobox to allow an ALL option it actually returned no results.
I've heard that UNION ALL might be another way round this problem so as to avoid having to mess about removing the criteria altogether but I'm not sure how to implement that.
The situation you're facing is easy to misinterpret.
In your second code sample, you get a "type mismatch" error at the line similar to this abbreviated version:
oQuery.SQL = ("SELECT qry_AdjustmentDataSplitN ... ")
You might think that is Access complaining that your SELECT statement is not valid. But the actual problem is similar to this example from the Immediate window, which also throws a "type mismatch" error:
? "a" / "b"
That happens because you can't divide one string by another string. Division only makes sense with numerical values.
When you examine your code with that issue in mind, you should find multiple cases of this pattern:
"some text & " / " & more text"
Compare that to my "a" / "b" example.
You need to quote it differently. I will take a stab at what I think you want. I'm unsure whether the statement logic is correct, but at least this produces a valid VBA string:
Dim strSelect As String
strSelect = "SELECT q.POLICY, q.MD, q.[EFF DTE], q.NAME, " & _
"q.[DEP/PREM], q.[LST PREM], q.[WA DATE], " & _
"(Right([EFF DTE],2) & '/' & Mid([EFF DTE],5,2) & '/' & Left([EFF DTE],4)) AS EffectiveDate, " & _
"(Right([WA DATE],2) & '/' & Mid([WA DATE],5,2) & '/' & Left([WA DATE],4)) AS WADate, " & _
"Left([EFF DTE],4) AS [Year], Left([WA DATE],4) AS WAYear" & vbCrLf & _
"FROM qry_AdjustmentDataSplitNonGroup AS q" & vbCrLf & _
"WHERE Left([EFF DTE],4)=[Forms]![frm_Index]![cbo_YearPicker]" & vbCrlf & _
"AND Mid([EFF DTE],5,2)='04';"
Debug.Print strSelect ' <-- view the completed statement text in Immediate window
' Ctrl+g will take you there
oQuery.SQL = strSelect
And finally, reading between the lines, I'm guessing your EFF DTE and WA DATE values are dates as text in yyyy/mm/dd format and you want the query to display them in dd/mm/yyyy format. If that is true, compare these two expressions which should both return the same string:
Right([EFF DTE], 2) & '/' & Mid([EFF DTE], 5, 2) & '/' & Left([EFF DTE], 4)
Format([EFF DTE], 'dd/mm/yyyy')

In operator without () in query expression

error:
In operator without () in query expression '(EnrollmentsTbl.UserName LIKE ? IN '' [;DATABASE=e:\web\mcfrsitcom0\htdocs\trackingHIPAA\App_Data\subsite.mdb])'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.OleDb.OleDbException: In operator without () in query expression '(EnrollmentsTbl.UserName LIKE ? IN '' [;DATABASE=e:\web\mcfrsitcom0\htdocs\trackingHIPAA\App_Data\subsite.mdb])'.
not sure why is asking for () in different place?
here is SELECT in ASPX vb.net
SelectCommand="SELECT EnrollmentsTbl.AutoNum, EnrollmentsTbl.UserName, EnrollmentsTbl.SubmitTime, EnrollmentsTbl.ClassName, EnrollmentsTbl.ClassDate, EnrollmentsTbl.ClassTime, EnrollmentsTbl.Enrolled, EnrollmentsTbl.WaitListed, EnrollmentsTbl.Instructor, EnrollmentsTbl.DateCompleted, EnrollmentsTbl.Completed, EnrollmentsTbl.Walkin FROM EnrollmentsTbl WHERE (EnrollmentsTbl.UserName LIKE ? IN '' [;DATABASE=e:\web\mcfrsitcom0\htdocs\trackingHIPAA\App_Data\subsite.mdb])"
From your other comments it sounds like you want to do something more like this:
SelectCommand = _
"SELECT EnrollmentsTbl.AutoNum, EnrollmentsTbl.UserName, EnrollmentsTbl.SubmitTime, " & _
"EnrollmentsTbl.ClassName, EnrollmentsTbl.ClassDate, EnrollmentsTbl.ClassTime, " & _
"EnrollmentsTbl.Enrolled, EnrollmentsTbl.WaitListed, EnrollmentsTbl.Instructor, " & _
"EnrollmentsTbl.DateCompleted, EnrollmentsTbl.Completed, EnrollmentsTbl.Walkin " & _
"FROM EnrollmentsTbl " & _
"WHERE EnrollmentsTbl.UserName IN " & _
"(" & _
"SELECT OtherColumnName " & _
"FROM [;DATABASE=e:\web\mcfrsitcom0\htdocs\trackingHIPAA\App_Data\subsite.mdb].OtherTableName" & _
")"
I just tried a similar query in C# using OleDb and it worked fine.
The IN operator looks for values that exist in a static list of values or the results of a subquery. You seem to be using it to find values in a database file.
You also combine it with the LIKE operator which doesn't make sense.
Perhaps if you explained better what you're trying to do an alternative could be found.