Запрос драйвера 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 панель управления длинной даты. |
Действия по воспроизведению поведения
Создайте файл программы с именем 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
Обратите внимание, что записи не возвращаются и не отображаются.
Закомментируйте следующую строку кода:
lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
Раскомментируйте следующую строку кода:
lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
Повторно запустите программу и убедитесь, что данные возвращаются и отображаются на экране.