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 :

VB.net oleDB et excel [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut VB.net oleDB et excel
    Bonjour à tous et à toutes
    J'ai le problème suivant je fait une petite application qui doit ecrire dans un fichier excel.
    Cependant je ne peut pas utiliser interop car la machine n'a pas le pack office
    Donc du coup les données je pensais les transférer via OleDB.
    Mais j'ai soit une erreur soit Rien.

    Je mets le code suivant

    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
    Public Sub EnregistrementPiece()
            Dim feuille As String = "Feuil1"
            Dim StrSQL As String
            Using Conn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Chemin & ";Extended Properties=""Excel 8.0;HDR=NO;IMEX=1""")
     
                StrSQL = "UPDATE [" & feuille & "]  SET F25=" & CStr(Now) & " WHERE F2 = ' " & MainRMP.CBpiece.SelectedItem.ToString & "'"
                Conn.Open()
                Dim command As New OleDbCommand(StrSQL)
                command.executeqwery()
     
                command.CommandTimeout = 20
     
     
     
                Conn.Close()
     
            End Using
     
        End Sub
    J'ai péché ca un peu partout mais je pense ne pas faire correctement la commande. il faut savoir que le fichier excel n'est pas franchement structuré comme une base de donnée j'ai des colonnes avec un nom en première ligne et d'autres non. Il se peut qua cela soit ma requete qui soit pourrie egalement ??

    Merci pour ceux qui ont l'habitude sur OleDB de me filer un coup de pouce.

  2. #2
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Hello,

    Si je ne raconte pas de trop de bêtises, quand on travaille avec oledb, on ne travaille pas avec les références colonne/ligne mais avec les noms des colonnes. Ce qui veut dire que votre document doit avoir une première ligne d'en-tête car c'est là-dessus que ce base le moteur provider oledb pour exécuter les différents ordre sql.

    source OLEDB.

    Par contre, avec ADO, là on utilise apparemment les références colonne/ligne d'excel.

    source ADO.
    Kropernic

  3. #3
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    C'est possible mais si je ne m'abuse HDR=no dans ma connection OleDB specifie que je n'ai pas d'entète de colonne et du coup c'est spécifié de F1 à FXX? non ?
    j'essaie de faire en source ado mais j'y connais encore moins..

    cdt

  4. #4
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    My bad !

    With Excel workbooks, the first row in a range is the header row (or field names) by default. If the first range does not contain headers, you can specify HDR=NO in the extended properties in your connection string. If you specify HDR=NO in the connection string, the Jet OLE DB provider automatically names the fields for you (F1 represents the first field, F2 represents the second field, and so on).
    J'ai cru que tu voulais écrire dans la cellule F25 avec une condition sur la cellule F2.

    Par contre, j'ai tiré ce passage de la source ADO que j'ai donné précédemment et pas de celle OLEDB .

    Je vais vite faire un test de mon côté. J'ai justement lu un fichier excel avec oledb récemment, vais pouvoir reprendre et adapter facilement.
    Kropernic

  5. #5
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Lire un fichier pas de soucis avec oleDB , c'est écrire dedans.
    J'aurai déjà résolu mon prob si j'avais la possibilité interop.excel mais la non faut que je trouve un autre moyen.

    la j'ai l'erreur suivante sur executenoquery : l'opération doit utiliser une requête qui peut être mis à jour.

    ?
    en tout cas merci de ton aide je continue a creuser

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Hello,

    Je viens de remarque que je n'utilise pas du tout le même provider que toi. Perso, j'utilise "Microsoft.ACE.OLEDB.12.0". Mais ce que ce soit le mien ou le tien, si j'ajoute hdr=no à ma chaîne de connexion, j'ai une erreur comme quoi il ne trouve pas d'ISAM (kezako?) installable...

    Du coup, je ne peux pas tester l'update sans ligne d'en-tête. Avec l'en-tête par contre, ça j'ai pu tester et ça marche bien.

    Un détail mais on ne sait jamais, chez moi je dois suffixer le nom de la feuille par "$". Mais bon, cela te donnerait une erreur disant qu'il ne trouve pas l'objet pas que la requête n'est pas correcte...

    N.B. : Je vais tester en prenant exactement la même chaîne de connexion que toi pour voir.
    Toujours le même problème d'ISAM avec ta chaîne de connexion.
    Kropernic

  7. #7
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Hey, ça faisait longtemps !

    Je viens d'ajouter des colonnes vides (sans en-tête) à mon fichier de test et quand je le lis, oledb me fout bien un Fx (où x est l'indice de la colonne avec la première colonne sur 1) dans les colonnes vides.

    Du coup, tu pourrais retirer ton hdr=no et bosser avec les noms des colonnes pour celles qui en ont un non ? Une idée comme ça...
    Kropernic

  8. #8
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    A présent j'ai l'opération doit utiliser une requête qui peut être mis à jour.
    J'ai l'impression que je ne peut pas modifier de cette manière ou pas acces au fichier.
    Pour le moment je bosse avec une copie du fichier vierge pour mes essais.
    J'ai vu à travers le forum que cette erreur pouvait effectivement venir d'un soucis de droit d’accès au fichier mais pour access.

  9. #9
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Hello,

    J'ai encore regardé un peu et chez moi, ça marche nickel...

    Je charge d'abord le fichier dans un datagridview histoire de le visualiser (car c'était déjà fait) :
    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
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim ofd As New OpenFileDialog
            Dim time1, time2 As Date
            If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
                time1 = Now
                Dim cS As String = "Provider=Microsoft.ACE.OLEDB.12.0;" &
                    "Data Source=" & ofd.FileName & ";" &
                    "Extended Properties=Excel 12.0 Xml;"
                cn = New OleDb.OleDbConnection(cS)
                cn.Open()
                da = New OleDb.OleDbDataAdapter("SELECT * FROM [Sheet1$]", cn)
                ds = New DataSet
                da.Fill(ds)
     
                dgv.DataSource = ds.Tables(0)
                time2 = Now
                cn.Close()
                MsgBox(time2.Subtract(time1).ToString)
            End If
        End Sub
    Ensuite, je fais une modif à la con juste histoire de faire un modif...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Using cmd As OleDbCommand = cn.CreateCommand
                cmd.CommandText = "UPDATE [Sheet1$] SET result = lettre + ' - ' + lettre, F2='hello', F3='world !' WHERE id = 10"
                cn.Open()
                cmd.ExecuteNonQuery()
                cn.Close()
            End Using
        End Sub
    Comme tu peux le voir, je n'ai pas mis hdr=no dans la chaîne de connexion et je travaille avec des colonnes nommées et d'autres non. Par contre attention, si je remplace F2 et F3 par F12 et F13 (par exemple), cela ne fonctionne pas. Je pense (je n'ai pas cherché de source pour confirmer mon hypothèse) que c'est car il n'y a rien à la base dans les colonnes 12 et 13. Du coup, c'est une zone qui "n'existe" pas pour oledb. D'ailleurs, quand le fichier s'affiche dans la datagridview, il n'y a que 5 colonnes. C'est p-e une piste à prendre en considération aussi.

    Sinon, il serait aussi intéressant de voir ce que contient la propriété CommandText de ton objet OleDbCommand juste avant son exécution. Il y a p-e un souci avec la requête.
    Kropernic

  10. #10
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Je vais changer de provider afin de voir si cela fonctionne.
    J'ai egalement regarde dans un dgview , c'est pour çà que je connais le nom des colonnes F5 et F2 de ma requete.
    ma requete est la chaine STRSQL écrite ci dessus dans le premier post.
    En tout cas ce n'est pas un problème de droit d'accés car j'ai vérifie ce matin mon fichier il est coché en droit complet..

    Merci en tout cas du temps que tu me consacres

  11. #11
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par Ashireon Voir le message
    J'ai egalement regarde dans un dgview , c'est pour çà que je connais le nom des colonnes F5 et F2 de ma requete.
    F5 et F2 ? Dans le premier message, tu as F25 dans ton code...
    Citation Envoyé par Ashireon Voir le message
    ma requete est la chaine STRSQL écrite ci dessus dans le premier post.
    On voit effectivement le code qui construit ta requête dans le premier message mais ce que je voudrais voir, c'est la requête une fois construite.
    Kropernic

  12. #12
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Euh pas comprendé ?
    tu veux que je regarde ma variable la tête qu'elle a lorsque je me fout en debug avec un point d'arrêt ?

  13. #13
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Nom : o3uih0.jpg
Affichages : 1914
Taille : 37,2 Ko
    Kropernic

  14. #14
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Nom : variable.png
Affichages : 1434
Taille : 343,4 Ko

    voila l'erreur et la tête de ma requete

  15. #15
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Bon bin là, je donne ma langue au chat...

    Dernier truc qui pourrait être probable, c'est que tu utilises un provider et un version d'excel dans ta chaîne de connexion qui ne sont pas compatible avec la version de ton fichier...
    Kropernic

  16. #16
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Je ne pense pas car je sais allez lire le fichier sans aucun soucis.
    Importer les données avec le même provider et la même connexion oledb...

  17. #17
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Hello,
    Je suis de retour j'étais occupé sur beaucoup e soucis autre dernièrement.
    J'ai essayé avec ton provider .
    Pas de retour d'erreur sur Executenonquery mais rien n'ai fait dans le fichier excel.
    Je pense que c'est du au nom des colonnes mais comme je n'ai rien la première ligne , j'ai tenté de nommé chaque colonne .. toujours rien ca ne fonctionne pas.

    Cordialement

  18. #18
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Bon ca y est ca fonctionne j'ai légèrement modifier le fichier d'origine en enlevant la première ligne du coup il nomme bien les colonnes de F1 A f39..
    Sans soucis et les requêtes fonctionnent.
    je mets en résolus sans jamais trop savoir pourquoi du coup ca marche...

    Merci du coup de pouce en tout cas.

  19. #19
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    A mon avis, il a besoin d'une ligne d'en-tête...
    Kropernic

  20. #20
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Salut,
    Et bien j'en ai faites une ca ne fonctionnait pas , je l'ai supprimée ca fonctionne donc il devait y avoir une merdouille dans le fichier sur la première ligne.
    Ca ne m’étonnerait pas qu'un zouzou aurait coller une formule au fin fond du fichier...
    Je te remercie encore et toujours de ton aide :-)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [ADO.Net][OleDb] Pourquoi ma requête access ne fonctionne pas?
    Par Bapt.ice dans le forum Accès aux données
    Réponses: 6
    Dernier message: 05/05/2006, 17h19
  2. [VB.NET] Importation données Excel pour alimenter BDD Sql Server
    Par Aphrauditte dans le forum Windows Forms
    Réponses: 5
    Dernier message: 03/05/2006, 16h24
  3. [MFC] OLEDB et Excel
    Par Capnader dans le forum MFC
    Réponses: 3
    Dernier message: 22/04/2005, 18h41
  4. Définitions SQL*Net / OLEDB
    Par Spoutnik dans le forum Oracle
    Réponses: 2
    Dernier message: 21/02/2005, 13h50
  5. [VB.NET] [Winform] DataGrid Excel et CheckBox
    Par mic56 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/06/2004, 15h10

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