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 :

UPDATE INSERT table access


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut UPDATE INSERT table access
    Bonjour,

    Je rencontre un problème d'insertion et mise à jour de données pour mon projet. J'ai une base de données ACCESS avec une table "USERS" et une table "USERS_PDM". L'utilisateur doit dans un premier temps ajouter un utilisateur dans la table "USERS" puis ensuite l'ajouter dans la table "USERS_PDM" si l'utilisateur utilise une licence PDM. Je précise que la table "USERS" contient un champs nommée "ID_PDM" qui est la clé primaire de "USERS_PDM" et que ces 2 tables n'ont pas d'association entre elles. J'ai essayé plusieurs solution dont celle ci-dessous mais en vain :

    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
     
            Dim sql_ajouter_pdm As String
            Dim sql_MAJ_user As String
     
            sql_MAJ_user = "UPDATE USERS SET ID_PDM=Val_ID_PDM where ALPS=" & TXT_ALPS_USER.Text & ""
            sql_ajouter_pdm = "INSERT INTO USERS_PDM (ID_PDM,User_Name,CC) VALUES (Val_ID_PDM, Val_User_Name, Val_CC)"
     
            commande_pdm = New OleDb.OleDbCommand(sql_ajouter_pdm, con_pdm)
            commande_user = New OleDb.OleDbCommand(sql_MAJ_user, con_user)
     
            If TXT_ID_PDM.TextLength <> 0 Then
                For k = 0 To TXT_ID_PDM.TextLength - 1
                    If IsNumeric(TXT_ID_PDM.Text(k)) Then
                        TXT_ID_PDM.Clear()
                        MsgBox("Le champ PDM ne doit pas contenir de chiffre")
                        Exit Sub
                    End If
                Next
            Else
                TXT_ID_PDM.Clear()
                MsgBox("Veuillez rentrer un login PDM")
                Exit Sub
            End If
     
            commande_pdm.Parameters.AddWithValue("Val_ID_PDM", TXT_ID_PDM.Text)
            commande_user.Parameters.AddWithValue("Val_ID_PDM", TXT_ID_PDM.Text)
            commande_pdm.Parameters.AddWithValue("Val_User_Name", TXT_NOM_USER.Text & "," & TXT_PRENOM_USER.Text)
            commande_pdm.Parameters.AddWithValue("Val_CC", CB_CC.SelectedItem)
     
            commande_pdm.Connection.Open()
            commande_pdm.ExecuteReader()
            commande_pdm.Connection.Close()
     
            commande_user.Connection.Open()
            commande_user.ExecuteReader()
            commande_user.Connection.Close()
     
            MsgBox("Le nouveau contact PDM a bien été enregistré.")
     
            dts_pdm.Clear()
            dts_user.Clear()
            demarrage_users()
            demarage_pdm()
    Avec cette solution j'ai un message de Type de données incompatible dans l'expression du critère. Quelqu'un pourrait-il m'aider et m'expliquer ?

    Merci par avance,

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    ce message d'erreur signifie qu'il y a un problème de type
    genre si dans un champs nombre tu mets un texte ou si dans un champs texte tu ne donnes pas du texte entre '
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Bonjour et merci pour ta réponse,

    Seulement il y a quelque chose d’illogique. Premièrement, j'ai fait une contrainte pour interdire les chiffres dans ce champs et dans un second temps j'ai introduit des " ' " dans mon champs lors de l'enregistrement. Mais toujours le même message ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    commande_user.Parameters.AddWithValue("Val_ID_PDM", "'" & "TXT_ID_PDM.Text" & "'")

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    détails de la table ? (colonnes et types)
    que contient CB_CC ?

    la requete qui plante est-elle bien celle d'insert ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Tu trouveras les détails des tables en pièce jointe.

    Cb_CC est la table des centre de coûts. chaque utilisateur a un centre de coût et un centre de coût peut avoir plusieurs utilisateurs.

    La requête qui plante est l'update. L'insert marche bien, les données s'ajoutent dans la table "USERS_PDM" mais le champs "ID_PDM" de la table "USERS" ne se met pas à jour.

    Voila, j'espère avoir été clair.

    Merci encore
    Images attachées Images attachées  

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    alps est de type texte
    =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sql_MAJ_user = "UPDATE USERS SET ID_PDM=Val_ID_PDM where ALPS='" & TXT_ALPS_USER.Text & "'"
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Merci beaucoup,

    C'est ok pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql_MAJ_user = "UPDATE USERS SET ID_PDM=' " & TXT_ID_PDM.Text & "' where ALPS='" & TXT_ALPS_USER.Text & "'"

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    merci de cliquer sur en bas de cette page
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Bonjour,

    Je rouvre ce topic car je rencontre encore un problème de mise à jour. Il s'agit toujours de ma table "USERS". J'aimerai pouvoir modifier mon champs 'ALPS' qui est ma clé principale. De plus ce champs 'ALPS' se retrouve dans une autre table nommée 'USERS_CONFIG' qui me sert d'association entre 'USERS' et 'CONFIG'. J'ai dans un premier temps procéder avec cette requête afin de modifier seulement le code ALPS de la table 'USERS'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql_MAJ_user = "UPDATE USERS SET ALPS='" & TXT_ALPS_USER.Text & "',NOM_USER='" & TXT_NOM_USER.Text & "',PRENOM_USER='" & TXT_PRENOM_USER.Text & "',ID_CC= '" & CB_CC.Text & "',Type_contrat_USER= '" & CB_TYPE_CONTRAT_USER.Text & "',CHANTIER_SEDENTAIRE= '" & CB_CHAN_SED.Text & "',STE_FACTURATION= '" & CB_FACTURATION.Text & "',BATIMENT= '" & CB_BAT_USER.Text & "',BUREAU_USER= '" & CB_BUREAU_USER.Text & "',D_ENTRE_SOCIETE= '" & DT_Dentre_user.Text & "',D_SORTIE_SOCIETE= '" & DT_Dsortie_societe.Text & "',ID_Lotus= '" & TXT_IDLOTUS.Text & "',Mail_USER= '" & TXT_MAIL_USER.Text & "',COMMENTAIRE_USER= '" & TXT_COM_USER.Text & "'
    L’événement se termine correctement sans message d'erreur mais la mise du code ALPS ne se fait pas. (Les autres champs marchent)


    J'ai aussi essayer de modifier ma table "USERS_CONFIG" avant de modifier le code ALPS de la table 'USERS' sans mettre à jour le dataset afin qu'il garde en mémoire l'ancien code ALPS. Je précise qu'un utilisateur n'est pas obligé d'avoir un poste informatique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    'requête
    sql_MAJ_config = "UPDATE USERS_CONFIG SET ALPS= '" & TXT_ALPS_USER.Text & "
     
    'modification de la table 'USERS_CONFIG'
            For j = 0 To dts_user_config.Tables("USERS_CONFIG").Rows.Count - 1
                If dts_user.Tables("USERS").Rows(i).Item("ALPS") = dts_user_config.Tables("USERS_CONFIG").Rows(j).Item("ALPS") Then
                    commande_user_config.Parameters.AddWithValue("ALPS", TXT_ALPS_USER.Text)
                End If
            Next
    Comment procéder ?
    Merci d'avance.

    Je fais suivre un jpg en pièce jointe pour mieux comprendre.
    Images attachées Images attachées  

  10. #10
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    un clé primaire par définition ne devrait jamais être modifiée !
    donc revois ton schéma de base de données
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Merci, donc si je veux modifier mon ALPS je suis obligé de mettre une autre clé primaire ... C'est pas super ça ^^

    Merci pour l'info

  12. #12
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    une clé primaire ne doit être utilisée que pour la base de données, elle ne doit jamais être affichée ou utilisée dans une application
    elle ne sert qu'à être un identifiant unique (en général un entier autoincrément) et faire des liens entre les tables

    c'est une des bases pour avoir une base de données performante et intègre
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Bonjour,

    J'ai encore une question en rapport avec votre dernier message.

    J'ai créé un bouton supprimer utilisateur pour supprimer comme son nom l'indique. La suppression marche mais le rafraichissement du dataset ne s'effectue pas. Après la suppression lorsque j'essaye de naviguer entre mes différents utilisateurs. J'ai un message me disant aucune "Aucune ligne à la position" de l'indice ( i ) ou se trouvaient les données supprimées dans ma procédure affichage.

    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
        Private Sub BT_SupUser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_SupUser.Click
            Dim sql_supprimer As String
     
            sql_supprimer = "DELETE from USERS where ALPS ='" & TXT_ALPS_USER.Text & "'"
            commande_user = New OleDb.OleDbCommand(sql_supprimer, con_user)
     
            commande_user.ExecuteReader()
            commande_user.Connection.Close()
     
            MsgBox("L'utilisateur a bien été supprimé")
     
            dts_user.Clear()
            demarrage_users()
     
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'extrait procédure affichage
        Private Sub affichage()
            TXT_ALPS_USER.Text = dts_user.Tables("USERS").Rows(i).Item("ALPS").ToString
            TXT_NOM_USER.Text = dts_user.Tables("USERS").Rows(i).Item("NOM_USER").ToString
    Serait ce un rapport avec l'utilisation d'une clé primaire dans ma base de données ? J'aimerais une fois l'utilisateur supprimé que l'affichage soit sur l'utilisateur précédent.

    Merci par avance.

  14. #14
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    le but de l'utilisation d'un dataset c'est pour que le dataset s'occupe des requetes
    c'est donc dans le dataset qu'il faut supprimer la ligne, puis dire au dataset d'appliquer les modifications sur la base de données

    sinon ExecuteReader sert pour lire des données (SELECT), pour udpate delete et insert ExecuteNonQuery suffit
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    J'ai fait ça mais je sais pas comment appliquer les données au dataset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            dts_user.Tables("USERS").Rows(i).Delete()
     
            MsgBox("L'utilisateur a bien été supprimé")
     
            dts_user.Clear()
            demarrage_users()

  16. #16
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    il ne faut pas le clear et le recharger, il doit y avoir une méthode update ou refresh
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    il n'y a aucune de ces méthodes ^^

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/06/2008, 23h42
  2. ERROR: insert or update on table "ecole" violate
    Par doulel dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 17/04/2006, 21h24
  3. Réponses: 10
    Dernier message: 07/03/2006, 13h30
  4. Réponses: 2
    Dernier message: 23/02/2006, 12h23
  5. insertion d'un type date dans une table access
    Par monstour dans le forum ASP
    Réponses: 7
    Dernier message: 18/06/2004, 16h57

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