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

Accès aux données Discussion :

VB.NET 2008 Update sans PK ?


Sujet :

Accès aux données

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien en numérisation
    Inscrit en
    Juillet 2002
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien en numérisation

    Informations forums :
    Inscription : Juillet 2002
    Messages : 338
    Points : 155
    Points
    155
    Par défaut VB.NET 2008 Update sans PK ?
    bonjour à tous!

    Je commence à coder en mode non connecté. Lorsque je regarde les tutoriels et les livres sur ADO.NET non connecté et la commande UPDATE je vois toujours du code pour une table qui a une clé unique, ou PK si vous aimez mieux.

    J'ai réussi à afficher des infos avec le dataset, dataAdapter et le IEnumerator. Tout va bien pour celà.

    Ou je commence à m'arracher les cheveux c'est lorsque je dois modifier un enregistrement UNIQUE dans une table sans PK

    J'ai essayé du code, mais j'ai l'impression que c'est impossible en mode non connecté........


    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
     
     
            Dim strCon$ = CStr("provider=microsoft.jet.oledb.4.0;" & "data source= " & Chemin_Acces_BD & "\" & "BDAccess.mdb;")
            Cn = New OleDb.OleDbConnection(strCon)
     
            Cn.ConnectionString = strCon
            Cn.Open()
            CmdR = Cn.CreateCommand() 'Creation de commande
            CmdR.CommandText = "select Nom_Admin, Passwd_Admin from admin WHERE Nom_admin = '" & Me.Txt_Nom_Admin.Text.ToString & "'" ' Creation de la requete SQL"
            Try
                ' Extraire l'enregistrement courant
                DtSet = New DataSet
                DtAdapteur = New OleDb.OleDbDataAdapter
                DtAdapteur.SelectCommand = CmdR
                DtSet.Tables("admin").Rows(0).BeginEdit() ' ca plante ici!!!!
                DtRow = DtSet.Tables("admin").Rows(0)
                'Modifier les valeurs des champs en  récupérant le contenu des TextBox
                DtRow("nom_admin") = Me.Txt_new_UserName_Admin.Text
                DtRow("passwd_admin") = Me.Txt_Confirmation_New_PassAdmin.Text
                'Pour modifier les valeurs changées dans le DataAdapter
                cmdBuilder = New OleDb.OleDbCommandBuilder(DtAdapteur)
                'Mise à jour
                DtAdapteur.Update(DtSet, "Admin")
                Cn = Nothing
                CmdR = Nothing
                DtAdapteur = Nothing
                'Objet déconnectée
                DtSet = Nothing
                DtTable = Nothing
                DtRow = Nothing
     
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Information)
                Cn = Nothing
                CmdR = Nothing
                DtAdapteur = Nothing
                'Objet déconnectée
                DtSet = Nothing
                DtTable = Nothing
                DtRow = Nothing
     
            End Try
            Cn = Nothing
            CmdR = Nothing
            DtAdapteur = Nothing
            'Objet déconnectée
            DtSet = Nothing
            DtTable = Nothing
            DtRow = Nothing
    Comme vous voyez dans le code j'ai rajouté un commentaire dans le code afin de vous indiquez à quel endroit que ça plante.

    L'erreur est la suivante :
    La référence d'objet n'est pas définie à une instance d'objet
    Si vous pouvez m'aidez à comprendre ce qui se passe, ça serait très apprécié.

    Merci!

    AngelEvil

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Cette erreur n'a rien à voir avec le fait que la table n'ait pas de clé primaire, c'est simplement que la table admin n'existe pas encore dans le DataSet à ce stade... Commence par faire un Fill avec le DataAdapter, ou alors ajoute manuellement la table au dataset

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien en numérisation
    Inscrit en
    Juillet 2002
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien en numérisation

    Informations forums :
    Inscription : Juillet 2002
    Messages : 338
    Points : 155
    Points
    155
    Par défaut
    Rebonjour.

    J'ai rajouté le fill pour mettre dans DataSet la table Admin.

    Ca ne bug plus dans le code, mais l'update ne fonctionne pas.

    J'ai rajouté du code et ça donne ceci
    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
     
            Dim strCon$ = CStr("provider=microsoft.jet.oledb.4.0;" & "data source= " & Chemin_Acces_BD & "\" & "BDAccess.mdb;")
            Cn = New OleDb.OleDbConnection(strCon)
     
            Cn.ConnectionString = strCon
            Cn.Open()
            CmdR = Cn.CreateCommand() 'Creation de commande
            CmdR.CommandText = "select Nom_Admin, Passwd_Admin from admin WHERE Nom_admin = '" & Me.Txt_Nom_Admin.Text.ToString & "'" ' Creation de la requete SQL"
     
                ' Extraire l'enregistrement courant
                DtSet = New DataSet
                DtAdapteur = New OleDb.OleDbDataAdapter
                DtAdapteur.SelectCommand = CmdR
                DtAdapteur.Fill(DtSet, "admin")
     
     
                DtSet.Tables("admin").Rows(0).BeginEdit() ' ca plante ici!!!!
                DtRow = DtSet.Tables("admin").Rows(0)
                'Modifier les valeurs des champs en  récupérant le contenu des TextBox
                DtRow("nom_admin") = Me.Txt_new_UserName_Admin.Text
                DtRow("passwd_admin") = Me.Txt_Confirmation_New_PassAdmin.Text
                'Pour modifier les valeurs changées dans le DataAdapter
                cmdBuilder = New OleDb.OleDbCommandBuilder(DtAdapteur)
                'Mise à jour
                DtAdapteur.Update(DtSet, "Admin")
                Cn = Nothing
                CmdR = Nothing
                DtAdapteur = Nothing
                'Objet déconnectée
                DtSet = Nothing
                DtTable = Nothing
                DtRow = Nothing
    Merci de m'éclairer

    AngelEvil!

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    C'est parce que tu n'as pas mis de EndEdit avant l'Update pour terminer le BeginEdit

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien en numérisation
    Inscrit en
    Juillet 2002
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien en numérisation

    Informations forums :
    Inscription : Juillet 2002
    Messages : 338
    Points : 155
    Points
    155
    Par défaut
    J'ai pris le temps de regarder des tutoriels et la FAQ et je suis perdu et les exemples essaient plutôt de tout montrer dans une page web au lieu de démontrer du code de A à Z pour modifier.

    J'ai même regardé dans un livre pour ADO.NET et je suis perdu....

    Connaissez-vous un exemple de code en mode non connecté avec une BD Access [U] qui explique le code pour modifier. Du code simple sans tous les exemples d'ajouts et de suppression ? Juste du code pour MODIFIER ....

    Comme ça j'aurai au moins une base pour un exemple de modification.

    J'ai fait le code en mode connecté pour les modifs, ajouts, suppression. Le reste du code est en mode non connecté. J'aimerais que toute les fonctions soient en mode non connectées. Voilà la raison de mon acharnement à réussir a faire du code en mode non connecté.

    Mais est-ce que les commandes pour VB2008 Express ADO.NET sont bien du 2.0 ou du 3.5 ? Si c'est du 3.5 est-ce qu'il y a une différence par rapport à la version 2.0 ????

    Merci!

    AngelEvil

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Tu as essayé la correction que je t'ai proposée ?

    Tu as regardé ce tutoriel ?
    http://dotnet.developpez.com/articles/ado2/vbnet/

    Citation Envoyé par angelevil Voir le message
    Mais est-ce que les commandes pour VB2008 Express ADO.NET sont bien du 2.0 ou du 3.5 ? Si c'est du 3.5 est-ce qu'il y a une différence par rapport à la version 2.0 ????
    Ca existait déjà en 2.0 et ça n'a pas changé en 3.5

  7. #7
    Membre habitué
    Homme Profil pro
    Technicien en numérisation
    Inscrit en
    Juillet 2002
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien en numérisation

    Informations forums :
    Inscription : Juillet 2002
    Messages : 338
    Points : 155
    Points
    155
    Par défaut
    Bonjour et merci de votre réponse.

    J'ai rajouté la ligne permettant de faire le EndEdit après les deux lignes de codes qui modifie les deux champs et lorsque je fais la trace ca m'envoie dans Exception parce que c'est un SelectCommand. Dans plusieurs exemples de tutoriels et dans le livre que j'utilise pour le .NET et l'ADO.NET je vois un Selectcommand et non un UpdateCommand.

    Coudont je sais lire, mais je ne comprends pas pourquoi ça fonctionne pour eux, mais pas pour moi ?!?!!?!?!?!?!??!!??!?!?!?!?!?!?!

    Je vais regarder le tutoriel et coller le code dans un projet vierge. je verrais le fonctionnement.

    AngelEvil

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Si tu mets un BeginEdit, il faut aussi mettre un EndEdit... mais de toutes façons tu n'as pas besoin de faire BeginEdit, ça marche aussi bien sans.

    Essaie de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DtAdapteur.Update(DtSet, "Admin")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DtAdapteur.Update(DtSet, "admin")
    ("a" minuscule)

Discussions similaires

  1. VB.NET 2008 Express et Update
    Par angelevil dans le forum Accès aux données
    Réponses: 2
    Dernier message: 02/01/2009, 02h15
  2. [VB.NET] Datagrid Update
    Par b_lob dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/05/2006, 11h51
  3. Réponses: 5
    Dernier message: 24/01/2006, 21h02
  4. Requête UPDATE sans effet
    Par Death83 dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/01/2006, 02h23
  5. [VB.NET] Pb update d'un datagrid
    Par don313 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/06/2005, 09h21

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