[AccessD] Un-American Date Filter

Shamil Salakhetdinov shamil at smsconsulting.spb.ru
Thu Mar 31 19:51:53 CDT 2011


Rocky --

I used DateSerial just to make it clear what date values are used in my
samples.
You don't need to use DateSerial(...) I suppose.

Thank you.

--
Shamil
 
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Rocky Smolin
Sent: 1 ?????? 2011 ?. 3:06
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Un-American Date Filter

Shamil:

I'm not using Date Serial because the date is already formatted in the text
box.  Is there a reason to parse it out and then use Date Serial?

Rocky
 

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Shamil
Salakhetdinov
Sent: Thursday, March 31, 2011 3:42 PM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Un-American Date Filter

Rocky --

<<<CDate(...) is "guessing" (sometimes wrongly)>>> I should have written
that CDate(...) uses MS Windows system locale date format to convert String
date representation to its Date value.
And doing so it could produce results not expected/intended to be used by a
developer as in this case:

?Format(CDate(Format(DateSerial(2011,4,1), "dd/mm/yyyy")),"dd-mmm-yyyy")
01-apr-2011
?Format(CDate(Format(DateSerial(2011,4,1), "mm/dd/yyyy")), "dd-mmm-yyyy")
04-jan-2011

when system locale date format was 'dd/mm/yyyy' and so first result was
correct while the second... was correct also ... but didn't conform
developer's intention as they got January 4th, 2011 instead of April 1st,
2011...

And here system locale date format is also 'dd/mm/yyyy' and both results are
"correct":

?Format(CDate(Format(DateSerial(2011,4,21), "dd/mm/yyyy")),"dd-mmm-yyyy")
21-apr-2011
?Format(CDate(Format(DateSerial(2011,4,21), "mm/dd/yyyy")), "dd-mmm-yyyy")
21-apr-2011 

I quoted word correct because both results produce 21-April-2011 which is
equal to the source date DateSerial(2011,4,21) but CDate(...) should
better(?) produce runtime error for CDate("4/21/2011")  on systems with
"dd/mm/yyyy" system locale date format...
(and on your system with 'mm/dd/yyyy' system locale date format you'll get
CDate('21/4/2011') - 21-April-2011, which is confusing if you don't know
what happens "behind the curtains"

On your system with 'mm/dd/yyyy' date format set in the system locale you'll
get opposite to my first sample results:

?Format(CDate(Format(DateSerial(2011,4,1), "dd/mm/yyyy")),"dd-mmm-yyyy")
01-jan-2011
?Format(CDate(Format(DateSerial(2011,4,1), "mm/dd/yyyy")), "dd-mmm-yyyy")
04-apr-2011

And in MS Access Query Designer (QBE Grid) dates are presented using system
locale date/time format as well as in MS Access form's textboxes if you use
"Short Date" format....

Hope that helps.

Thank you.

--
Shamil
 
-----Original Message-----
From: Shamil Salakhetdinov [mailto:shamil at smsconsulting.spb.ru]
Sent: 1 ?????? 2011 ?. 1:58
To: 'Access Developers discussion and problem solving'
Subject: RE: [AccessD] Un-American Date Filter

Hi Rocky -- 

<<<
IT'S WORKING!!!
>>>
Great!

<<<
Oddly, the SQL still shows the date as dd/mm/yyyy.
>>>
Do you mean QBE (MS Access Query Designer/Query By Example) grid's criteria
values presented in dd/mm/yyyy format while SQL expression string has date
values in American mm/dd/yyyy format?

I haven't seen your code but from your description using

Format(Me.txtGEDueDate, "mm/dd/yyyy")

should be enough, while using

CDate(Format(Me.txtGEDueDate, "mm/dd/yyyy"))

could result in wrong SQL where criteria - CDate(...) is "guessing"
(sometimes wrongly) what Date value should be while converting it from its
string representation - have a look/try to type in Immediate window:


?Format(CDate(Format(DateSerial(2011,4,1), "dd/mm/yyyy")),"dd-mmm-yyyy")
01-apr-2011
?Format(CDate(Format(DateSerial(2011,4,1), "mm/dd/yyyy")), "dd-mmm-yyyy")
04-jan-2011

?Format(CDate(Format(DateSerial(2011,4,21), "dd/mm/yyyy")),"dd-mmm-yyyy")
21-apr-2011
?Format(CDate(Format(DateSerial(2011,4,21), "mm/dd/yyyy")), "dd-mmm-yyyy")
21-apr-20111 

Of course date string used in SQL expression in American format should be
enclosed in a pair of '#' symbols - #04/01/2011# ....

Thank you.

--
Shamil
 
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Rocky Smolin
Sent: 31 ????? 2011 ?. 22:50
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Un-American Date Filter

Shamil:

I think that's what Doug was trying to tell me?  Anyway, IT'S WORKING!!!

I changed the code to CDate(Format(Me.txtGEDueDate, "mm/dd/yyyy")).  Oddly,
the SQL still shows the date as dd/mm/yyyy.

Thank you one and all.

Rocky
 

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Shamil
Salakhetdinov
Sent: Thursday, March 31, 2011 11:40 AM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Un-American Date Filter

Rocky --

SQL "knows" American mm/dd/yyyy  dates only - your constructed in code SQL
expression should be:

INSERT INTO tblKittingToMIS ( PartNumber, OrderNumber, DueDate, QuantityDue
) SELECT tblDemand.PartNumber, tblDemand.OrderNumber, tblDemand.DueDate,
tblDemand.QuantityDue FROM tblDemand  WHERE DueDate >= #03/31/2011# AND
DueDate <= #04/07/2011#

--
Shamil
 
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Rocky Smolin
Sent: 31 ????? 2011 ?. 21:56
To: 'Access Developers discussion and problem solving'
Subject: [AccessD] Un-American Date Filter

Dear List:
 
I create a temp table using a SQL statement I construct in code to
incorporate various filter - one of which is a date filter.  
 
Works well here but when I send it to the user in Bahrain who's regional
setting is (I assume from the screen shot he sent) English U.K. where the
date format is dd/mm/yyyy it fails.  I set my regional settings on my box to
U.K. and sure enough it fails - returns all records with no date filtering.
 
Here's the SQL statement that creates the table:
 
INSERT INTO tblKittingToMIS ( PartNumber, OrderNumber, DueDate, QuantityDue
) SELECT tblDemand.PartNumber, tblDemand.OrderNumber, tblDemand.DueDate,
tblDemand.QuantityDue FROM tblDemand  WHERE DueDate >= #31/03/2011# AND
DueDate <= #07/04/2011#
 
which is supposed to filter out any record in tblDemand where the Due Date
is outside of the range March 31 to April 7.  But it don't.
 
When I look in tblDemand, the dates are displayed properly as dd/mm/yyyy. 
 
Why doesn't this work?  Should I be using some kind of different syntax for
this filter?
 
MTIA
 

Rocky Smolin

Beach Access Software

858-259-4334

Skype: rocky.smolin

www.e-z-mrp.com <http://www.e-z-mrp.com/> 

www.bchacc.com <http://www.bchacc.com/> 

 

 

 
 
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com




More information about the AccessD mailing list