PC Review


Reply
Thread Tools Rate Thread

SQL Query and Parameters

 
 
m stroup
Guest
Posts: n/a
 
      8th Jul 2008
I have the following:

frmQryEvents
chkDate txtStartDate "to" txtEndDate
chkAircraft cboAircraft
etc
tblEvents
EventDate
ACFT
etc..
I am using the following to build my SQL string:

Function BuildSQLString(sSQL As String) As Boolean

Dim sSELECT As String
Dim sFROM As String
Dim sWHERE As String

sSELECT = "s.* "

sFROM = "tblEvents s "
If chkDate.Value = -1 Then
If Not IsNull(txtBeginDate) Then
sWHERE = sWHERE & " AND s.EventDate >= " & _
"#" & Format(txtBeginDate, "mm/dd/yyyy") & "#"
End If
If Not IsNull(txtEndDate) Then
sWHERE = sWHERE & " AND s.EventDate <= " & _
"#" & Format(txtEndDate, "mm/dd/yyyy") & "#"
End If
End If

If chkAircraft.Value = -1 Then
sWHERE = sWHERE & " AND s.ACFT = " & Me.cboAircraft
End If

If chkPilot.Value = -1 Then
sWHERE = sWHERE & " AND s.Pilot = " & Me.cboPilot

End If

sSQL = "SELECT " & sSELECT
sSQL = sSQL & "FROM " & sFROM
If sWHERE <> "" Then sSQL = sSQL & "WHERE " & Mid(sWHERE, 6)

BuildSQLString = True

msgbox sSQL

End Function

The sSQL goes into a querydef function, which is working fine.
The sSQL reads:

SELECT s.* FROM tblEvents s WHERE s.EventDate >= #03/01/2008# AND _
s.EventDate <= #03/31/2008# AND s.ACFT = BF1.

This appears to be right. I entered the dates as 03/01/2008 and 3/31/2008
and I selected BF1 from cboAircraft (ACFT is the field name in the table).

What occurs is that instead of "BF1" showing in the design view as criteria,
[BF1] appears and I am prompted for the BF1 entry (as in a parameter query).

Any suggestions would be helpful. Running Access 2003.

--

Teach me to fish! Thanks for the help.
Pax, M
 
Reply With Quote
 
 
 
 
Klatuu
Guest
Posts: n/a
 
      8th Jul 2008
ACFT appears to be a text data type and therefore need to be enclosed in
quotes.
This line:

sWHERE = sWHERE & " AND s.ACFT = " & Me.cboAircraft

Should be:

