Subject Re: date data in SQL statement
From Pieter van Heerden <psvh@mweb.co.za>
Date Fri, 24 Apr 2015 22:46:59 -0400
Newsgroups dbase.getting-started

Mervyn Bick Wrote:

> On Fri, 24 Apr 2015 16:05:40 +0200, Pieter van Heerden <psvh@mweb.co.za>  
> wrote:
>
> > In teh follwing:
> >
> > q.sql = "select * where rdate >= :startdat and rdate < :enddate"
> > q.params["startdate"] = form.startdate.value
> > q.params["enddate"] = form.enddate.value
> >
> > the startdate and enddates seems to be ignored, e.g. extraction will  
> > take place to beyond enddate.  Form.startdate and form.enddate comes  
> > from entryfields on the form linked to date spinbox fields in the table  
> > that is formatted as DMY.
> >
> > I have tried to recreate the SQL query in the SQL builder by inputting  
> > specific dates, but is then confronted with the problem  that date  
> > format seems to be wrong - error "Type mismatch in expression".  How  
> > does one enter date in the SQL builder, I have tried '...', {...},  
> > ctod(), date(), {d '...'} but none works as defined in SQL manuals I  
> > have looked at and I could not find the correct format explained in the  
> > OLH system.  The date format in this case is assumed to be yyyy-mm-dd.
> >
> > Where woiuld I find an example code in dBase help function that would  
> > show me what a date format in an SQL statement should look like?  The  
> > date() function under local SQL tells me about extract() but not about  
> > what the date should look like.
>
> Try the following
>
> q.sql = "select * where rdate between :startdate and :enddate"
> q.params["startdate"] = form.startdate.value
> q.params["enddate"] = form.enddate.value
>
> The BETWEEN predicate will include the start date and the end date in the  
> selection.  If you don't want the end date included in the selection as  
> indicated by your use of rdate < :enddate then simply deduct one from the  
> value supplied by form.enddate.value.
>
> q.params["enddate"] = form.enddate.value - 1
>
>
> In a localSQL statement there are only two formats in which to enter a  
> literal date namely 'mm/dd/yyyy' (American) or 'dd.mm.yyyy' (German).  
> This applies no matter what the computer's DATE format is set to.  This  
> information is tucked away in the localSQL help file at C:\Program  
> Files\Common Files\Borland\BDE\localsql.hlp   Have a look at "date  
> formats" in this file.
>
> Have a look at the code at the top of the attached example.  I've used the  
> American format to create the table even though the date format on my  
> computer is YMD.
>
> When supplying parameters to a query the values must be in the computer's  
> DATE format.  In the attached example program I've used
>
>        params["startdate"] = dttod(new date(1900,0,1))
>        params["enddate"] = dttod(new date(2020,11,31))
>
> I've done this so that the example will work no matter what your date  
> format is set to.  If you open the form in the designer dBASE will stream  
> out a dBASE literal date using curly brackets in the format set on the  
> computer.
>
> Mervyn.

Thanks, now for the next question relating to this:

If the enddate value is a later date than the date of the last entry in the queried table, the field values of the last record is repeated/appended to the result rowset until the enddate value is reached.  Surely extraction should stop when the last record is reached even though enddate is still somewhere in the future?



Warning: Unknown: write failed: No space left on device (28) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0