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 :

création de fichier dbf par interface window form


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2006
    Messages : 63
    Points : 67
    Points
    67
    Par défaut création de fichier dbf par interface window form
    Bonjour.


    J'essaie de créer des fichiers en dbase à la volée à partir d'un csv, créer dans VB.
    J'ai pris la solution "passer par un dataset" qui me semblait bien sympathique et permettait au passage de montrer ça dans un datagridview

    Mais je me trouve bloqué depuis 1h et je me retourne vers vous pour pas continuer à chercher pour rien.


    Voici la situation actuelle :

    l'extraction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Dim fs As New FileStream(fileName, FileMode.Open, FileAccess.Read)
            Dim r As New StreamReader(fs)
            r.BaseStream.Seek(0, SeekOrigin.Begin)
            r.ReadLine()
            Dim datas() As Object()
            While r.Peek > -1
                datas = r.ReadLine.Split(";")
     
                For i As Integer = 0 To ligne.Length - 1
                    If ligne(i) = "" Then
                        datas(i) = DBNull.value
                    End If
                Next
                t.Rows.Add(datas)
                Dim test = t.Rows.Item(t.Rows.Count - 1)
            End While
     
            r.Close()
            r.Dispose()
            fs.Close()
            fs.Dispose()
    ma dataTable (t) est dans mon dataset et est typé pour accueillir mes données au mieux (quand je mets tout en String, ça passe, car un String vide est passable, mais pas un entier vide, et j'aimerai que les colonnes soient typées convenablement)

    Mais là, il ne veut pas m'accepter mon DBNull sous prétexte que j'ai un array de string .... (oui, la vache me l'a changé au passage du split).
    J'ai essayer de reconstruire un arraylist, mais du coup c'est mon datarow qui prend mal le résultat.
    J'ai besoin de ces nul car certaines valeurs entière doivent être nulles et non 0.

    Ensuite viens la sauvegarde en dbf.
    J'ai donc mon dataset, et je veux créer le fichier dbf. Mais pas grand chose ne fonctionnent.

    Sur ce coup là, je cherche encore une piste.



    Si vous avez des idées, je vous remercie beaucoup.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2006
    Messages : 63
    Points : 67
    Points
    67
    Par défaut
    mea culpa, le premier soucis était facile à réglé, c'était tout bête (un arraylist mais surtout pas oublié de le réinitialisé dans la boucle, où avais-je la tête).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    While r.Peek > -1
                datas = New ArrayList
                'découpe chaque ligne selon les ; du csv
                ligne = r.ReadLine.Split(";")
                ' pour chaque donnée, si elle est vide, pointer dbnull sinon, les numériques ne vont pas passer
                For i As Integer = 0 To ligne.Length - 1
                    If ligne(i) = "" Then
                        datas.Add(System.Convert.DBNull.Value)
                    Else
                        datas.Add(ligne(i))
                    End If
                Next
                ' ajout les données dans la table
                t.Rows.Add(datas.ToArray)
            End While
    Mais j'ai toujours pas de piste pour la création de dBase.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Points : 390
    Points
    390
    Par défaut
    Bonjour,

    La chaîne de connexion pour du *.dbf

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\folder;Extended Properties=dBASE IV;User ID=Admin;Password=;
    Ensuite tu utilise ADO.Net de façon classique avec juste un petit changement
    quand tu ouvre ta connexion tu précise le fichier DBF. Car comme tu l'auras remarqué on indique seulement le répertoire qui contient les fichiers dbf dans la chaîne de connexion.

    Ensuite pour créer un fichier DBF il suffit d'utiliser la commande CREATE TABLE sql. Pour les type de données DBF voir ici

    http://www.clicketyclick.dk/database...ata_types.html


    Désolé je n'ai pas d'exemples de code sous la main (c'est les vacances !!).

    NB: ça sent le shape file ...

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2006
    Messages : 63
    Points : 67
    Points
    67
    Par défaut
    Merci beaucoup, c'est déjà une belle piste.

    J'étais en fait très mal parti à mettre dans la chaine de connexion le nom du fichier.

    Je teste ça de suite



    [EDIT]

    en effet, ça fonctionne super bien comme ça.
    Sauf pour la déclaration des colonne apparement, elle passe en version longue.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Private Sub createFile(ByVal fromTable As String, ByVal toTable As String, ByVal cn As OleDbConnection)
     
            Dim t As DataTable = ds.Tables.Item(fromTable)
            Dim colonne As String = ""
            Dim colonneList As String = ""
            Dim colonneName As New ArrayList
            For Each c As DataColumn In t.Columns
                colonne += c.ColumnName + " "
                colonneList += c.ColumnName + ","
                colonneName.Add(c.ColumnName)
                Select Case c.DataType.FullName
                    Case "system.Int32"
                        colonne += "Integer"
                    Case "System.Decimal"
                        colonne += "Float"
                    Case "System.DateTime"
                        colonne += "DateTime"
                    Case Else
                        colonne += "TEXT(250)"
                End Select
     
                colonne += ","
            Next
            colonne = colonne.Substring(0, colonne.Length - 1)
            colonneList = colonneList.Substring(0, colonneList.Length - 1)
            cn.Open()
            Dim commTable As New OleDbCommand("Drop table " + toTable, cn)
            commTable.ExecuteNonQuery()
            Dim query As String = "Create Table " + toTable + " (" + colonne + ")"
            commTable = New OleDbCommand(query, cn)
            commTable.ExecuteNonQuery()
     
            Dim values As String
            For Each r As DataRow In t.Rows
                values = ""
                For i As Integer = 0 To colonneName.Count - 1
                    If r.Item(colonneName(i)).ToString = "" Then
                        values += "null,"
                    Else
                        values += "'" + r.Item(colonneName(i)).ToString + "',"
                    End If
     
                Next
                values = values.Substring(0, values.Length - 1)
                Dim commInsert As New OleDbCommand("Insert Into " + toTable + " (" + colonneList + ") Values (" + values + ")", cn)
                commInsert.ExecuteNonQuery()
            Next
     
     
            cn.Close()
            cn = Nothing
        End Sub

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 13/03/2014, 15h07
  2. [Débutant] Création d'une instance pour les windows form oui ou non?
    Par cmo1979 dans le forum VB.NET
    Réponses: 3
    Dernier message: 28/06/2013, 13h39
  3. [10gR2] Suppression de fichier dbf par mégarde
    Par PoichOU dans le forum Administration
    Réponses: 16
    Dernier message: 05/04/2013, 11h01
  4. Modifier mon interface Windows form
    Par charouel dans le forum Windows Forms
    Réponses: 7
    Dernier message: 11/01/2010, 12h23
  5. Afficher un fichier excel dans un Windows Form
    Par Ibn Rochod dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/07/2009, 18h44

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