sWHERE = sWHERE & " AND s.ACFT = """ & Me.cboAircraft & """"

--
Dave Hargis, Microsoft Access MVP


"m stroup" wrote:

> I have the following:
>
> frmQryEvents
> chkDate txtStartDate "to" txtEndDate
> chkAircraft cboAircraft
> etc
> tblEvents
> EventDate
> ACFT
> etc..
> I am using the following to build my SQL string:
>
> Function BuildSQLString(sSQL As String) As Boolean
>
> Dim sSELECT As String
> Dim sFROM As String
> Dim sWHERE As String
>
> sSELECT = "s.* "
>
> sFROM = "tblEvents s "
> If chkDate.Value = -1 Then
> If Not IsNull(txtBeginDate) Then
> sWHERE = sWHERE & " AND s.EventDate >= " & _
> "#" & Format(txtBeginDate, "mm/dd/yyyy") & "#"
> End If
> If Not IsNull(txtEndDate) Then
> sWHERE = sWHERE & " AND s.EventDate <= " & _
> "#" & Format(txtEndDate, "mm/dd/yyyy") & "#"
> End If
> End If
>
> If chkAircraft.Value = -1 Then
> sWHERE = sWHERE & " AND s.ACFT = " & Me.cboAircraft
> End If
>
> If chkPilot.Value = -1 Then
> sWHERE = sWHERE & " AND s.Pilot = " & Me.cboPilot
>
> End If
>
> sSQL = "SELECT " & sSELECT
> sSQL = sSQL & "FROM " & sFROM
> If sWHERE <> "" Then sSQL = sSQL & "WHERE " & Mid(sWHERE, 6)
>
> BuildSQLString = True
>
> msgbox sSQL
>
> End Function
>
> The sSQL goes into a querydef function, which is working fine.
> The sSQL reads:
>
> SELECT s.* FROM tblEvents s WHERE s.EventDate >= #03/01/2008# AND _
> s.EventDate <= #03/31/2008# AND s.ACFT = BF1.
>
> This appears to be right. I entered the dates as 03/01/2008 and 3/31/2008
> and I selected BF1 from cboAircraft (ACFT is the field name in the table).
>
> What occurs is that instead of "BF1" showing in the design view as criteria,
> [BF1] appears and I am prompted for the BF1 entry (as in a parameter query).
>
> Any suggestions would be helpful. Running Access 2003.
>
> --
>
> Teach me to fish! Thanks for the help.
> Pax, M

 
Reply With Quote
 
m stroup
Guest
Posts: n/a
 
      8th Jul 2008
Thanks so much, Dave. I felt it was a syntax error and played around with
quotations, but had not landed on the right mix. It looks like there are too
many but it is working beautifully.
--
Teach me to fish! Thanks for the help.
Pax, M


"Klatuu" wrote:

> ACFT appears to be a text data type and therefore need to be enclosed in
> quotes.
> This line:
>
> sWHERE = sWHERE & " AND s.ACFT = " & Me.cboAircraft
>
> Should be:
>
> sWHERE = sWHERE & " AND s.ACFT = """ & Me.cboAircraft & """"
>
> --
> Dave Hargis, Microsoft Access MVP
>
>
> "m stroup" wrote:
>
> > I have the following:
> >
> > frmQryEvents
> > chkDate txtStartDate "to" txtEndDate
> > chkAircraft cboAircraft
> > etc
> > tblEvents
> > EventDate
> > ACFT
> > etc..
> > I am using the following to build my SQL string:
> >
> > Function BuildSQLString(sSQL As String) As Boolean
> >
> > Dim sSELECT As String
> > Dim sFROM As String
> > Dim sWHERE As String
> >
> > sSELECT = "s.* "
> >
> > sFROM = "tblEvents s "
> > If chkDate.Value = -1 Then
> > If Not IsNull(txtBeginDate) Then
> > sWHERE = sWHERE & " AND s.EventDate >= " & _
> > "#" & Format(txtBeginDate, "mm/dd/yyyy") & "#"
> > End If
> > If Not IsNull(txtEndDate) Then
> > sWHERE = sWHERE & " AND s.EventDate <= " & _
> > "#" & Format(txtEndDate, "mm/dd/yyyy") & "#"
> > End If
> > End If
> >
> > If chkAircraft.Value = -1 Then
> > sWHERE = sWHERE & " AND s.ACFT = " & Me.cboAircraft
> > End If
> >
> > If chkPilot.Value = -1 Then
> > sWHERE = sWHERE & " AND s.Pilot = " & Me.cboPilot
> >
> > End If
> >
> > sSQL = "SELECT " & sSELECT
> > sSQL = sSQL & "FROM " & sFROM
> > If sWHERE <> "" Then sSQL = sSQL & "WHERE " & Mid(sWHERE, 6)
> >
> > BuildSQLString = True
> >
> > msgbox sSQL
> >
> > End Function
> >
> > The sSQL goes into a querydef function, which is working fine.
> > The sSQL reads:
> >
> > SELECT s.* FROM tblEvents s WHERE s.EventDate >= #03/01/2008# AND _
> > s.EventDate <= #03/31/2008# AND s.ACFT = BF1.
> >
> > This appears to be right. I entered the dates as 03/01/2008 and 3/31/2008
> > and I selected BF1 from cboAircraft (ACFT is the field name in the table).
> >
> > What occurs is that instead of "BF1" showing in the design view as criteria,
> > [BF1] appears and I am prompted for the BF1 entry (as in a parameter query).
> >
> > Any suggestions would be helpful. Running Access 2003.
> >
> > --
> >
> > Teach me to fish! Thanks for the help.
> > Pax, M

 
Reply With Quote
 
Klatuu
Guest
Posts: n/a
 
      8th Jul 2008
It does look like a lot of double quotes, doesn't it?

Well there is a reason and believe, me, it took me about 2 years to grasp
the concept of how to get the right number of qoutes.

As you know, Jet SQL will accept either single or double quotes to delimit a
text value. That is handy, but if you use a construct like:

strSQL = strSQL & "WHERE LastName = '" & Me.txtLastName & "'"

It is fine until you hit a name like O'Reilly. Now you are in troulbe.

Your string would end up as:
WHERE LastName = 'O'Reilly'

And Jet will choke on that.

So, regardless of whether you think you may or may not hit a single quote in
a string, it is always best to use double quotes.

The rule on how to include a double qoute in a string varialbe is to use a
pair of double qoutes "". But, you also have to delimit your literal with
double qoutes. The headache then is how many do I need?

I tried various tricks I found on the subject by using constants that were
multiple qoute marks, using Chr(34), which is ", but I never could get it
right. Then I hit on an idea that made it very simple for me. After a few
times through the exercise, I got to where I don't very often have to go
through this routine any more. Here is what I do.

First, I write the code using single quotes:

strSQL = strSQL & "WHERE LastName = '" & Me.txtLastName & "'"

Then, since you need two "" to make one " in the string, I go back and edit
the line of code replace each occurance of ' with ""

So replacing the first ' becomes:
strSQL = strSQL & "WHERE LastName = """ & Me.txtLastName & "'"

Then replace the next ' becomes:

