IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[VB.NET] Erreur avec BD (Access)


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Points : 80
    Points
    80
    Par défaut [VB.NET] Erreur avec BD (Access)
    Bonjour à tous,

    J'ai une petite question à vous poser, je suis en train de faire une application sous VB express qui fonctionne avec une base access 2003.

    J'ai un formulaire A qui affiche un datagridview lié à une table, il permet l'ajout.
    Ce formulaire est ouvert par le bouton "Ajout" du fomulaire B

    Mon probleme :

    Form B ouvert

    je clique sur le bouton "Ajout" >> ouverture du formulaire A (avec le datagrid)

    j'ajoute des données, je clique sur "Valider" >> enregistrement des nouvelles données et fermeture du formulaire A

    (Le form B est toujours ouvert)

    je re clique sur le bouton Ajout

    >>>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Modifications non effectuées: risque de doublons dans champs index, clé principale ou
    relation interdisant les doublons. Modifiez les données des champs contenant les doublons, enlevez ou
    redéfinissez l'index pour permettre les doublons et recommencez.
    Voilà cett magnifique erreur se produit ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim DAdapt As OleDbDataAdapter
                Dim DSet As New DataSet
     
                DAdapt = New OleDbDataAdapter(command)
                DAdapt.SelectCommand.Connection = con
                command.Connection() = con
                DAdapt.Fill(DSet, "Personne")      <<--- C'est ici que ça se déclenche
                DTable = DSet.Tables("Personne")
                Dim DTAV As New DataView
                command.Connection.Open()
                DTAV.Table = DTable
                DataPersNiv.DataSource = DTAV
                command.Connection.Close()
                DataPersNiv.AutoResizeColumns()


    Je ne comprend pas pourquoi elle se déclenche puisqu'à ce moment là je n'insére rien dans ma table, on est toujours dans le "load" du formulaire.

    Si vous avez la moindre idée, ou proposition merci d'avance !!

  2. #2
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Le code que tu postes ne permet pas d'expliquer cette erreur --> A mon avis, tu as du résiduel de la form de MAJ du DGV qui traine.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  3. #3
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Il faut verifier votre table Personne Car il existe un champ le dans Qui est primary Key; et lorsque Vous saisire une valeur double dans ce champ vous aurez cette erreur. Alor la solution est que rendre le champ de Ce Primary Key dans votre formulaire 'Enable = true ' et Creer un methode qui vas créer Automatiquement cette Valeur ....

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Points : 80
    Points
    80
    Par défaut
    Bonjour,

    Pour la clef primaire de ma table c'est un champ num auto et donc quand j'insere une nouvelle ligne je ne donne pas de valeur à ce champ. C'est la base de données qui lui en donne une automatiquement.


    Pour la mAj de mon Datagrid, c'est fait avec le bouton valider du second form qui le ferme également.

    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
     
            Dim DTAVMaj As New DataView
            Dim DTARV As DataRowView
            Dim lire As OleDbDataReader
            DTAVMaj.Table = DTable
            Dim lot As String
     
    DTAVMaj.RowStateFilter = DataViewRowState.Added Or DataRowState.Modified
                For Each DTARV In DTAVMaj 'dtarv contient la ligne ajoutée, modifiée ou supprimée
     
                    Select Case DTARV.Row.RowState
                        Case DataRowState.Added
                            command.Connection.Open()
                            command.CommandText = "select IdLot From Lot Where Nom = '" & DTARV.Row.Item(11) & "'"
                            Dim red As OleDbDataReader
                            red = command.ExecuteReader
                            red.Read()
                            lot = red.GetValue(0)
                            red.Close()
                            command.CommandText() = "INSERT INTO Personne (Nom, Prenom, RaisonSociale, Entite, Adresse, CP, Ville, Tel, Fax, Mail)" _
                            & " VALUES ('" & DTARV.Row.Item("Nom") & "', '" & DTARV.Row.Item("Prenom") & "', '" & DTARV.Row.Item("RaisonSociale") & "'," _
                            & " '" & Replace(DTARV.Row.Item("Entite"), "'", "''") & "','" & DTARV.Row.Item("Adresse") & "','" & DTARV.Row.Item("CP") & "'," _
                            & " '" & DTARV.Row.Item("Ville") & "','" & DTARV.Row.Item("Tel") & "','" & DTARV.Row.Item("Fax") & "'," _
                            & " '" & DTARV.Row.Item("Mail") & "','" & lot & "')"
                            command.ExecuteNonQuery()
                            command.CommandText() = "select max(IdPersonne) from Personne"
                            lire = command.ExecuteReader
                            lire.Read()
                            idpe = lire.GetValue(0)
                            lire.Close()
                            nom = DTARV.Row.Item("Nom")
                            prenom = DTARV.Row.Item("Prenom")
                            rs = DTARV.Row.Item("RaisonSociale")
                            ent = DTARV.Row.Item("Entite")
                            command.Connection.Close()
     
                        Case DataRowState.Modified
                            command.Connection.Open()
                            command.CommandText = "select IdLot From Lot Where Nom = '" & DTARV.Row.Item(11) & "'"
                            Dim red As OleDbDataReader
                            red = command.ExecuteReader
                            red.Read()
                            lot = red.GetValue(0)
                            red.Close()
                            command.CommandText = "UPDATE Personne SET Nom = '" & DTARV.Row.Item("Nom") & "', Prenom = '" & DTARV.Row.Item("Prenom") & "'," _
                            & " RaisonSociale = '" & DTARV.Row.Item("RaisonSociale") & "', Entite = '" & Replace(DTARV.Row.Item("Entite"), "'", "''") & "'," _
                            & "Adresse = '" & DTARV.Row.Item("Adresse") & "', CP = '" & DTARV.Row.Item("CP") & "', Ville = '" & DTARV.Row.Item("Ville") & "'," _
                            & "Tel = '" & DTARV.Row.Item("Tel") & "', Fax = '" & DTARV.Row.Item("Fax") & "', Mail = '" & DTARV.Row.Item("Mail") & "'," _
                            & "IdLot = '" & lot & "'"
                            command.ExecuteNonQuery()
                            command.Connection.Close()
                    End Select
                Next
     
     
                Dim selec As DataGridViewSelectedRowCollection
                selec = DataPersNiv.SelectedRows
                For Each lignes As DataGridViewRow In selec 'Insere dans G toutes les lignes selectionnées par l'utilisateur
                    command.Connection.Open()
                    If Principal.Modounewo = "newo" Then
                        command.CommandText = "insert into G (IdBat, IdPersonne) values (" & NouveauBat1.IdBat & ", " & lignes.Cells.Item(0).Value & ")"
                    ElseIf Principal.Modounewo = "mod" Then
                        command.CommandText = "insert into G (IdBat, IdPersonne) values (" & ModifBat.numBat & ", " & lignes.Cells.Item(0).Value & ")"
                    End If
                    command.ExecuteNonQuery()
                    command.Connection.Close()
                Next
                Call NouveauBat5.remplirLVmod()
                Me.Close()
     
            End If

    Peut etre que j'ai oublié de fermer qqchose mais je vois pas quoi, si quelqu'un à une idée je suis toutjours preneuse...

    Merci d'avance..

  5. #5
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Je placerai bien un DTable.AcceptChanges aprés les MAJ moi...

    Pour lever les indicateurs nouvelles lignes, lignes modifiés sur les datarows...

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

Discussions similaires

  1. Erreur avec une application C#.net+Access
    Par DJFAZIIA dans le forum Développement Windows
    Réponses: 0
    Dernier message: 03/11/2011, 19h42
  2. [1.1][VB.NET] Travailler avec MS Access
    Par Nayas dans le forum Accès aux données
    Réponses: 2
    Dernier message: 15/11/2006, 20h00
  3. [VB.net 2005] Erreur de connexion à Access
    Par PoZZyX dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/09/2006, 12h01
  4. [VB.NET] Pourquoi ai-je une erreur avec GetResponse ?
    Par Arnaud_B dans le forum Services Web
    Réponses: 1
    Dernier message: 25/07/2006, 17h13
  5. Problème avec l'erreur 3464 sur access
    Par somalien10 dans le forum Access
    Réponses: 10
    Dernier message: 16/05/2006, 09h30

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