Merci à vous pour vos réponses. Je me doutais bien que ce switch case était toujours vrai c'est plutôt au niveau de la syntaxe que je ne comprenais pas pourquoi il me déclarait une erreur.
jguinch a écrit :Je ne connais pas cette fonction, mais tu devrais pouvoir t'en sortir avec l'UDF
AdoSql de JCHD, en passant par la couche ODBC (ADO).
Les fonctions sont équivalentes à celles de l'UDF Sqlite native.
Merci, mais je cherchais un truc relativement simple et surtout qui ne nécessite pas de surcouche chez l'utilisateur.
Tlem a écrit :Bonsoir.
Concernant la lecture de fichiers DBF, j'avais trouvé quelque chose de complet et bien sympathique lors de recherches pour un projet.
Je met en pièce jointe, car je ne me rappel plus l'origine de la DLL et des scripts au3.
Bonne lecture.

Merci à toi. Effectivement il est complet, même trop pour mon projet. Mais je le garde sous le coude pour autre chose.
Finalement j'ai viré le switch case et ça fonctionne normalement.
Pour mémoire ça donne ceci:
► Afficher le texte
#include-once
;===============================================================================
;
; Description: Directly read DBF database file to array
; Parameter(s): $sFileName - name of DBF file
; $nFlags
; 1 - convert from OEM to ANSI
; 2 - strip leading and trailing witespaces
; Requirement(s): Autoit 3.2.9.0 +
; Return Value(s): On Success - 2D array, first row - names of fields
; On Failure - no decent way to check errors
; Author(s): Dmitry Yudin (Lazycat)
; Version: 0.3
; Date: 14.12.2009
; Note(s): Many DBF functions and flags are not read - just because
; I wasn't need it
;
;===============================================================================
Func _FileReadDBF($sFileName, $nFlags = 0)
Local $hFile = FileOpen($sFileName, 16)
Local $pReadBuffer = DllStructCreate("byte[32]") ; Header size
DllStructSetData($pReadBuffer, 1, FileRead($hFile, 32))
$pDBFHeader = DllStructCreate("byte;byte;byte;byte;int;short;short;byte[20]" , DllStructGetPtr($pReadBuffer)) ; Header struct
$nRecords = DllStructGetData($pDBFHeader, 5) ; Get number of records
$nDataPos = DllStructGetData($pDBFHeader, 6) ; Get data start position
$nRecordSize = DllStructGetData($pDBFHeader, 7) ; Get record size (included deleted flag)
$nFields = Floor($nDataPos / 32) - 1
$nDataGap = $nDataPos - ($nFields + 1) * 32
Local $aData[$nRecords+1][$nFields]
Local $sRecordStruct = "byte;" ; Struct string, based on fields size and type, first byte - deleted mark
For $i=0 To $nFields - 1
DllStructSetData($pReadBuffer, 1, FileRead($hFile, 32))
$pField = DllStructCreate("char[11];byte;int;byte;byte[15]" , DllStructGetPtr($pReadBuffer)) ; Field structure
$aData[0][$i] = DllStructGetData($pField, 1) ; Name of field
; Create struct based on field size and type (now unfinished, treat all types as string)
$sRecordStruct &= "char[" & DllStructGetData($pField, 4) & "];"
Next
$sRecordStruct = StringTrimRight($sRecordStruct, 1) ; Trim last ";"
FileRead($hFile, $nDataGap) ; Skip ending marker, it's size may vary
$pReadBuffer = DllStructCreate("byte["&$nRecordSize&"]") ; New buffer, now based on record size
For $i = 1 To $nRecords
DllStructSetData($pReadBuffer, 1, FileRead($hFile, DllStructGetSize($pReadBuffer)))
$pRecord = DllStructCreate($sRecordStruct , DllStructGetPtr($pReadBuffer))
For $j = 0 To $nFields - 1
$aData[$i][$j] = DllStructGetData($pRecord, $j+2)
If BitAND($nFlags, 1) Then $aData[$i][$j] = _Ascii2Ansi($aData[$i][$j])
If BitAND($nFlags, 2) Then $aData[$i][$j] = StringStripWS($aData[$i][$j], 3)
Next
Next
FileClose($hFile)
Return $aData
EndFunc
; Helper function, convert OEM text to ANSI
Func _Ascii2Ansi($sText)
Local $src = DllStructCreate("char[" & StringLen($sText) + 1 & "]")
Local $dst = DllStructCreate("char[" & StringLen($sText) + 1 & "]")
DllStructSetData($src, 1, $sText)
DllCall("user32.dll", "int", "OemToCharA", "ptr", DllStructGetPtr($src), "ptr", DllStructGetPtr($dst))
Return DllStructGetData($dst, 1)
EndFunc