set century on
set date to ymd
BROW FOR PDATT>=ctod('2002/05/01')

解决方案 »

  1.   

    xiaowei_2002(小魏!) 说的对.
      

  2.   

    对 2000 年日期的支持
    Visual FoxPro 6.0 已得到改进,可提供对 2000 年日期的更好的支持。本节描述一些 Visual FoxPro 的改进,使用这些改进可以更容易地创建与 2000 年日期相兼容的应用程序。SET CENTURY TO
    Visual FoxPro 5.0 的文档声称,在不带附加参数的情况下发出 SET CENTURY TO 命令,则将世纪设置成当前世纪。这只在二十世纪是正确的,因为不管当前世纪是什么,世纪值都设置为 19。而在 Visual FoxPro 6.0 中,SET CENTURY TO 命令会将世纪值设置为当前世纪。此外,在新的数据工作期,SET CENTURY TO 的值将被初始化为当前世纪。另外,在 Visual FoxPro 6.0 中,SET CENTURY 的 ROLLOVER 默认值已更改为当前年份的最后两个数字加 50 年。也就是说,如果当前是 1998 年,nYear 是 48,48 即 2048 (1998 + 50) 的最后两个数字。在 Visual FoxPro 5.0 中,这个默认值为 0。详细内容,请参阅 SET CENTURY。严格的日期格式
    通常情况下,对 Date 和 DateTime 常数或表达式进行编译或估算时,是根据 SET DATE 和 SET CENTURY 的当前设置进行对其解释的。这意味着,由于日期常数编译时间的不同、以及在编译时起作用的日期设置的不同,日期常数可能被估算成不同的值,因此很多日期常数是不确定的。例如,日期常数 {10/11/12} 是 1912 年 10 月 11 日、2012 年 10 月 11 日、1912 年 11 月 10 日、1910 年 11 月 12 日,还是 2010 年 11 月 12 日?这完全取决于 SET DATE 和 SET CENTURY TO 的当前设置。在编译 Date 和 DateTime 常数或表达式、或在运行时刻估算其值(如在报表和对象的表达式中)时,都会将错误带入现有的 Visual FoxPro 代码。如果将 SET CENTURY 设置设定成 2000 年,而没有指定四位数字的年份时,将会给现有代码带来 2000 年不兼容的错误。为了避免这种不兼容性,在 Visual FoxPro 6.0 (以及 Visual FoxPro 5.0)中使用了一种严格的日期格式。无论对于何种日期设置,这种严格的日期格式都能计算出相同的 Date 或 DateTime 值。该日期格式是∶^yyyy-mm-dd[,][hh[:mm[:ss]][a|p]](^) 符号表明该格式是严格的日期格式,并按照 YMD 的格式解释 Dates 和 DateTimes。有效的 Date 和 DateTime 分隔符位连字符、正斜杠、句点和空格。空 Dates 和 DateTimes 被认为是明确的、且总是有效的。有效的空 Date 和 DateTime 格式包括 {}、{--} 和 {--,:}。有了严格的日期格式,就可以使用多种可用的 Date 和 DateTime 值。在 Visual FoxPro 5.0 中,最小的日期值是 {^0100/1/1},即公元 100 年 1 月 1 日,这是由于小于 100 的年份值都将根据 SET CENTURY 的设置被四舍五入为最近的世纪值。在 Visual FoxPro 6.0 中,最小的日期值是 {^0001-01-01},即公元 1 年 1 月 1 日。在 Visual FoxPro 6.0 中,最大的日期值是 {^9999-12-31},即公元 9999 年 12 月 31 日。严格格式的 Date 或 DateTime 总是符合 Western 日历的(注意,在 Visual FoxPro 5.0 中与此不同)。SET STRICTDATE
    在 Visual FoxPro 6.0 中,一个新命令,SET STRICTDATE 可用来增强日期常数和日期字符串的 2000 年兼容性。SET STRICTDATE TO 0将 STRICTDATE 设置为 0 意味着不进行严格日期格式的检查。这与 Visual FoxPro 5.0 兼容的。运行时刻 Visual FoxPro 和 ODBC 驱动程序的默认设置为 0。如果 STRICTDATE 设置为 0,无效的 Date 和 DateTimes 将作为空日期。SET STRICTDATE TO 1将 STRICTDATE 设置为 1,意味着要求所有 Date 和 DateTime 常数都符合严格的日期格式。不论是在编译、运行时刻或在一个交互的 Visual FoxPro 工作期,任何不符合严格格式的 Date 或 DateTime 常数(或被估算为无效值)都将生成一个错误。交互的 Visual FoxPro 工作期的默认设置为 1。SET STRICTDATE TO 2与将 STRICTDATE 设置为 1 相同,但如果 CTOD( ) 和 CTOT( ) 函数出现在代码中,将产生编译错误(错误 2033 -CTOD 和 CTOT 会产生不正确的结果)。由于 CTOD( ) 和 CTOT( ) 的返回值需要使用 SET DATE 和 SET CENTURY 的设置来解释函数中所包含的日期字符串,因此易于出现与 2000 年不兼容的错误。请使用带有可选的数值参数的 DATE( ) 和 DATETIME( ) 创建 Date 和 DateTime 常数和表达式。这个设置最适合在调试时使用,用来捕捉可能包含 2000 年兼容性错误的代码。严格日期格式错误
    Visual FoxPro 6.0 中添加了下列新的错误,并当 SET STRICTDATE 设置为 1 或 2 时,发生这些错误。错误 2032∶不明确的日期/日期时间常量。
    当 Date 或 DateTime 不符合严格格式时,将发生该错误。下面的情况会产生这种错误: 无 (^) 符号。
    日期分隔符不是连字符、正斜杠、句点或空格。
    年份域包含的值小于四个字符(例如{^98-02-16})。
    月份或日期域是空的(例如{^1998-02})。 
    错误 2033∶CTOD 和 CTOT 会产生不正确的结果。
    这个错误发生的原因与错误 2032 相同,但是 CTOD( ) 和 CTOT( ) 也可能造成日期的不兼容或不明确。请使用 DATE( ) 或 DATETIME( ) 函数。错误 2034∶日期/日期时间计算为无效值。
    Date 或 DateTime 值不符合有效的 Date 或 DateTime 格式、或超出有效的 Date 或 DateTime 范围。当 SET STRICTDATE 被设置为 0 时,无效的 Date 和 DateTime 常数将被估算为空的 Date 或 DateTime。而当 SET STRICTDATE 被设置为 1 或 2 时,无效的常数将产生这个错误,例如 {^2000-02-31}(2 月 31 日)或者 {^2000-01-01,25:00}(25 点)。无效 Dates 和 DateTimes 的示例如下∶ {^2000-02-31},2000 年 2 月 31 日。
    {^2000-01-01,25:00},25 点。
    {^2000-01-01, 14a},上午 14 点。 
    错误 2035∶日期/日期时间中包含了非法字符。
    Date 或 DateTime 常数包含 Date 和 DateTime 常数不支持的字符。当 SET STRICTDATE 被设置为 0 时,包含非法字符的 Date 或 DateTime 常数将被估算为空的 Date 或 DateTime。而当 SET STRICTDATE 被设置为 1 或 2 时,包含非法字符的 Date 或 DateTime 常数将产生这个错误。请注意,StrictDateEntry 属性不受 SET STRICTDATE 设置的影响。在 Visual FoxPro 6.0 中,StrictDateEntry 属性保持不变。“选项”对话框
    “选项”对话框的“常规”选项卡包含一个“2000 年兼容性”下拉列表,用于指定 SET STRICTDATE 的设置。与所有其他“选项”对话框的项目相同,这里设置的值是为当前 Visual FoxPro 工作期设置的,选取“设置为默认值”按钮,则将该设置保存在 Windows 注册表中,以后的 Visual FoxPro 工作期都可使用。DATE( ) 和 DATETIME( ) 函数
    DATE( ) 和 DATETIME( ) 函数现支持可选的数值参数,可用来创建与 2000 年兼容的 Date 或 DateTime 值。对这些函数的加强,为创建 Date 和 DateTime 值提供了一种更优越的方法;因此不再需要使用字符进程函数来创建 Date 和 DateTime 值。FDATE( ) 函数
    FDATE( ) 函数现支持可选的数值参数,可用来确定文件的最后修改日期,而无须使用字符进程函数。例如,在早期版本的 Visual FoxPro 中,需要编写如下代码,来确定 Visual FoxPro 源文件的最后修改日期∶tLastModified = CTOT(DTOC(FDATE('Foxuser.dbf')) + ' ' ;
       + FTIME('Foxuser.dbf') 现在,这些代码现在可以替换为∶tLastModified = FDATE('Foxuser.dbf', 1)Century 属性
    在 Visual FoxPro 6.0 中,Century 属性的默认设置为 1 - 开。日期的世纪部分显示在一个文本框中。在早期版本的 Visual FoxPro 中,其默认值是 2 - 设定世纪,该设置确定是否显示日期的世纪部分。