Échec de la requête du pilote ODBC Visual FoxPro si le format de date n’est pas le format de date AMÉRICAIN

Cet article vous aide à résoudre le problème qui se produit lorsque vous exécutez une requête ODBC sur des tables Visual FoxPro à l’aide du pilote ODBC Visual FoxPro.

Version d’origine du produit : Visual FoxPro
Numéro de la base de connaissances d’origine : 229854

Symptômes

Lors de l’exécution d’une requête ODBC sur des tables Visual FoxPro à l’aide du pilote ODBC Visual FoxPro, aucun enregistrement n’est retourné lorsque la clause WHERE inclut une date qui n’est pas au format de date AMÉRICAIN.

Cause

Le pilote ODBC Visual FoxPro accepte uniquement les dates dans un format de date AMÉRICAIN strict.

Résolution

Convertissez toutes les dates passées dans la clause WHERE de l’instruction SELECT-SQL au format de date AMÉRICAIN.

Statut

Ce comportement est inhérent au produit.

Informations supplémentaires

Le paramètre de date Visual FoxPro par défaut est AMERICAN. Toutefois, les formats de date peuvent être définis sur les formats suivants :

Paramètre de date Format de date
AMÉRICAIN mm/jj/aaaa
ANSI yy.mm.dd
ANGLAIS/FRANÇAIS jj/mm/aaaa
ALLEMAND dd.mm.yy
ITALIEN dd-mm-aaaa
JAPON yy/mm/jj
TAIWAN yy/mm/jj
USA mm-dd-yy
MDY mm/jj/aaaa
DMY jj/mm/aaaa
YMD yy/mm/jj
SHORT Format de date courte déterminé par le paramètre de date courte Panneau de configuration Windows.
LONG Format de date longue déterminé par le paramètre de date longue Panneau de configuration Windows.

Étapes pour reproduire le comportement

  1. Créez un fichier programme nommé Odbctest.prg à l’aide du code suivant :

    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. Notez qu’aucun enregistrement n’est retourné ou affiché.

  3. Commentez la ligne de code suivante :

    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
    
  4. Supprimez les marques de commentaire de la ligne de code suivante :

    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
    
  5. Réexécutez le programme et observez que les données sont retournées et affichées à l’écran.