Insérer plusieurs fichiers .csv dans une table Access .mdb

atone31 Messages postés 15 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 6 septembre 2011 - 27 janv. 2011 à 11:47
atone31 Messages postés 15 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 6 septembre 2011 - 27 janv. 2011 à 14:11
Bonjour,

Je développe actuellement, sur Visual Basic express 2010 (que je découvre en même temps), une application qui me permettra de lire et afficher une base de données via Access.
Jusque là sa va, aucun problème rencontré.

Mon but :

-Transférer un répertoire contenant des fichiers ".csv", dans ma table " maTable".

Problèmes rencontrés:

- je n'arrive qu'à transférer juste un fichier dans ma base.
- Lorsque j'affiche ma table dans un DataGrid, le fichier .csv est contenu dans une seule colonne et les séparateurs "," ou ";" sont toujours là.

Solutions proposées:

- il faudrait, avant que je copie mon fichier ".csv" dans ma base ".mdb", enlever les séparateur "," ou ";". puis copier mon nouveau fichier".csv" dans ma table

Je ne voit pas comment m'y prendre.
J'ai vu quelques fonctions sur le net mais sa n'aboutit pas à un bon résultat.

Si vous avez des solutions à me proposer, c'est un grand OUI ! car j'ai du mal à trouver des personnes s'intéressant encore à la programmation VB.

Cordialement,
Anthony

3 réponses

atone31 Messages postés 15 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 6 septembre 2011 1
27 janv. 2011 à 14:11
je n'ai pas trouvé la catégorie vb10, désolé.

Voici une une ptite fonction qui utilise Split():

Public Function modifier() As DataTable

        Dim sr As StreamReader = Nothing
        Dim fs As FileStream = Nothing
        Dim _Separator As Char = ","
        Dim Line As String = ""

        fs = New FileStream(FichCSV, FileMode.Open)
        sr = New StreamReader(fs, System.Text.Encoding.UTF7)


        'Création des colonnes
        Line = sr.ReadLine
        Dim ColumnsName() As String = Split(Line, _Separator)
        For Each Column As String In ColumnsName
            dtt.Columns.Add(Column, GetType(String))
        Next

        While Not sr.EndOfStream

            'Lecture de la ligne et séparation des champs
            Line = sr.ReadLine
            Dim Cells() As String = Split(Line, _Separator)

            'Ajout des champs dans la table
            dtr = dtt.NewRow
            For i = LBound(Cells) To UBound(Cells)
                dtr.Item(i) = Cells(i)
            Next
            dtt.Rows.Add(dtr)
        End While

        Return dtt

    End Function


je vais essayer de l'utiliser dans mon code.
1
atone31 Messages postés 15 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 6 septembre 2011 1
27 janv. 2011 à 11:55
Voici le code qui me permet d'insérer un fichier .csv dans une nouvelle table de ma base.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        'Répertoire du fichier CSV
        DossierCSV = "C:\Users\Amis\Documents\Visual Studio 2010\Projects\CsvAccess\CsvAccess\bin\Debug"
        'Nom du fichier CSV à transfèrer
        FichCSV = "SA01218.csv"
        'Chemin et nom de la base Access
        MaBase = "C:\Users\Amis\Documents\Visual Studio 2010\Projects\CsvAccess\CsvAccess\bin\Debug\MaBase.mdb"
        'Nom de la nouvelle Table Access
        NomTable = "Gachées"

        'Connection au fichier CSV
        Csv_CN.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
            DossierCSV & ";Extended Properties='text;FMT=Delimited'")
        'Requète dans le fichier CSV
        Csv_Rst.Open("SELECT * FROM " & FichCSV, Csv_CN) ', _
        ' adOpenStatic, adLockOptimistic)

        'Connection à la base de données Access
        AccessCn = New ADODB.Connection
        AccessCn.Open("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                       "Data Source=" & MaBase)

        Csv_CN.Execute("SELECT * INTO [" & NomTable & "] IN '" & _
            MaBase & "' From [" & FichCSV & "]", nbEnr)

        ' ouverture de la connection(à partir du répertoire de l'application)
        conn "provider microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\MaBase.mdb;"
        cnx = New OleDbConnection
        cnx.ConnectionString = conn
        cnx.Open()

        sql = "select Gachées.* from Gachées"
        cmd = New OleDbCommand(sql)
        dta = New OleDbDataAdapter(cmd)
        cmd.Connection() = cnx

        'chargement du DataSet à partir du DataAdapter                  
        dta.Fill(dts, "Gachées")

        'chargement de la DataTable à partir du DataSet                 
        dtt = dts.Tables("Gachées")

        'affichage des données dans le datagrid 
        Detail.SetDataBinding(dts, "Gachées")

    End Sub


Je doit donc insérer une fonction me permettant de supprimer les séparateur des points csv.
A quel moment dois-je l'insérer?
comment faire?

On ma conseillé la fonction Split() mais je ne vois pas comment m'en servir ici.
Merci pour toutes réponses.
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
27 janv. 2011 à 12:20
Décidément tu es fâché avec les catégories, VB 2010 n'est pas VB6.

Bon ton code.
Si j'ai bien compris ton fichier SA01218.csv est un fichier CSV DONC un fichier texte. Alors pourquoi l'ouvres-tu avec le moteur Jet qui est celui des Bases Access ?

Ouvres-le plutôt comme un fichier Texte (en VB6, on pourrait utilise le File Scripting Object, mais je ne sais pas s'il existe toujours en VB 2010. Ensuite tu le lis ligne par ligne et tu traites celles-ci à l'aide la fonction Split() pour dispatcher chaque instance de ce tableau dans le champ correspondant de ta table.

Calade
0