Запрос драйвера ODBC Visual FoxPro завершается ошибкой, если формат даты отличается от формата даты AMERICAN

Эта статья поможет устранить проблему, которая возникает при выполнении запроса ODBC к таблицам Visual FoxPro с помощью драйвера ODBC Visual FoxPro.

Исходная версия продукта: Visual FoxPro
Исходный номер базы знаний: 229854

Симптомы

При выполнении запроса ODBC к таблицам Visual FoxPro с помощью драйвера ODBC Visual FoxPro записи не возвращаются, если предложение WHERE содержит дату, которая не имеет американского формата даты.

Причина

Драйвер ODBC Для Visual FoxPro принимает даты только в строгом американском формате.

Решение

Преобразуйте все даты, переданные в предложении WHERE инструкции SELECT-SQL, в американский формат даты.

Статус

Такое поведение является особенностью данного продукта.

Дополнительная информация

Параметр даты Visual FoxPro по умолчанию — AMERICAN. Однако форматы дат могут быть заданы в следующих форматах:

Параметр даты Формат даты
АМЕРИКАНСКИЙ мм/дд/гг
ANSI гг.мм.дд
БРИТАНСКИЙ/ФРАНЦУЗСКИЙ дд/мм/гг
НЕМЕЦКИЙ дд.мм.гг
ИТАЛЬЯНСКИЙ дд-мм-гг
ЯПОНИЯ гг/мм/дд
ТАЙВАНЬ гг/мм/дд
США мм-дд-гг
MDY мм/дд/гг
DMY дд/мм/гг
YMD гг/мм/дд
SHORT Короткий формат даты определяется параметром короткой даты панель управления Windows.
ДЛИННЫЕ Длинный формат даты определяется параметром windows панель управления длинной даты.

Действия по воспроизведению поведения

  1. Создайте файл программы с именем Odbctest.prg, используя следующий код:

    CLEAR
    DO CASE
        CASE "6.0"$VERSION()
            lcConnStr="DRIVER={Microsoft Visual FoxPro Driver};" + ;
            "Exclusive=No;SourceType=DBF;SourceDB="+HOME(2)+"DATA"
        CASE "5.0"$VERSION()
            lcConnStr="DRIVER={Microsoft Visual FoxPro Driver};" + ;
            "Exclusive=No;SourceType=DBF;SourceDB="+HOME()+"SAMPLES\DATA"
        CASE "3.0"$VERSION()
            lcConnStr="DRIVER={Microsoft Visual FoxPro Driver};" + ;
            "Exclusive=No;SourceType=DBF;SourceDB="+HOME()+"SAMPLES\DATA"
            OTHERWISE && Version is VFP 7.0,8.0, or 9.0
            lcConnStr="DRIVER={Microsoft Visual FoxPro Driver};" + ;
            "Exclusive=No;SourceType=DBF;SourceDB="+HOME(2)+"DATA"
    ENDCASE
    
    *!* Create An ADO Connection
    
    oConnection=CREATEOBJECT("ADODB.Connection")
    oConnection.ConnectionString = lcConnStr
    oConnection.CursorLocation = 3
    oConnection.OPEN
    
    * lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"*!* Create An ADO recordset
    rs=CREATEOBJECT("ADODB.Recordset")
    rs.activeconnection = oConnection
    rs.CursorLocation = 3
    rs.cursortype = 1
    rs.LockType = 3
    rs.OPEN(lcSQL)
    IF !rs.EOF
        rs.movefirst
        DO WHILE !rs.EOF
            ? rs.FIELDS(0).VALUE
            rs.movenext
        ENDDO
    ENDIF
    rs.CLOSE
    oConnection.CLOSE
    
  2. Обратите внимание, что записи не возвращаются и не отображаются.

  3. Закомментируйте следующую строку кода:

    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
    
  4. Раскомментируйте следующую строку кода:

    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
    
  5. Повторно запустите программу и убедитесь, что данные возвращаются и отображаются на экране.