Gustav Brock
gustav at cactus.dk
Tue Jul 1 04:43:14 CDT 2003
Hi Erwin You are correct, I was too fast, sorry. David, the trap is that sometimes (for certain local settings) date comparisons will work, sometimes (for some other local settings) they will not because Access - when building the string - will replace datStartDate and datEndDate with a string representation based on the local settings which the SQL tries to interpret wearing US glasses. To repeat my own posting from last year: --- Date: Tue, 06 Aug 2002 09:36:46 +0200 From: Gustav Brock <gustav at cactus.dk> Subject: Re: [AccessD] date/time format SOLVED Hi Bob For completeness, here's a function we use when building SQL strings with dates to save a lot of typing. It uses "the Lembit method" with escape characters to ignore local settings of date/time separators which otherwise will fool the Format function. <code> Public Function StrDateSQL(ByVal dat As Date) As String ' Formats full string of date/time in US format for SQL. ' Overrides local (non US) settings for date/time separators. ' Example output: ' ' #08/16/1998 04:03:36 PM# ' ' 1999-10-21. Cactus Data ApS, CPH. StrDateSQL = Format(dat, "\#mm\/dd\/yyyy hh\:nn\:ss AM/PM\#") End Function </code> --- Thus your code should be modified using this: strCriteria = "(CampusID=" & intCampus _ & ") AND (StartDate > " & StrDateSQL(datStartDate) & ") " _ & "AND (EndDate < " & StrDateSQL(datEnddate) & ")" Sorry for the confusion. /gustav > Hi Gustav/David. > I'm not sure of that. > Date do pose gigantic problems in everything that looks like a SQL statement > in VBA. > If the date structure of your country is not american you gonna get real > trouble. > SQL string in VBA need to be build with American dates. > I believe there are ways to use ISO dates but than you need to format to. > Never use half or long dates line 1 jun 2003. If the windows is set to other > language it will crash. > At least when using SQL server for this last issue. > Erwin > -----Oorspronkelijk bericht----- > Van: Gustav Brock [mailto:gustav at cactus.dk] > Verzonden: zondag 29 juni 2003 14:15 > Aan: Access Developers discussion and problem solving > Onderwerp: Re: [AccessD] DSUM - full solution for those interested - RE: > subquery assistance > Hi David > As you have specified datStartDate and datEndDate as date/time there should > really be no reason to use Format() wrapped in crosses (#) as that just > leaves you with the date/time value again. > If StartDate and EndDate are names of date/time fields of the table, this > should do as you compare date/time values with date/time values: > strCriteria = "(CampusID=" & intCampus _ > & ") AND (StartDate > " datStartDate & ") " _ > & "AND (EndDate < " & datEnddate & ")" > /gustav > Public Function TotalHolidayWeeks(intCampus As Integer, datStartDate As > Date, datEnddate As Date) As Integer > 'Calculates the number of weeks holiday for a campus between two given > dates > Dim strCriteria As String > strCriteria = "(CampusID=" & intCampus _ > & ") AND ((StartDate) > #" & Format(datStartDate, "dd/mmm/yyyy") & > "#) " _ > & "AND ((EndDate) < #" & Format(datEnddate, "dd/mmm/yyyy") & "#)" > TotalHolidayWeeks = Nz(DSum("Weeks", "tblCourseHolidays", strCriteria), > 0) > End Function