날짜 형식이 미국식 날짜 형식이 아니면 Visual FoxPro ODBC 드라이버 쿼리가 실패 함


증상


Visual FoxPro ODBC 드라이버를 사용 하 여 Visual FoxPro 테이블에 대해 ODBC 쿼리를 실행할 때 WHERE 절에 미국 날짜 형식이 아닌 날짜가 포함 된 경우 레코드가 반환 되지 않습니다.

원인


Visual FoxPro ODBC 드라이버는 엄격한 미국 날짜 형식의 날짜만 허용 합니다.

해결 방법


SELECT-SQL 문의 WHERE 절에 전달 되는 모든 날짜를 미국 날짜 형식으로 변환 합니다.

상태


이것은 의도적으로 설계된 동작입니다.

추가 정보


기본 Visual FoxPro 날짜 설정은 미국식입니다. 그러나 날짜 형식은 다음 형식으로 설정 될 수 있습니다.
날짜 설정날짜 형식
미국식mm/dd/yy
ANSIyy.mm.dd
BRITISH/FRENCH dd/mm/yy
독일어dd.mm.yy
이탈리아어dd-mm-yy
일본yy/mm/dd
대만yy/mm/dd
미국mm-dd-yy
MDYmm/dd/yy
DMYdd/mm/yy
YMDyy/mm/dd
최소Windows 제어판의 간단한 날짜 설정에 따라 결정 되는 간단한 날짜 형식입니다.
정수Windows 제어판의 자세한 날짜 설정에 따라 결정 되는 자세한 날짜 형식입니다.

동작을 재현 하는 방법

  1. 다음 코드를 사용 하 여 "Odbctest g" 라는 프로그램 파일을 만듭니다.
    CLEARDO 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 ConnectionoConnection=CREATEOBJECT("ADODB.Connection")oConnection.ConnectionString = lcConnStroConnection.CursorLocation   = 3oConnection.OPEN* lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"*!* Create An ADO recordsetrs=CREATEOBJECT("ADODB.Recordset")rs.activeconnection         = oConnectionrs.CursorLocation           = 3rs.cursortype               = 1rs.LockType                 = 3rs.OPEN(lcSQL)IF !rs.EOF   rs.movefirst   DO WHILE !rs.EOF      ? rs.FIELDS(0).VALUE      rs.movenext   ENDDOENDIFrs.CLOSEoConnection.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. 프로그램을 다시 실행 하 고 데이터가 반환 되 고 화면에 표시 되는지 확인 합니다.