IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Champs CSV non parsés avec OLEDB


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Sam Placi
    Homme Profil pro
    Développeur occasionnel
    Inscrit en
    Octobre 2019
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur occasionnel

    Informations forums :
    Inscription : Octobre 2019
    Messages : 68
    Par défaut Champs CSV non parsés avec OLEDB
    Bonjour,

    Je tente de lire un fichier CSV avec OLEDB.
    La connexion se fait et la requête s'éxécute.
    Le problème est qu'elle retourne les lignes du fichier comme s'il n'y avait qu'une seule colonne de données, sans tenir compte du séparateur.

    Voici le fichier de test :

    Inicial;Letras;Num_1;Num_2;
    00;A;1;6;
    01;B;1;5;
    02;C;1;6;
    03;A;2;6;
    04;A;3;4;
    05;B;2;5;

    Voici la chaine de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ChaineCon As string = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & CurDir() & "\;" & "Extended  Properties=""text;HDR=Yes;FMT=Delimited()"""
    Il existe de nombreuses variantes de cette chaine de connexion mais elles ne diffèrent que par quelques nuances de syntaxe et j'en ai tester plusieurs sans amélioration du résultat.


    Voici la requête et l'affectation du résultat à un DGV :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            Dim MAdap As OleDbDataAdapter = New OleDbDataAdapter(ChaineCon, Conex)
            MAdap.Fill(DT)
            MAdap.Dispose()
     
            DGV.DataSource = Nothing
            DGV.Rows.Clear()
            DGV.DataSource = DT
    Et le résultat :
    Nom : Sam01.jpg
Affichages : 104
Taille : 9,0 Ko


    Si quelqu'un a une idée ..., elle sera bien venue.

    Merci d'avance,

    Sam

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 250
    Par défaut
    Il faut que tu précise que le délimiter est le ;

    Le format csv est d'origine américaine, le délimiteur par défaut est la virgule. C'est en Europe, en France surtout que le ; est utilisé en délimiteur, car la virgule peut apparaitre dans les nombres décimaux.

  3. #3
    Membre éclairé Avatar de Sam Placi
    Homme Profil pro
    Développeur occasionnel
    Inscrit en
    Octobre 2019
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur occasionnel

    Informations forums :
    Inscription : Octobre 2019
    Messages : 68
    Par défaut
    Merci pour cette précision.
    Vite vérifié, je constate que c'est bien le ; qui est désigné comme séparateur de listes dans les paramètres régionaux du système.
    J'ai utilisé aussi une chaîne de connexion où le ; est précisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ChaineCon As string = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & CurDir() & "\;" & "Extended  Properties=""text;HDR=Yes;FMT=Delimited(;)"""
    ... mais cela ne change rien.

    A noter au passage que Excel ouvre parfaitement ce fichier DonneesTmp.CSV.

    Dans mon premier message, j'ai oublié d'inclure le code de la requête; je profite donc de cette réponse pour donner le code complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
           Dim ChaineCon As string = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & CurDir() & "\;" & "Extended  Properties=""text;HDR=Yes;FMT=Delimited()"""
     
            Conex.ConnectionString = ChaineCon
     
            Dim ReqSQL As String =  "Select * FROM DonneesTmp.csv"
     
            Dim MAdap As OleDbDataAdapter = New OleDbDataAdapter(ReqSQL, Conex)
            MAdap.Fill(DT)
            MAdap.Dispose()
     
            DGV.DataSource = Nothing
            DGV.Rows.Clear()
            DGV.DataSource = DT
    Bonne soirée,

    Sam

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    bonjour,
    par défaut le délimiteur est la virgule et pas le point virgule!

    il te faudra définir un fichier schema.ini dans le répertoire du csv si tu veux pas bricoler la base de registre!
    https://docs.microsoft.com/fr-fr/sql...l-server-ver15

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [Fichier.csv]
    Format=Delimited(;)
     Col1 = CLEGEO Text 
     col2 = CLEGEO_CAR3 Text 
     Col3 = ID_IMMEUBLE Text 
     Col4 = CLEGEO_DANS_RA Text 
     Col5 = ETC Text

  5. #5
    Membre éclairé Avatar de Sam Placi
    Homme Profil pro
    Développeur occasionnel
    Inscrit en
    Octobre 2019
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur occasionnel

    Informations forums :
    Inscription : Octobre 2019
    Messages : 68
    Par défaut
    Merci Thumb down.

    J'avais déjà approché cette solution mais borné que je suis, je n'ai pas voulu admettre que OleDb puisse ne pas prendre en compte les paramètres régionaux du système.
    Ton message m'a convaincu et j'ai suivi ton conseil : c'est parfait !

    Encore merci et bon dimanche.

    Sam

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/08/2018, 19h24
  2. Champ Blob non reconnu avec ADO
    Par Ben_Le_Cool dans le forum Bases de données
    Réponses: 6
    Dernier message: 30/10/2006, 14h34
  3. Requête UNION avec champ Oui/non
    Par Mariboo dans le forum Access
    Réponses: 4
    Dernier message: 01/08/2006, 08h36
  4. comptage avec champ oui/non
    Par cello06 dans le forum Access
    Réponses: 3
    Dernier message: 09/04/2006, 14h13
  5. [VBA] : Pb Create Table avec Champs Oui/Non
    Par GuidoBrasletti dans le forum Access
    Réponses: 8
    Dernier message: 15/03/2006, 19h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo