bonsoir à tous,
j'ai une appli D7 qui se connecte sur des fichiers SCV au travers de l'ADO et tout fonctionne bien, enfin je veux dire que la DBGrid reproduit fidèlement les données ... sauf dans un fichier et sur un champ particulier où à partir du 201 ème enregistrement la valeur est interprétée comme vide alors qu'une donnée de type numérique est présente.
voici le code de la connexion, je ne pense pas que ce soir pertinent mais bon, cela peut toujours servir à d'autres ...
Je me suis fait une moulinette pour virer les éventuels caractères de contrôle ou autres, sans succès.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ADOTable1.close; ADOConnection1.Close; ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source='+ExtractFilePath(openDialog1.FileName)+';Extended Properties="TEXT;HDR=YES;FMT=Delimited;"'; ADOTable1.TableName := StringReplace(ExtractFileName(opendialog1.FileName),'.','#',[]); ADOConnection1.Open; ADOTable1.Open;
En analysant les données du champ concerné, je me suis aperçu que les 200 premières valeurs sont inférieures à 2147483647 soit (2^31)-1. En remontant plus loin, le datatype du champ concerné est ftInteger soit un entier signé 32bits ...
Or le champ contient des valeurs plus grandes que 32bits.
1. Dans ce cas, comment Delphi procède t il pour déterminer le type d'un champ ?
Analyse des 100 ou 150 premiers enregistrements ???
2. Comment faire pour se prémunir de ce genre de blague ?
merci d'avance
Partager