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 :

Souci avec création d'un fichier accdb lié a une appli .net [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut Souci avec création d'un fichier accdb lié a une appli .net
    Bonjour a tous,
    En espérant être dans la bonne section
    Voila, je rencontre un problème avec la création et l’utilisation d’une petite bdd liée a un soft que l’on développe au boulot.
    Une fois généré, ce soft s’installe via un .exe et doit créer un fichier nommé ophtalmo.accdb dans un rep contenu sur le nas du boulot
    (nas\calculateur\bdd) pour le path
    J’ai donc fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ' Si la base n'existe pas on insère une base vide par code
            ' La base est sur le reseau de l'utilisateur
            BddPath = "\\nas\Calculateur\bdd" 		‘chemin
            fichbase = BddPath & "\Ophtalmo.accdb"			‘nom du fichier accdb
            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BddPath & "\Ophtalmo.accdb"
            If System.IO.File.Exists(fichbase) = False Then
                If CreateAccessDatabase(fichbase) = False Then Exit Sub
            End If
    Avec la fonction CreateAccessDatabase suivante :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    Public Function CreateAccessDatabase(ByVal DatabaseFullPath As String) As Boolean
            Dim cat As New ADOX.Catalog()
            Dim tbl1 As New ADOX.Table
            Dim tbl2 As New ADOX.Table
            Try
                cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BddPath & "\Ophtalmo.accdb")
                ' Création de la table Praticiens
                With tbl1
                    .Name = "Praticiens"
                    ' le seul champ de cette table
                    .Columns.Append("Praticien", ADOX.DataTypeEnum.adVarWChar, 50)
                End With
                cat.Tables.Append(tbl1)
     
                ' Création de la table Consultations
                With tbl2
                    .Name = "Consultations"
                    ' les champs de la BDD 
                    .Columns.Append("praticien", ADOX.DataTypeEnum.adVarWChar, 50)
                    .Columns.Append("day", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("nom", ADOX.DataTypeEnum.adVarWChar, 50)
                    .Columns.Append("prenom", ADOX.DataTypeEnum.adVarWChar, 50)
                    .Columns.Append("naissance", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("age", ADOX.DataTypeEnum.adVarWChar, 3)
                    .Columns.Append("oeil", ADOX.DataTypeEnum.adVarWChar, 2)
                    .Columns.Append("S", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("C", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("Axe", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("sc", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("cc", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("ac", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("dva", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("add", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("nva", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("K1", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("K2", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("QI", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("Pachy", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("ACD", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("AL", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("AD", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("Pseudophake", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("Pupilmeso", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("Pupilphoto", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("Pupilmax", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("SL", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("QL", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("Q1et2", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("Epsilon", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("QT", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("Qideal", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("QF", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("deltaQ", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("KIMAGE", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("TS", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("relift", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("version", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("flagimage", ADOX.DataTypeEnum.adVarWChar, 1)
                    .Columns.Append("qileft", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("qiright", ADOX.DataTypeEnum.adVarWChar, 10)
                    .Columns.Append("deltaqi", ADOX.DataTypeEnum.adVarWChar, 10)
                End With
                cat.Tables.Append(tbl2)
                Return True
     
            Catch Excep As System.Runtime.InteropServices.COMException
                messageaff = "Database building Error"
                infoaff = "Information"
                MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Warning)
                Return False
            Finally
                cat = Nothing
            End Try
    End Function
    Je rencontre le souci suivant :
    A l’installation, j’ai le message
    "Database building Error"
    et bien sur, aucun fichier accdb n’est crée
    J’essaye depuis plusieurs jours de comprendre le souci mais rien de rien.
    Je ne vois pas ce qui peut empêcher cette création.
    J’ai essayé d’autres chemins réseau, et même de situer le accbd dans « mes documents » pour voir (BddPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))

    Ca ne fonctionne pas non plus

    Pourriez vous me donner un petit coup de main ?
    Merci beaucoup

    Ps : je précise que les champs ont été vérifiés et sont corrects

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Pourquoi ne pas afficher les détails de Excep ?
    En pas à pas quelle ligne te fait tomber dans le catch ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    Bonjour _Ez3kiel
    figures toi que j'essaye mais je rame a comprendre depuis que j'ai VS2012
    Y'a t'il quelque chose de différent dans le pas a pas sur cette version ?
    En fait, la je fais "deboguer" ==> "pas a pas detaillé"
    il me donne la prochaine instruction qui va etre executée qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Visiondeloin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    je clique sur continuer et la j'ai la msgbox qui s affiche "Database building error"
    Puis plus rien. Impossible de continuer a appuyer sur suivant comme le montre l'image ci dessous.



    En arretant le deboggage, j'ai le message suivant :
    Une exception de première chance de type 'System.Runtime.InteropServices.COMException' s'est produite dans Calculateur.exe
    Le thread '<Sans nom>' (0x440) s'est arrêté avec le code 0 (0x0).
    Le thread '<Sans nom>' (0x1790) s'est arrêté avec le code 0 (0x0).
    Le thread '<Sans nom>' (0xa84) s'est arrêté avec le code 0 (0x0).
    Le thread '<Sans nom>' (0x1598) s'est arrêté avec le code 0 (0x0).
    Le thread '<Sans nom>' (0xd5c) s'est arrêté avec le code 0 (0x0).
    Le programme '[4832] Calculateur.vshost.exe: Managé (v4.0.30319)' s'est arrêté avec le code -1 (0xffffffff).
    De même si je fais F5 j'ai le msgbox "Database building error" qui s'affiche, puis le logiciel se lance et rien ne se passe dans mon vs2012 (pour info c'est la version express que j'ai)

    Je fais mal qq chose ? ou alors je ne sais pas ou mettre mes points d'arret peut être ?

    Merci de ton aide

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Dans la fonction CreateAccessDatabase
    il faudrait afficher le message de l'exception récupéré par la variable Excep (Excep.Message) ce qui donnerait un peu plus d'info.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Catch Excep As System.Runtime.InteropServices.COMException
                messageaff = "Database building Error : "
                infoaff = "Information"
                MessageBox.Show(messageaff & Excep.Message, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Warning)
                Return False
    (Sinon, à priori le code semble correct, fonctionne chez moi en local ainsi qu'avec Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)); droits d'accés ? )


    Pourquoi passer un paramètre DatabaseFullPath à la function CreateAccessDatabase pour ensuite écrire "Data Source=" & BddPath & "\Ophtalmo.accdb".
    Il vaut mieux écrire "Data Source=" & DatabaseFullPath.

    Je ne sais pas si c'est toujours le cas avec la version 2012, mais dans les autres versions les exceptions non gérées ne sont pas levées dans un Form_Load. Il faut donc placer un Try ... Catch dans le load de la form (Visiondeloin_Load).
    Ne sachant pas si le bout de code qui appele la fonction DatabaseFullPath
    ' Si la base n'existe pas on insère une base vide par code etc ...
    est englobé dans un Try Catch


    En complément d'info
    Normalement vous avez ajouté la référence Microsoft ADO Ext. 2.8 for DDL ... et fait un Imports ADOX
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    bonjour rv26t
    alors effectivement j'ai bien ajouté la référence Microsoft ADO Ext. 2.8 for DDL et fait un "Imports ADOX"
    Ce que je ne comprends pas c'est que ce code fonctionnait encore il y a quelque mois. Les seules choses touchées ont été l'ajout de champs dans le accdb. Cela pourrait au pire provoquer un souci a l'enregistrement de datas dans le fichier mais pas a la création de l'accdb (il se crée si il n'en existe pas d'autre dans le path)
    L'erreur peut elle être ailleurs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    il faudrait afficher le message de l'exception récupéré par la variable Excep (Excep.Message) ce qui donnerait un peu plus d'info.
    je veux bien mais comment je fais ? j'ai l'impression que le debug ne fonctionne pas comme avant

    Cela pourrait il venir du fait que je ne travaille pas en local mais via teamviewer ?

  6. #6
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Citation Envoyé par Attila54 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    il faudrait afficher le message de l'exception récupéré par la variable Excep (Excep.Message) ce qui donnerait un peu plus d'info.
    je veux bien mais comment je fais ? j'ai l'impression que le debug ne fonctionne pas comme avant
    r26t te l'a montré juste après cette phrase :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      Catch Excep As System.Runtime.InteropServices.COMException
                messageaff = "Database building Error : "
                infoaff = "Information"
                MessageBox.Show(messageaff & Excep.Message, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Warning)
                Return False

    Pour le pas à pas tu appuies sur F11 le débugger se place sur la 1ére ligne appelé et ensuite tu re-appuies sur F11 pour passer à la ligne suivante et F11 celle d'après et ainsi de suite, ça te permet de voir le parcours effectué par la machine.

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par Attila54 Voir le message
    De même si je fais F5 j'ai le msgbox "Database building error" qui s'affiche, puis le logiciel se lance et rien ne se passe dans mon vs2012
    Et d'ou vient ce message ?

    De cette partie de votre code (fonction CreateAccessDatabase) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Catch Excep As System.Runtime.InteropServices.COMException
                messageaff = "Database building Error"
                infoaff = "Information"
                MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Warning)
                Return False
    Seulement cela n'est pas suffisant pour nous donner des infos.

    Citation Envoyé par Attila54 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    il faudrait afficher le message de l'exception récupéré par la variable Excep (Excep.Message) ce qui donnerait un peu plus d'info.
    je veux bien mais comment je fais ?
    Donc remplacer la partie de votre code indiqué au dessus par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Catch Excep As System.Runtime.InteropServices.COMException
                messageaff = "Database building Error : " & Excep.Message
                infoaff = "Information"
                MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Warning)
                Return False
    Dans mon post précédant je l'avais placé à un endroit différent, (et _Ez3kiel vous l'avez mis en évidence en vert) mais cela revient au même.
    Puis faire F5; Voir le message ...
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  8. #8
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    honte a moi, je n'avais absolument pas vu
    & Excep.Message
    et du coup je ne comprenais pas la différence entre mon code et le tien.
    Ma presbytie s'aggrave ...
    Je teste cela en debut d'am
    Merci

  9. #9
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    Alléluia tout fonctionne correctement
    Alors je ne sais pas ce qui s'est passé
    J'ai troqué VS2012 Express contre VS 2012 Pro. De la, j'ai pu rajouter la référence Microsoft.Office.Interop.Excel (que je ne trouvais pas ds la version express
    J'ai modifié mon code en ajoutant
    & Excep.Message
    pour avoir plus de details et je suis passé en debug pas a pas et ...... tout a fonctionné sans souci, me reconstruisant mon accdb et exploitant mes fichiers excel

    Je ne sais pas vraiment ce qui c'est passé ni meme pourquoi cela fonctionne maintenant, mis à part le fait que je sois passé sous VS 2012 Pro.

    Par contre un tout petit souci qui est le suivant :
    si je rajoute imports ADOX, j'ai un souci au niveau de ce code qui permet d'ajouter un praticien a la liste existante :

    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
    Private Sub ajouterpraticien_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles AJOUTERPRATICIEN.KeyDown
            Dim Modif As Boolean = False
            If e.KeyCode = Keys.Enter Then
                ' ajout d'un nouveau praticien (la suppression se fera dans la base de données)
                AJOUTERPRATICIEN.Text = AJOUTERPRATICIEN.Text.ToUpper
                AJOUTERPRATICIEN.Text = AJOUTERPRATICIEN.Text.Trim(" "c)
                If AJOUTERPRATICIEN.Text <> "" Then
                    If AJOUTERPRATICIEN.Items.Contains(AJOUTERPRATICIEN.Text) = False Then
                        AJOUTERPRATICIEN.Items.Add(AJOUTERPRATICIEN.Text)
                        Modif = True
                    End If
                End If
            End If
            ' on sauvegarde dans la base
            If Modif = True Then
                If AJOUTERPRATICIEN.Items.Count > 0 Then
                    ' écriture dans la base 
                    Dim sqltxt As String = "Insert into Praticiens values('" & AJOUTERPRATICIEN.Text & "')"
                    Using cmd As New OleDbCommand(sqltxt, con)
                        Try
                            con.Open()
                            cmd.ExecuteNonQuery()
                            con.Close()
                            AJOUTERPRATICIEN.BackColor = Color.LightSlateGray
                        Catch ex As Exception
                            messageaff = "An error occurred during the writing access of the customers'list"
                            infoaff = "Error writing file"
                            MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Warning)
                        End Try
                    End Using
                End If
            End If
        End Sub
    Le message d'erreur est :
    'Keys' est ambigu, importé des espaces de noms ou des types 'System.Windows.Forms, ADOX'.
    Sans imports ADOX tout fonctionne pourtant bien donc ca rate un peu a ce niveau du code :
    If e.KeyCode = Keys.Enter Then
    ...
    Merci bien

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

Discussions similaires

  1. [suphp] Souci avec les droits des fichiers
    Par Blount dans le forum Apache
    Réponses: 2
    Dernier message: 04/01/2009, 19h41
  2. Soucis de création base Oracle : fichier oratab manquant
    Par Leeloo_Multiboot dans le forum Oracle
    Réponses: 0
    Dernier message: 18/04/2008, 11h26
  3. Souci avec création de liste
    Par talggir dans le forum Général VBA
    Réponses: 2
    Dernier message: 29/04/2007, 19h12
  4. [MySQL] Création d'un fichier xml à partir d'une table
    Par astrolane dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/12/2006, 23h12
  5. [VB6] Soucis avec Création de label dynamique
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 19/06/2006, 18h55

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