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 :

Manipulations autour d'une base de données ACCESS


Sujet :

VB.NET

  1. #121
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2020
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2020
    Messages : 117
    Points : 17
    Points
    17
    Par défaut
    J'ai un truc bizarre, l'ajout d'image fonctionne mais il enregistre l'image dans la table T_Fichier au lieu de la table T_Image ?

    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
    75
    76
    77
    78
    79
     
    Private Function AjouterImage(ByRef Id As Integer, ByVal XIdAstuce As Integer, Limage As String) As Boolean
            Dim SQL As String
     
            ParametroConexion()
            MaConexion.Open()
            MaCommande = MaConexion.CreateCommand()
     
            SQL = "INSERT INTO T_Image (XIdAstuceImage, Image) VALUES(@LeXId, @Limage); "
            MaCommande.CommandText = SQL
     
            MaCommande.Parameters.AddWithValue("@LeXId", XIdAstuce)
            MaCommande.Parameters.AddWithValue("@Limage", Limage)
     
            If MaCommande.ExecuteNonQuery() = 1 Then
                ' Ajout effectué
            Else
                ' Erreur
                MaConexion.Close()
                MaCommande.Dispose()
                Return False
            End If
     
            SQL = " SELECT MAX(IdImage) FROM T_Image"
            MaCommande.CommandText = SQL
            Id = MaCommande.ExecuteScalar()
     
            MaConexion.Close()
            MaCommande.Dispose()
            Return True
        End Function
     
        Private Sub Bp_Ajout_Image_Click(sender As Object, e As EventArgs) Handles Bp_Ajout_Image.Click
            'Verifie si le champs type est remplit
            If Requis() = True Then
                Return
            End If
     
            Dim NomFichier As String
            Dim fichier As String
            Dim CheminFichier As String
            Dim path As String = My.Settings.APP_PATH & "\Images\" & TB_Type.Text & "\" & TB_NomAstuce.Text & "\" 'Crée le repertoire avec le champ Rubrique
            Dim OpenFile As OpenFileDialog = New OpenFileDialog
            If OpenFile.ShowDialog() = Windows.Forms.DialogResult.OK Then
     
                '  La réponse à la boîte de dialogue est plausible et l'utilisateur à pressé <ENTER>.
     
                NomFichier = OpenFile.SafeFileName 'Recuperer uniquement le nom du fichier
                fichier = path & NomFichier
     
                CheminFichier = OpenFile.FileName 'Recupere le chemin du fichier
     
                Dim IdAstuceEnCours As Integer
                IdAstuceEnCours = MesAstuces.Tables(NomTableAstuces).Rows(Me.BindingContext(MesAstuces.Tables(NomTableAstuces)).Position).Item("IdAstuce")
     
                Dim NouvelId As Integer
                ''''If AjouterFichier(NouvelId, IdAstuceEnCours, NomFichier) Then ' reçoit le nouvel ID par ByRef de NouvelId
                ''''    MesAstuces.Tables("TFichier").Rows.Add(NomFichier) ' Si ok, on ajoute au DataTable
                If AjouterFichier(NouvelId, IdAstuceEnCours, NomFichier) Then ' reçoit le nouvel ID par ByRef de NouvelId
                    MesAstuces.Tables("TImage").Rows.Add(NouvelId, NomFichier, IdAstuceEnCours) ' Si ok, on ajoute au DataTable
                End If
                'Création du repertoire
     
                If Directory.Exists(path) Then 'vérifie l’existence du répertoire
                    'Si le répertoire existe il ne fait rien
                Else 'Si le répertoire n'existe pas, il le créer
     
                    Directory.CreateDirectory(path)
     
                End If
                'Copie le fichier vers DBpath avec le nom du fichier ''NomFichier''
                FileCopy(CheminFichier, fichier)
                ''Directory.CreateDirectory(path)
                ''FileCopy(CheminFichier, fichier)
            Else
     
                '  La réponse à la boîte de dialogue ne convient pas.  C'est un <ANNULE>.
            End If
        End Sub

  2. #122
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Normal ...

    Dans Bp_Ajout_Image, tu appelles AjouterFichier au lieu de AjouterImage !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ' ... ... ...
    '            If AjouterFichier(NouvelId, IdAstuceEnCours, NomFichier) Then ' <============= !!!!!!!!!!!
    '                MesAstuces.Tables("TImage").Rows.Add(NouvelId, NomFichier, IdAstuceEnCours) 
    '            End If
     
                If AjouterImage(NouvelId, IdAstuceEnCours, NomFichier) Then ' reçoit le nouvel ID par ByRef de NouvelId
                    MesAstuces.Tables("TImage").Rows.Add(NouvelId, NomFichier, IdAstuceEnCours) ' Si ok, on ajoute au DataTable
                End If
    ' ... ... ...
    Mais tu as oublié de modifier ChargeDetails avec : SELECT * FROM T_Image ....

    Maintenant, c'est moi qui ai un problème de DB et je ne sais pas tester ces corrections . ...

    Dis-moi s'il cela fonctionne chez toi après ces 2 corrections.

    Bonne soirée,


  3. #123
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2020
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2020
    Messages : 117
    Points : 17
    Points
    17
    Par défaut
    Bonjour Phil Rob

    Petit retour sur l’avancement de mon projet,

    J'ai ajouté un combobox Type et la gestion des type dans le formulaire astuce.
    L'ajout et la suppression des fichier fonctionne.
    Par contre j'ai toujours une erreur pour les ajouts d'images malgré les corrections.
    Pièce jointe 586995

    Je joint aussi le projet pour voir ce que tu en pense.

    Bonne journée

  4. #124
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour Resolu,

    Toujours aussi matinal !

    Et bien je vois que ça ne fonctionne pas mieux chez toi que chez moi.
    C'est exactement l'erreur que j'obtiens et là, je ne vois pas. Il n'y a aucune erreur de syntaxe (j'ai testé aussi l'INSERT sans les @paramètres ..., même résultat).

    Le fait que nous obtenions tous les deux la même erreur permet d'exclure la responsabilité d'Access et du système. Le problème se situe bien dans notre projet.
    Dès que possible, aujourd'hui, je vais reporter toutes les procédures dans mon projet de tests.

    Si quelqu'un peu dire pourquoi la fonction AjouterImage ci-dessous donne une erreur de syntaxe sur l'INSERT lors de l'ExecuteNonQuery alors que la fonction suivante AjouterFichier ne donne aucune erreur ...
    Les paramètres passés aux fonctions sont exactement du même type et les tables T_Image et T_Fichier dans la DB ont exactement le mêm schéma, seuls les noms des champs diffèrent.,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        Private Function AjouterImage(ByRef Id As Integer, ByVal XIdAstuce As Integer, LaImage As String) As Boolean
            Dim SQL As String
    '... ... ...
            SQL = "INSERT INTO T_Image (XIdAstuceImage, Image) VALUES (@LeXId, @LaImage);"
            MaCommande.CommandText = SQL
     
            MaCommande.Parameters.AddWithValue("@LeXId", XIdAstuce)
            MaCommande.Parameters.AddWithValue("@LaImage", LaImage)
     
            If MaCommande.ExecuteNonQuery() = 1 Then     ' !!!!!!!!!!!!!   ERREUR DE SYNTAXE SUR LA "INSERT INTO"  ???????????
    '... ... ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       Private Function AjouterFichier(ByRef Id As Integer, ByVal XIdAstuce As Integer, LeFichier As String) As Boolean
            Dim SQL As String
    '... ... ...
           SQL = "INSERT INTO T_Fichier (XIdAstuceFichier, Fichier) VALUES (@LeXId, @LeFichier);"
            MaCommande.CommandText = SQL
     
            MaCommande.Parameters.AddWithValue("@LeXId", XIdAstuce)
            MaCommande.Parameters.AddWithValue("@LeFichier", LeFichier)
     
            If MaCommande.ExecuteNonQuery() = 1 Then    ' !!!!!!!!!!!!!   PAS D'ERREUR
    '... ... ...
    Je t'informe dès que possible ...

  5. #125
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    C'est fait !!!! Yeeeess !
    J'ai gagné une heure de chipos ...

    L'écriture du message précédent m'a remis la logique de diagnostique en place. Sûr que l'erreur n'était pas imputable à Access mais bien à notre application. Cependant il y a une "un intersection" entre cette application et Access : la DB, avec ses tables.
    Comme je le rappelle dans le message, les 2 tables T_Fichier et T_Image sont identiques à l'exception des noms des champs : c'est là qu'était logée cette sa... d'erreur.

    En remplaçant le nom du champ "Image" par "FichierImage" dans la DB et dans les codes, tout fonctionne normalement. L'erreur ? Le mot "Image" désigne un nom de type. En le remplaçant par un autre mot, le problème est résolu.

    Attention, il faut corriger la procédure MontreDetails comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    '... ... ...
            LBImages.DataSource = MesAstuces.Tables("TImage")
            LBImages.DisplayMember = "FichierImage"
    '... ... ...
    Et bien entendu, il faut corriger AjouterImage :
    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
     
        Private Function AjouterImage(ByRef Id As Integer, ByVal XIdAstuce As Integer, LaImage As String) As Boolean
            Dim SQL As String
     
            ParametroConexion()
            MaConexion.Open()
            MaCommande = MaConexion.CreateCommand()
     
            SQL = "INSERT INTO T_Image (XIdAstuceImage, FichierImage) VALUES (@LeXId, @LaImage);"
            MaCommande.CommandText = SQL
     
            MaCommande.Parameters.AddWithValue("@LeXId", XIdAstuce)
            MaCommande.Parameters.AddWithValue("@LaImage", LaImage)
     
            If MaCommande.ExecuteNonQuery() = 1 Then
                ' Ajout effectué
            Else
                ' Erreur
                MaConexion.Close()
                MaCommande.Dispose()
                Return False
            End If
     
            SQL = " SELECT MAX(IdImage) FROM T_Image"
            MaCommande.CommandText = SQL
            Id = MaCommande.ExecuteScalar()
     
            MaConexion.Close()
            MaCommande.Dispose()
            Return True
        End Function
    Je regarderai tout à l'heure le projet que tu as envoyé ce matin avec la ComboBox ajoutée pour les Types.

    Bonne journée ...

  6. #126
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2020
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2020
    Messages : 117
    Points : 17
    Points
    17
    Par défaut
    Merci pour ta rapidité

    Maintenant l'ajout fonctionne.

    Je continue avec la suite

    Peux-tu me dire si je suis sur le bon chemin pour ajouter une nouvelle astuce :

    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
     
    Private Function SauverAstuceType(ByRef Id As Integer, ByVal LeType As String) As Boolean
            Dim SQL As String
            If Requis() = True Then
     
            End If
            ParametroConexion()
            MaConexion.Open()
            MaCommande = MaConexion.CreateCommand()
     
            SQL = "INSERT INTO T_ASTUCEPROG (Mesastuces) "
            MaCommande.CommandText = SQL
            If MaCommande.ExecuteNonQuery() = 1 Then
                ' Ajout effectué
            Else
                ' Erreur
                MaConexion.Close()
                MaCommande.Dispose()
                Return False
            End If
     
            SQL = " SELECT MAX(IdAstuce) FROM T_ASTUCEPROG"
            MaCommande.CommandText = SQL
            Id = MaCommande.ExecuteScalar()
     
            MaConexion.Close()
            MaCommande.Dispose()
            Return True
        End Function
     
    	Private Sub Bp_sauver_Astuce_Click(sender As Object, e As EventArgs) Handles Bp_sauver_Astuce.Click
            'Resultat = 1
            Dim NouvelId As Integer
            If AjouterAstuce(NouvelId, CB_Type.Text) Then ' reçoit le nouvel ID par ByRef de NouvelId
                MesTypes.Tables(NomTableTypes).Rows.Add(NouvelId, CB_Type.Text) ' Si ok, on ajoute au DataTable
                ChargeDonnees()
                MontreDonnees()
            End If
            'Me.Close()
        End Sub

    Bonne journée

  7. #127
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour Resolu,


    Désolé, je n'ai pas trouvé le temps hier pour examiner ton projet. Je viens d'y regarder.

    L'usage de la Combo pour les Type dans le Form des astuces me paraît bien engagé. Quand tu cliques "+" pour le Types, tu ouvres FGestType.
    C'est une excellente idée mais tu as une erreur parce que tu as isolé le remplissage du DataTable dans FGestType. Si tu le réactive, il n'y a plus d'erreur.
    Les difficultés ultérieures viendront selon la gestion que tu voudras. J'attends donc ...
    Pour l'instant, avec ce code en FGestType, ça devrait aller :

    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
     
        Private Sub ChargeDonnees()
     
            If MesTypes.Tables.Count > 0 Then
                MesTypes.Tables.Clear()
            End If
     
            ParametroConexion()
            NomTableTypes = "Types"
     
            Dim UneDataTable As New DataTable
            Dim SQL As String
     
            SQL = "SELECT * FROM T_TYPE;"
     
            Dim MonAdapter As OleDbDataAdapter = New OleDbDataAdapter(SQL, MaConexion)
     
            MonAdapter.Fill(UneDataTable)       ' Ne pas mettre en commentaire !!!
            UneDataTable.TableName = NomTableTypes
            MesTypes.Tables.Add(UneDataTable)
     
            MonAdapter.Dispose()
     
            MaConexion.Close()
     
        End Sub
    Bonne journée,


  8. #128
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2020
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2020
    Messages : 117
    Points : 17
    Points
    17
    Par défaut
    Bonjour Phil Rob

    Normalement la table Type sera utilisée vraiment rarement puisqu'elle sera remplie avec un maximum d'info donc utilisée vraiment si nécessaire.

    Pour l'ajout d'une nouvelle astuce j'ai commencé un truc du genre est--ce la bonne marche a suivre

    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
     
     
    Private Function SauverAstuceType(ByRef Id As Integer, ByVal LeType As String) As Boolean
            Dim SQL As String
            If Requis() = True Then
     
            End If
            ParametroConexion()
            MaConexion.Open()
            MaCommande = MaConexion.CreateCommand()
     
            SQL = "INSERT INTO T_ASTUCEPROG (Mesastuces) "
            MaCommande.CommandText = SQL
            If MaCommande.ExecuteNonQuery() = 1 Then
                ' Ajout effectué
            Else
                ' Erreur
                MaConexion.Close()
                MaCommande.Dispose()
                Return False
            End If
     
            SQL = " SELECT MAX(IdAstuce) FROM T_ASTUCEPROG"
            MaCommande.CommandText = SQL
            Id = MaCommande.ExecuteScalar()
     
            MaConexion.Close()
            MaCommande.Dispose()
            Return True
        End Function
     
    	Private Sub Bp_sauver_Astuce_Click(sender As Object, e As EventArgs) Handles Bp_sauver_Astuce.Click
            'Resultat = 1
            Dim NouvelId As Integer
            If AjouterAstuce(NouvelId, CB_Type.Text) Then ' reçoit le nouvel ID par ByRef de NouvelId
                MesTypes.Tables(NomTableTypes).Rows.Add(NouvelId, CB_Type.Text) ' Si ok, on ajoute au DataTable
                ChargeDonnees()
                MontreDonnees()
            End If
            'Me.Close()
        End Sub
    Bonne journée

  9. #129
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Attention, dans la gestion des Astuces, le but premier du travail sur les types consiste à indiquer quel est le type à lier à l'engistrement de T_ASTUCEPROG en cours (ou au l'enregistrement en cours d'ajout). Il n'y a donc pas lieu de faire un INSERT de seulement un type dans dans T_ASTUCEPROG.

    Les données indispensables à utiliser lors d'un INSERT et lors d'un UPDATE dans T_ASTUCEPROG sont :

    IdAstuce : En cas d'INSERT, il ne figure pas dans la commande INSERT mais il est récupéré par le SELECT qui suit. En cas d'UPDATE (et de DELETE) il est nécessaire à la clause WHERE.
    NomAstuce : Absolument nécessaire (à mon avis), laisser ce champ vide aurait-là le même effet que si on gérait un carnet d'adresses sans enregistrer les noms des personnes.
    XIdTypeAstuce : Donnée obligatoire. C'est la copie de l'ID d'un Type existant qui assure la liaison entre l'enregistrement de T_ASTUCEPROG et celui de T_TYPE.
    Les autres champs, c'est selon l'importance que leur attribues, si tu acceptes qu'il soient vides ou non.

    Donc le ComboBox des Types doit permettre de désigner le type pour CETTE astuce et l'ajout (et modif, et suppression) à programmer, est celui de l'astuce : AjouterAstuce et Bp_Ajout_Astuce, ....

    ...

    Un détail, peut-être devrais-tu modifier MontreComboType comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       Private Sub MontreComboType()
     
            CB_Type.DataSource = MesTypes.Tables(NomTableTypes)
            CB_Type.DisplayMember = "Type"
            CB_Type.ValueMember = "IdType"
     
        End Sub
    Le champ "IdType" est exactement la valeur dont tu as besoin dans l'enregistrement de T_ASTUCEPROG que tu ajoutes ou modifies.

    ...

  10. #130
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2020
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2020
    Messages : 117
    Points : 17
    Points
    17
    Par défaut
    J'ai aussi ajouté ceci au formulaire FgestTypes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Call Frm_Astuces.ChargeComboType()
    Call Frm_Astuces.MontreComboType()

  11. #131
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Cela va te poser des problèmes plus tard : le Form de gestion des astuce appelles le Form de gestion des types qui appelles le Form de gestion des astuces qui appelle ...

    Appeler FGestType à partir de la gestion des astuces est très bien s'il faut ajouter (ou modifier) une astuce avec un type qui n'existe pas encore.
    Si le type existe, il suffit de le choisir dans le Combo.

    Quand le type n'existe pas et que tu ouvres FGestType pour le créer, il suffit de recharger les Type au retour dans la gestion des Form.
    Sous réserve de tests, cela devrait être ± ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       Private Sub Bp_Ajout_Type_Click(sender As Object, e As EventArgs) Handles Bp_Ajout_Type.Click
            FGestTypes.ShowDialog()
    ChargeComboType()
    MontreComboType()
        End Sub
    ...

  12. #132
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2020
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2020
    Messages : 117
    Points : 17
    Points
    17
    Par défaut
    Bonjour Phil Rob

    Pourrais-tu me donner la bonne syntaxe pour l'ajout d'une astuce

    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
     
    Private Function Astuce(ByRef Id As Integer, ByVal e As String) As Boolean
            Dim SQL As String
            If Requis() = True Then
     
            End If
            ParametroConexion()
            MaConexion.Open()
            MaCommande = MaConexion.CreateCommand()
     
            SQL = "INSERT INTO [T_ASTUCEPROG] ( [NomAstuce] )"
            MaCommande.CommandText = SQL
     
     
            If MaCommande.ExecuteNonQuery() = 1 Then
                ' Ajout effectué
            Else
                ' Erreur
                MaConexion.Close()
                MaCommande.Dispose()
                Return False
            End If
     
            SQL = " SELECT MAX(IdAstuce) FROM T_ASTUCEPROG"
            MaCommande.CommandText = SQL
            Id = MaCommande.ExecuteScalar()
     
            MaConexion.Close()
            MaCommande.Dispose()
            Return True
        End Function
     
        Private Sub Bp_Ajout_Astuce_Click(sender As Object, e As EventArgs) Handles Bp_sauver_Astuce.Click
            'Resultat = 1
            Dim NouvelId As Integer
            If SauverAstuce(NouvelId, TB_NomAstuce.Text) Then ' reçoit le nouvel ID par ByRef de NouvelId
                MesTypes.Tables(NomTableTypes).Rows.Add(NouvelId, TB_NomAstuce.Text) ' Si ok, on ajoute au DataTable
                ChargeDonnees()
                MontreDonnees()
            End If
            'Me.Close()
        End Sub
    Merci d'avance
    Bonne journée

  13. #133
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Pourquoi "SauverAstuce" et non "AjouterAstuce" ?

    J'ai renommé ton Button1 en Bp_Ajout_Astuce et j'ai écrit les 2 procédures suivantes :
    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
     
       Private Sub Bp_Ajout_Astuce_Click(sender As Object, e As EventArgs) Handles Bp_Ajout_Astuce.Click
            Dim NouvelId As Integer
            If AjouterAstuce(NouvelId, CB_Type.SelectedValue, TB_NomAstuce.Text, TB_DescripAstuce.Text, RTBCode.Text, RTB_NoteAstuce.Text, RTB_RemAstuce.Text, RTB_CommentAstuce.Text, TB_LienAstuce.Text) Then ' reçoit le nouvel ID par ByRef de NouvelId
                MesTypes.Tables(NomTableAstuces).Rows.Add(NouvelId, CB_Type.SelectedValue, TB_NomAstuce.Text, TB_DescripAstuce.Text, RTBCode.Text, RTB_NoteAstuce.Text, RTB_RemAstuce.Text, RTB_CommentAstuce.Text, TB_LienAstuce.Text) ' Si ok, on ajoute au DataTable
            End If
        End Sub
     
        Private Function AjouterAstuce(ByRef Id As Integer, ByVal XIdType As Integer, Nom As String, Description As String, Code As String, Note As String, Remarque As String, Commentaire As String, Lien As String) As Boolean
            Dim SQL As String
     
            ParametroConexion()
            MaConexion.Open()
            MaCommande = MaConexion.CreateCommand()
            SQL = "INSERT INTO T_ASTUCEPROG (XIdTypeAstuce, NomAstuce, DescripAstuce, CodeAstuce, NoteAstuce, RemAstuce, CommentAstuce, LienAstuce) VALUES(@XIdType, @Nom, @Description, @Code, @Note, @Remarque, @Commentaire, @Lien); "
            MaCommande.CommandText = SQL
     
            MaCommande.Parameters.AddWithValue("@XIdType", XIdType)
            MaCommande.Parameters.AddWithValue("@Nom", Nom)
            MaCommande.Parameters.AddWithValue("@Description", Description)
            MaCommande.Parameters.AddWithValue("@Code", Code)
            MaCommande.Parameters.AddWithValue("@Note", Note)
            MaCommande.Parameters.AddWithValue("@Remarque", Remarque)
            MaCommande.Parameters.AddWithValue("@Commentaire", Commentaire)
            MaCommande.Parameters.AddWithValue("@Lien", Lien)
     
            If MaCommande.ExecuteNonQuery() = 1 Then
                ' Ajout effectué
            Else
                ' Erreur
                MaConexion.Close()
                MaCommande.Dispose()
                Return False
            End If
     
            SQL = " SELECT MAX(IdAstuce) FROM T_ASTUCEPROG"
            MaCommande.CommandText = SQL
            Id = MaCommande.ExecuteScalar()
     
            MaConexion.Close()
            MaCommande.Dispose()
            Return True
        End Function
    J'ai fait ceci en vitesse et sans tester (seulement que ça se compile sans erreur).
    Il te faut vérifier que la table "NomTableAstuces" contient bien tous les champs énumérés, et dans le même ordre, que dans l'appel de AjouterAstuce, que dans l'INSERT, et que dans MesTypes.Tables(NomTableAstuces).Rows.Add(NouvelId, ...
    Si je n'ai pas commis d'erreur à ce niveau, cela devrait fonctionner.
    Je testerai tout à l'heure si j'en ai le temps mais si tu constates un problème, signale-le ...


  14. #134
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    J'ai fait un test rapide, voici la seule correction nécessaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        Private Sub Bp_Ajout_Astuce_Click(sender As Object, e As EventArgs) Handles Bp_Ajout_Astuce.Click
            Dim NouvelId As Integer
            If AjouterAstuce(NouvelId, CB_Type.SelectedValue, TB_NomAstuce.Text, TB_DescripAstuce.Text, RTBCode.Text, RTB_NoteAstuce.Text, RTB_RemAstuce.Text, RTB_CommentAstuce.Text, TB_LienAstuce.Text) Then ' reçoit le nouvel ID par ByRef de NouvelId
                MesAstuces.Tables(NomTableAstuces).Rows.Add(NouvelId, CB_Type.Text, TB_NomAstuce.Text, TB_DescripAstuce.Text, RTBCode.Text, RTB_NoteAstuce.Text, RTB_RemAstuce.Text, RTB_CommentAstuce.Text, TB_LienAstuce.Text) ' Si ok, on ajoute au DataTable
            End If
        End Sub

  15. #135
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2020
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2020
    Messages : 117
    Points : 17
    Points
    17
    Par défaut
    Bonjour Phil Rob

    merci, j'ai testé cela fonctionne.

    Mais après avoir ajouté une astuce faut-il faire un chargedonnée, car j'ai l'impression que le nouveau résultat est en double dans le DGVTout.

    Bonne journée

  16. #136
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour Resolu,

    Tu as l'impression qu'il s'agit d'enregistrement identique parce que tu n'encodes sans doute pas tous les champs pendant les tests.
    De plus, la mise à jour du DataTable provoque automatiquement la mise à jour du DGV. Il s'ensuit qu'après l'ajout, tu retrouve le DGV avec la première ligne sélectionnée et ainsi, tu vois les mêmes infos aux niveaux "Fichier" et "Image". Si tu cliques sur "Dernier", tu verras ces infos ("Fichier" et "Image") correspondant à l'enregistrement que tu viens d'ajouter.

    Vois les 2 illustrations suivantes, la première avant l'ajout d'une 6ème astuce, la seconde après l'ajout :

    Nom : Avant.jpg
Affichages : 133
Taille : 137,9 Ko

    Nom : Apres.jpg
Affichages : 124
Taille : 177,5 Ko


  17. #137
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2020
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2020
    Messages : 117
    Points : 17
    Points
    17
    Par défaut
    Bonjour Phil Rob

    Petit retour sur les modifications que j'ai faites :

    un bouton "Ajouter astuce" qui :
    - Vide tous les champs avant d'introduire les nouvelles données
    - Désactive les boutons de déplacement dans les enregistrements
    - Désactive les boutons ajouter fichier et image (car tant que la nouvelle astuce n'est pas sauvée on ne peu pas ajouter de fichier ou image car on n'a pas encore d' Id pour la nouvelle astuce, corrige moi si je me trompe)

    un bouton "annuler nouvelle astuce" qui :
    - Vide tous champs
    - Réactive les bouton

    un bouton "Enregistrer nouvelle astuce" qui :
    - Enregistre les nouvelles données dans la DB
    - Désactive ensuite le bouton sauver car il faut d'abord utiliser le bouton "ajouter astuce"

    Bonne journée

  18. #138
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Re,

    car tant que la nouvelle astuce n'est pas sauvée on ne peu pas ajouter de fichier ou image car on n'a pas encore d' Id pour la nouvelle astuce, corrige moi si je me trompe
    C'est bien ainsi. A ce propos (liaison entre T_AstuceProg et T_Fichier, et T_Image), lors de la suppression d'un enregistrement Astuce, tous les "Fichier" et " Image" en liaison avec lui doivent être supprimés des tables T_Fichier,et T_Image, faute de quoi ils resteront "orphelins" dans ces tables.

    un bouton "Ajouter astuce" qui :
    - Vide tous les champs avant d'introduire les nouvelles données
    - Désactive les boutons de déplacement dans les enregistrements
    Tu as déjà un bouton "Ajouter astuce". Donc tu pourrais créer un bouton "Prépare nouvelle astuce" qui fait ce que tu envisages. Le bouton "Ajouter astuce" ne ferait rien d'autre que ce qu'il fait pour l'instant. Sauf réactiver les boutons de balayage si tu les désactives dans "Prépare nouvelle astuce".

    Perso, je ne vois pas trop la nécessité de ces modifs. Ce que l'utilisateur fait dans les zones de texte n'est rien. S'il vaux annuler et retrouver l'affichage précédent, il suffit de re-sélectionner la ligne dans le DGV, ou déplacer Suivant-Précédent. Par contre s'il trouve pertinent d'neregistrer, il lui suffit de cliquer "Ajouter astuce".
    Quand tu auras programmer la suppression d'une astuce, il suffira de sélectionner le dernier enregistrement (bouton "Dernier") et cliquer le bouton "Supprimer" pour que l'affaire soit faite. Programmer un "Annuler le dernier" ne fera que charger le Form d'un bouton de plus pour exécuter du code redondant ...

    Bref, tu le comprends, je ne t'encourage pas dans cette voie où tu vas ajouter boutons et codes "inutiles".


  19. #139
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2020
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2020
    Messages : 117
    Points : 17
    Points
    17
    Par défaut
    Merci pour les infos

    Pour les boutons je les ai renommer:
    Le bouton ajouter est en fait comme tu dis "Prépare nouvelle astuce" et le bouton sauver lui équivaut au bouton ajouter de la version précédente.

    Maintenant reste a s’atteler à la suppression et la mise a jour.

    Bonne journée

  20. #140
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2020
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2020
    Messages : 117
    Points : 17
    Points
    17
    Par défaut
    Bonjour Phil Rob
    J'ai essayé quelque chose du genre pour la mise à jour d'une astuce :

    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
     
    Private Function ModifierAstuce(ByRef Id As Integer, ByVal XIdType As Integer, Nom As String, Description As String, Code As String, Note As String, Remarque As String, Commentaire As String, Lien As String) As Boolean
            Dim SQL As String
     
            ParametroConexion()
            MaConexion.Open()
            MaCommande = MaConexion.CreateCommand()
            SQL = "UPDATE T_ASTUCEPROG (XIdTypeAstuce, NomAstuce, DescripAstuce, CodeAstuce, NoteAstuce, RemAstuce, CommentAstuce, LienAstuce) VALUES(@XIdType, @Nom, @Description, @Code, @Note, @Remarque, @Commentaire, @Lien) WHERE (IdAstuce "
            MaCommande.CommandText = SQL
     
            MaCommande.Parameters.AddWithValue("@XIdType", XIdType)
            MaCommande.Parameters.AddWithValue("@Nom", Nom)
            MaCommande.Parameters.AddWithValue("@Description", Description)
            MaCommande.Parameters.AddWithValue("@Code", Code)
            MaCommande.Parameters.AddWithValue("@Note", Note)
            MaCommande.Parameters.AddWithValue("@Remarque", Remarque)
            MaCommande.Parameters.AddWithValue("@Commentaire", Commentaire)
            MaCommande.Parameters.AddWithValue("@Lien", Lien)
     
            If MaCommande.ExecuteNonQuery() = 1 Then
                ' Ajout effectué
            Else
                ' Erreur
                MaConexion.Close()
                MaCommande.Dispose()
                Return False
            End If
     
            SQL = " SELECT MAX(IdAstuce) FROM T_ASTUCEPROG"
            MaCommande.CommandText = SQL
            Id = MaCommande.ExecuteScalar()
     
            MaConexion.Close()
            MaCommande.Dispose()
            Return True
        End Function
     
        Private Sub Bp_modifier_Astuce_Click(sender As Object, e As EventArgs) Handles Bp_modifier_Astuce.Click
            Dim Idencour As Integer
            If ModifierAstuce(Idencour, CB_Type.SelectedValue, TB_NomAstuce.Text, TB_DescripAstuce.Text, RTBCode.Text, RTB_NoteAstuce.Text, RTB_RemAstuce.Text, RTB_CommentAstuce.Text, TB_LienAstuce.Text) Then ' reçoit le nouvel ID par ByRef de NouvelId
                MesAstuces.Tables(NomTableAstuces).Rows.Add(Idencour, CB_Type.Text, TB_NomAstuce.Text, TB_DescripAstuce.Text, RTBCode.Text, RTB_NoteAstuce.Text, RTB_RemAstuce.Text, RTB_CommentAstuce.Text, TB_LienAstuce.Text) ' Si ok, on ajoute au DataTable
            End If
     
        End Sub
    Mais cela n'a pas l'air de fonctionné.


    Si on ne s'entend plus d'ici là, passe de bonne fête.

Discussions similaires

  1. [Débutant] Manipuler une base de données Access en C#
    Par jed72 dans le forum C#
    Réponses: 18
    Dernier message: 18/05/2016, 16h51
  2. Réponses: 3
    Dernier message: 05/09/2015, 20h23
  3. Réponses: 0
    Dernier message: 11/11/2014, 18h08
  4. Réponses: 15
    Dernier message: 25/10/2004, 11h50
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18

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