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 :

Importer datatable dans fichier excel via oledb


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Apprenti en informatique
    Inscrit en
    Décembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Apprenti en informatique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Importer datatable dans fichier excel via oledb
    Bonjour,
    Pour que ce soit clair je vais expliquer en gros ce que je dois faire:
    J'ai une feuille excel rempli de données que j'importe avec oledb dans une datatable, ensuite je fais plusieurs modifications dessus puis je dois réimporter ces modifications dans le fichier excel.
    En cherchant sur internet j'ai trouvé plusieurs solutions mais aucune n'a vraiment fonctionner. Celle que me parait la plus adapter ces celles là.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            'oda étant le oledbDataAdapter utilisé pour importer le fichier excel dans la datatable
            oda.UpdateCommand = New OleDbCommandBuilder(oda).GetUpdateCommand()
            oda.Update(excelTable)
    Malheureusement je reçois cette erreur:
    Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.

    Il faut donc ajouter une clé primaire à la datatable, clé primaire qui est donc sensé être unique, hors, dans ce fichier excel j'ai des données qui proviennent de deux bases mélangées donc aucune colonne n'aura qu'une fois la même valeur.
    Rajouter une colonne dans la datatable et la feuille excel numéroté de 0 à X et selectionner cette colonne en tant que clé primairepourrait fonctionner?
    Pour importer dans la datatable je n'ai pas eu besoin de choisir une colonne qui serait la clé primaire pourquoi en faisant l'inverse oui... Vous avez une idée de comment corriger ce problème?

    Merci d'avance.

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 51
    Points : 74
    Points
    74
    Par défaut
    Malheureusement CommandBuilder à besoin d'une clé primaire défini dans la database pour pouvoir généré la logique de l'update.

    Tu peux seulement utilisé le CommandBuilder quand tout c'est élément sont vrai:

    - Ton select provient d'une seule Table
    - Ta table à une clé primaire de défini
    - Ta clé primaire est inclut dans le sélect.

    Trouver l'info : ici

  3. #3
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Pour continuer sur ce qu'a dit Buzzak.

    Rajouter une colonne dans la datatable et la feuille excel numéroté de 0 1 à X et selectionner cette colonne en tant que clé primaire pourrait fonctionner?
    Oui

    Pour importer dans la datatable je n'ai pas eu besoin de choisir une colonne qui serait la clé primaire pourquoi en faisant l'inverse oui... Vous avez une idée de comment corriger ce problème?
    Justement, parce que quand tu fait un select sur un ensemble de donnée, on s'en moque de savoir qui est qui (enfin, en gros), il récupère juste les données demandées (normalement, la clé primaire fait partie des données).
    Par contre, quand tu fais un update, tu cherche à mettre à jour ta source de donnée (le fichier excel dans ton cas) avec des données que tu as manipuler, triturer, modifier dans ton programme. Pour savoir qui est qui, il a besoin de pouvoir identifier chaque ligne de données de manière unique, et ainsi mettre à jour les lignes de ton fichier sans risque.
    Un petite chose encore, la clé primaire ne doit jamais être modifiable/modifiée.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Apprenti en informatique
    Inscrit en
    Décembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Apprenti en informatique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Merci pour l'explication, mais, j'ai rajouté ça pour rajouter la clé primaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim columns(1) As DataColumn
            columns(0) = excelTable.Columns("PrimaryKey")
            excelTable.PrimaryKey = columns
     
            oda.UpdateCommand = New OleDbCommandBuilder(oda).GetUpdateCommand()
    Mais je reçois toujours la même erreur , bizarrement un moment je recevais une autre erreur mais j'arrive pas à la reproduire... En utilisant : excelTable.PrimaryKey.Count il me sort clairement "1" donc cela veut bien dire qu'une clé primaire est défini. je dois mettre à jour 3 colonnes environ (même si je préférerais mettre toute la base à jour...), il y a moyen de faire la commande facilement à la main?

    Normalement je devrais pas avoir de soucis, car si je suis vos indications pour la commande builder:
    0- Ton select provient d'une seule Table. Oui, enfin dans mon cas d'une seule feuille excel voilà la commande que j'utilise pour tout récupérer SELECT *, * From [" + sheetName + "$]- Ta table à une clé primaire de défini. Oui je viens de le faire plus haut.
    - Ta clé primaire est inclut dans le sélect. Comme mon sélect récupère tout elle y est forcément, d'ailleurs j'ai même tester de récupérer les valeurs et cela fonctionne.

  5. #5
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    En fait non ça ne marchera pas en ajoutant simplement une colonne que tu déclare en PK

    Tu pourra trouver ici un exemple de code qui reflète bien ce que tu cherche à faire.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Apprenti en informatique
    Inscrit en
    Décembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Apprenti en informatique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Dommage, ça facilitait pas mal le travail ^^ C'est toi qui t'étais trompé ou c'est moi qui ai mal interprété qu'on pouvait le faire?

    merci pour le lien, on dirait que je vais pouvoir m'amuser , je vais essayer de reproduire l'exemple chez moi.
    Merci encore.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/12/2012, 09h47
  2. [Toutes versions] Importer données dans fichier Excel via macro VBA
    Par JEREMY01 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/07/2012, 23h13
  3. Import d'un fichier Excel dans une base de données MySql via POI
    Par intel42 dans le forum Développement Web en Java
    Réponses: 8
    Dernier message: 27/07/2011, 16h24
  4. [SP-2007] Importation Annuaire dans fichier Excel
    Par Thibau dans le forum SharePoint
    Réponses: 7
    Dernier message: 23/07/2009, 22h16
  5. [C#] importation d'un fichier Excel via un webform
    Par kroukse dans le forum ASP.NET
    Réponses: 6
    Dernier message: 08/10/2007, 16h48

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