strSQL = strSQL & "WHERE LastName = """ & Me.txtLastName & """"

So, here -------------------------------------v
strSQL = strSQL & "WHERE LastName = """ & Me.txtLastName & """"

The first two quotes makes one qoute in the string. The third quote
delimits the first part of the string and becomes:
"WHERE LastName = "

Then the value of the control is concatenated to it:
"Where LastName = "O'Reilly

And this ------------------------------------------------------------------v
strSQL = strSQL & "WHERE LastName = """ & Me.txtLastName & """"

Creates a string with one quote. The first " begins the delimiter for the
string. The next two "" become one " in the string, and the fourth ends the
delimiter for the string. and the outcome is:

"

Which is then concatenated to:
"Where LastName = "O'Reilly

And becomes:
"Where LastName = "O'Reilly"

So, now you know the rules on how it works, but like I said, the easy way to
get it down is to write the code using a single '
Then go back and replace each ' with ""

Hope that is helpful.
--
Dave Hargis, Microsoft Access MVP


"m stroup" wrote:

> Thanks so much, Dave. I felt it was a syntax error and played around with
> quotations, but had not landed on the right mix. It looks like there are too
> many but it is working beautifully.
> --
> Teach me to fish! Thanks for the help.
> Pax, M
>
>
> "Klatuu" wrote:
>
> > ACFT appears to be a text data type and therefore need to be enclosed in
> > quotes.
> > This line:
> >
> > sWHERE = sWHERE & " AND s.ACFT = " & Me.cboAircraft
> >
> > Should be:
> >
> > sWHERE = sWHERE & " AND s.ACFT = """ & Me.cboAircraft & """"
> >
> > --
> > Dave Hargis, Microsoft Access MVP
> >
> >
> > "m stroup" wrote:
> >
> > > I have the following:
> > >
> > > frmQryEvents
> > > chkDate txtStartDate "to" txtEndDate
> > > chkAircraft cboAircraft
> > > etc
> > > tblEvents
> > > EventDate
> > > ACFT
> > > etc..
> > > I am using the following to build my SQL string:
> > >
> > > Function BuildSQLString(sSQL As String) As Boolean
> > >
> > > Dim sSELECT As String
> > > Dim sFROM As String
> > > Dim sWHERE As String
> > >
> > > sSELECT = "s.* "
> > >
> > > sFROM = "tblEvents s "
> > > If chkDate.Value = -1 Then
> > > If Not IsNull(txtBeginDate) Then
> > > sWHERE = sWHERE & " AND s.EventDate >= " & _
> > > "#" & Format(txtBeginDate, "mm/dd/yyyy") & "#"
> > > End If
> > > If Not IsNull(txtEndDate) Then
> > > sWHERE = sWHERE & " AND s.EventDate <= " & _
> > > "#" & Format(txtEndDate, "mm/dd/yyyy") & "#"
> > > End If
> > > End If
> > >
> > > If chkAircraft.Value = -1 Then
> > > sWHERE = sWHERE & " AND s.ACFT = " & Me.cboAircraft
> > > End If
> > >
> > > If chkPilot.Value = -1 Then
> > > sWHERE = sWHERE & " AND s.Pilot = " & Me.cboPilot
> > >
> > > End If
> > >
> > > sSQL = "SELECT " & sSELECT
> > > sSQL = sSQL & "FROM " & sFROM
> > > If sWHERE <> "" Then sSQL = sSQL & "WHERE " & Mid(sWHERE, 6)
> > >
> > > BuildSQLString = True
> > >
> > > msgbox sSQL
> > >
> > > End Function
> > >
> > > The sSQL goes into a querydef function, which is working fine.
> > > The sSQL reads:
> > >
> > > SELECT s.* FROM tblEvents s WHERE s.EventDate >= #03/01/2008# AND _
> > > s.EventDate <= #03/31/2008# AND s.ACFT = BF1.
> > >
> > > This appears to be right. I entered the dates as 03/01/2008 and 3/31/2008
> > > and I selected BF1 from cboAircraft (ACFT is the field name in the table).
> > >
> > > What occurs is that instead of "BF1" showing in the design view as criteria,
> > > [BF1] appears and I am prompted for the BF1 entry (as in a parameter query).
> > >
> > > Any suggestions would be helpful. Running Access 2003.
> > >
> > > --
> > >
> > > Teach me to fish! Thanks for the help.
> > > Pax, M

 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Import Query to Excel with Query Parameters =?Utf-8?B?S0JIZWRnZQ==?= Microsoft Access External Data 2 27th Apr 2007 11:32 PM
Set sub (embedded?) query parameters using VBA, call sub query in primary query with parameters completed Kelii Microsoft Access 4 5th Feb 2007 04:01 AM
How do I not carry over parameters from query to query? =?Utf-8?B?S2FyaW4gUw==?= Microsoft Access Queries 2 7th Sep 2005 04:19 PM
Parameter Query based on parameters from another Query =?Utf-8?B?Q2hyaXM=?= Microsoft Access Queries 2 11th Aug 2005 11:05 PM
Query based on a parameter query, using VBA how do I to set the parameters Jim Microsoft Access 1 11th Jan 2004 08:10 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 08:24 PM.