É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
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
Notez qu’aucun enregistrement n’est retourné ou affiché.
Commentez la ligne de code suivante :
lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
Supprimez les marques de commentaire de la ligne de code suivante :
lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
Réexécutez le programme et observez que les données sont retournées et affichées à l’écran.