Problem de cle primaire

Signaler
Messages postés
21
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
11 juin 2015
-
Messages postés
21
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
11 juin 2015
-
Bonjour
pour pas etre trop bavard voila mon problem
jai cette erreur
quand j essaye de metre a jour ma base apres une modification:
a génération SQL dynamique de UpdateCommand n'est pas prise en charge pour un SelectCommand qui ne retourne pas des informations de colonne clé.
d apres qlq recherche jai compris que jai pas de cle primaire sur ma base access
alors jai essayer de cree une cle jai cette reponce sa:
un index ou une clé principale ne peut pas contenir une valeur null
et :
Vous avez dépassé le nombre maximum de colonnes utilisées dans un tableau ou le nombre maximum de verrous pour un seul fichier.
en fin de compt
jai essayer d augmenter la taille sur regedit mais sa rien donner
jai tout jour les meme erreur
alors jai cree une nouvelle base de donner externe (qui vien de mon fichier excel)
et jai laisser acceser donne la cle primaire qui est le ID
mais on manupulan sa sur le debug jai cette ereur la
sur la fenetre d' éxecution apres une simple recherche dans ma base
voila la commande de la connecion sur ma base

cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\docbib\livrs1.mdb"

et voila ma recherche juste la recherche
str "Select * from bib Where NumLivre '" & TextBox1.Text & "'"
            da = New OleDbDataAdapter(str, cn)
            da.Fill(dt)

et quand je clik sur recherche il me donne l la dernier erreur
svp aider moi
merci d avance
PS1:je suis un debutant merci
PS2: si le sujet et pas dans sa place je demande au moderateur de le deplace merci

13 réponses

Messages postés
135
Date d'inscription
lundi 17 juin 2002
Statut
Membre
Dernière intervention
20 juillet 2013

Dim Connection As New OleDb.OleDbConnection()
Dim AdapTContact As OleDb.OleDbDataAdapter
Dim DtSet As New DataSet()
Dim Sql As string
 
'Parametrage de la chaine de connection
Connection.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & _
"data source= " & Application.StartupPath & "" & "testbdd.mdb;"
 
‘ouverture de la connection
Connection.Open()
 
‘definition de la requete
Sql="select * from NomdemaTable", Connection
 
‘definition du DataAdapter
AdapTContact=new OleDbDataAdapter (Sql, connection)
 
' remplissage du dataset
AdapTContact.Fill(DtSet, "NomdemaTable")
 
‘Fermeture de la connection
Connection.Close()


puis pour une recherche

'definition de notre table
            Dim Matable As DataTable
            Matable = DtSet.Tables("
AdapTContact.Fill(DtSet, "NomdemaTable")

            'cree un objet dataview pour filtrer les enregistrements
            Dim filtre As New DataView(Matable)
            'les etoiles sont falcutatives
            ' si tu cherche un mot exact tu les enleves
             ' si cherche un mot commencant par , tu les laisse
            filtre.RowFilter = "nom like'*" & recherche & "*'"
             'le nombre d'enregistrement retourné par la recherche
            Dim nbr As Integer
            nbr = filtre.Count 
           'pour toute les lignes trouvé  
           dim i as integer
           for i=0 to nbr
            'affiche les valeurs
            Tcleunik.Text = filtre.Item(i)(0)  'i la ligne, 0 le champs
            Tnom.Text = filtre.Item(i)(1)
            etc..
            next i
Messages postés
135
Date d'inscription
lundi 17 juin 2002
Statut
Membre
Dernière intervention
20 juillet 2013

quoi qu'il en soit , remplace ton signe "=" par "like"
Messages postés
21
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
11 juin 2015

merci de votre reponce tresorsdevie
mais le problem et pas dans la recherche ou la fichage
le problem et dans le update
la recherche et l afficache se fait a merveille
mais dans le update
tous a commance a me dir que ya pas de cle
Erreur
a génération SQL dynamique de UpdateCommand n'est pas prise en charge pour un SelectCommand qui ne retourne pas des informations de colonne clé.

ensuite jai essayer de fair une cle et accesse me dis
Erreur:
un index ou une clé principale ne peut pas contenir une valeur null
et :
Vous avez dépassé le nombre maximum de colonnes utilisées dans un tableau ou le nombre maximum de verrous pour un seul fichier.
la jai fait une autre base avec la Clé ofert par accesse qui est le ID
et c la ou la dernier erreur s affiche
Erreur
Une exception de première chance de type 'System.Data.OleDb.OleDbException' s'est produite dans System.Data.dll
alors ou est le problem............??????
Messages postés
135
Date d'inscription
lundi 17 juin 2002
Statut
Membre
Dernière intervention
20 juillet 2013

faudrait nous mettre un peu plus de code (ton la partie de ton update en autre) ,
il doit y avoir une erreur de ce coté

voici un exemple de mise a jour
Connection.Open()
Dim CmdBuild As OleDbCommandBuilder
CmdBuild = New OleDb.OleDbCommandBuilder(AdapTContact)
AdapTContact.InsertCommand = CmdBuild.GetInsertCommand()
AdapTContact.Update(DtSet, "Nomdelatable")
Connection.Close()


a savoir
1. GetUpdateCommand (Obtient l'objet Command utile pour effectuer une mise à jour dans la base de donnée)
2. GetInsertCommand (Obtient l'objet Command utile pour effectuer une insertion dans la base de donnée)
3. GetDeleteCommand (Obtient l'objet Command utile pour effectuer une suppression dans la base de donnée)


Pour mettre ensuite à jour des données et gérer le transfert de ces données modifiées dans notre base, nous devons nous interresser aux proprietés citées ci-dessous de l'objet DataAdapter

1. UpdateCommand (envoie une requete de modification)
2. InsertCommand (envoie une requete d'ajout)
3. DeleteCommande (envoie une requete de suppression)

sinon, envoie ton code
Messages postés
21
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
11 juin 2015

REsalut
bon voila mon code de la fenetre de chercher un numdelivre et cliker sur le bouton preté si il est disponible
Imports System.Data
Imports System.Data.OleDb
Imports System.Net
Imports Microsoft.VisualBasic
Imports System.Data.Common

Public Class Form1
    Private dts As New DataSet
    Private cmd As OleDbCommand
    Private rownum As Integer
    Private dtr As DataRow
    Dim cn As New OleDbConnection
    Dim dt As New DataTable
    Dim da As New OleDbDataAdapter




    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      
        If TextBox1.Text = "" Then
            MessageBox.Show("Le champ est vide,  Vous devez selectionez un choix de recherche et remplir le champ vide", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
            cn.Close()
            Exit Sub
        End If

        Try
            Button2.Enabled = False
            dt.Clear()
            cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\docbib\livrs1.mdb"

            DataGridView1.DataSource = Nothing

            cn.Open()

            Dim str As String
            str "Select * from bib Where NumLivre '" & TextBox1.Text & "'"
            da = New OleDbDataAdapter(str, cn)
            da.Fill(dt)

            If rownum > dt.Rows.Count - 1 Then
                MessageBox.Show("Il n'existe aucunes données pour le Num DE livre", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
                TextAuteur.Text = ""
                TextCollection.Text = ""
                TextEdition.Text = ""
                TextTitre.Text = ""
                TextEntréeSortie.Text = ""
                TextNumLivre.Text = ""
                TextISBN.Text = ""
                TextCouleur.Text = ""

                cn.Close()

                Exit Sub
            Else

                'Sinon affichage des données dans les textbox
                DataGridView1.DataSource = dt
                Me.TextAuteur.Text = dt.Rows(rownum).Item("Auteur")
                Me.TextCollection.Text = dt.Rows(rownum).Item("Collection")
                Me.TextEdition.Text = dt.Rows(rownum).Item("Éditions")
                Me.TextTitre.Text = dt.Rows(rownum).Item("Titre")
                If dt.Rows(rownum).Item("Entrée/Sortie") = "Nondisponible" Then
                    TextEntréeSortie.BackColor = Color.OrangeRed

                    TextEntréeSortie.ForeColor = Color.Yellow
                    Button2.Enabled = False

                Else
                    TextEntréeSortie.BackColor = Color.Green
                    TextEntréeSortie.ForeColor = Color.Yellow
                    Button2.Enabled = True
                End If
                Me.TextEntréeSortie.Text = dt.Rows(rownum).Item("Entrée/Sortie")
                Me.TextNumLivre.Text = dt.Rows(rownum).Item("NumLivre")
                Me.TextISBN.Text = dt.Rows(rownum).Item("ISBN")
                Me.TextCouleur.Text = dt.Rows(rownum).Item("Couleur")
                Button1.Enabled = False
                Button1.BackColor = Color.GhostWhite
            End If


        Catch ex As Exception



        End Try



    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim tex As String
        tex = "Nondisponible"
        da.Fill(dts, "bib")
        'récupération de la ligne dans le datarow
        dtr = dts.Tables("bib").Rows(rownum)
        'modification des donées
        Me.TextEntréeSortie.Text = tex
        TextEntréeSortie.BackColor = Color.OrangeRed

        TextEntréeSortie.ForeColor = Color.Yellow
        dtr("Entrée/Sortie") = Me.TextEntréeSortie.Text
        dtr("Auteur") = Me.TextAuteur.Text
        dtr("Collection") = Me.TextCollection.Text
        dtr("ISBN") = Me.TextISBN.Text
        dtr("NumLivre") = Me.TextNumLivre.Text
        dtr("Couleur") = Me.TextCouleur.Text
        dtr("Éditions") = Me.TextEdition.Text
        dtr("Titre") = Me.TextTitre.Text


        Dim CmdBuild As OleDbCommandBuilder
        CmdBuild = New OleDb.OleDbCommandBuilder(da)



        da.Update(dts, "bib")

        Exit Sub

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        TextBox1.Text = ""
        TextAuteur.Text = ""
        TextCollection.Text = ""
        TextEdition.Text = ""
        TextTitre.Text = ""
        TextEntréeSortie.Text = ""
        TextNumLivre.Text = ""
        TextISBN.Text = ""
        TextCouleur.Text = ""
        dts.Clear()
        DataGridView1.DataSource = Nothing
        dt.Clear()
        cn.Close()
        Button1.Enabled = True
        Button1.BackColor = Color.Firebrick
        Button2.Enabled = True
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Button2.Enabled = False

    End Sub
End Class

voila le code complet
l erreur: a génération SQL dynamique de UpdateCommand n'est pas prise en charge pour un SelectCommand qui ne retourne pas des informations de colonne clé. vien sur cette ligne
da.Update(dts, "bib")

si possible me corigé
merci d avance pour votre aide
Messages postés
135
Date d'inscription
lundi 17 juin 2002
Statut
Membre
Dernière intervention
20 juillet 2013

bon,
c'est bien un probleme de clé primaire,
elle est bien définie? sur quel champs?

la clé primaire doit etre imperativement retourné dans ta requete de selection de ton dataapter , la requete ne doit pas utilisé de relation ni de jointure, si ce n'est pas le cas tu auras cette erreur.

je voit que ta requete est un simple select *
donc pour moi tu n'a pas de clé primaire dans ta table.
pourtant tu me dit que tu en a rajouter une..
l'a tu bien fait , voit tu ta petite clé en face de ton champs en mode creation de ta table sous access?

tiens moi au courant, et ne cherche pas plus loin c'est sur et certain que c'est la clé primaire, cherche plutot de ce coté
Messages postés
21
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
11 juin 2015

RESalut
Comme jai dit dans le premier message c un problem de clé
et jai expliquer se que jai fait pour fair une clé primaire
ma table avez pas de clé alors jai essayer de lui fair une mais le ACCesse me sort des erreur:
un index ou une clé principale ne peut pas contenir une valeur null
et :
Vous avez dépassé le nombre maximum de colonnes utilisées dans un tableau ou le nombre maximum de verrous pour un seul fichier.
Messages postés
135
Date d'inscription
lundi 17 juin 2002
Statut
Membre
Dernière intervention
20 juillet 2013

un index ou une clé principale ne peut pas contenir une valeur null

veut dire que tu veut mettre une clé primaire dans une colonne (champ) qui a une de ses lignes vides
avant de d'affecter la clé primaire a ton champ, ouvre ta table et complete toute les lignes vides de ta colonne.
ensuite affect ta clé primaire a ta colonne et la sa marchera

en tout cas revoit la structure de ta table ,elle n'a pas l'air au point, ce n'est pas un probleme avec vb a moins que tu cree ta table directement depuis le code..
Messages postés
21
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
11 juin 2015

RE Bonjour
voila pour la clé y aver un champ vide
alors je les corrigé mais jai eu cette ERReur:
Cette erreur peut apparaître si :
Vous avez dépassé le nombre maximum de colonnes autorisées dans un tableau ou le nombre maximum de verrous pour un seul fichier.
La propriété Index d’un champ est passée de Oui (avec doublons) à Oui (sans doublon) alors que des doublons figurent déjà dans le tableau.
Si le nombre maximal de verrouillages par fichier a été dépassé, vous pouvez l'augmenter en modifiant l'entrée de registre correspondante pour l'ordinateur local. Cependant, ce choix n'est pas recommandé.
Recherchez la valeur de registre MaxLocksPerFile à l'aide l'Éditeur du Registre de Windows (regedit.exe), puis augmentez sa valeur. La valeur MaxLocksPerFile est stockée dans la clé suivante :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\ACE
Lorsque vous modifiez une valeur du Registre Windows, rien ne garantit que ce changement ne va pas endommager le registre et rendre Windows inutilisable.  Les modifications du Registre se font à vos risques et périls.  Il est donc fortement recommandé d'effectuer une copie de sauvegarde du Registre avant toute modification.
Si vous avez modifié la propriété Index d’un champ et que le tableau contient des doublons, vous pouvez restaurer la valeur précédente de la propriété Index ou supprimer les enregistrements doubles du tableau.
alorsd que doi je fair svp meme si jai deja essayer d augmenter comme il disent dans ler egedit
mais c toujour la meme erreur
Merci encore de votrer aide presieu
Messages postés
135
Date d'inscription
lundi 17 juin 2002
Statut
Membre
Dernière intervention
20 juillet 2013

non non pas besoin de faire ca,
ce que ca veut dire, c'est que sur la colonne ou tu as mis ta cle primaire , il y a deux fois la meme valeur.

une cle primaire, veut dire une clé unique si tu as exemple
3 colonne et que ta clé primaire est sur la colonne 1 comme ceci

1 chris vb
2 steph vb
3 nico c+
2 charles C+

tu va avoir l'erreur que tu rencontre car sur la colonne 1 , tu as 2 fois le numero 2, une cle primaire est un identifiant UNIQUE. c'est celui que l'on se sert pour modifier ou supprimer une ligne, c'est pour ca que tu as un probleme avec l'update , tu dit par exemple que tu veut modifier la ligne portant la clé unique 2, et la il rencontre un probleme car il trouve 2 ligne portant le numero 2 , tu comprend?
Messages postés
21
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
11 juin 2015

Salut
jai bien compris
mais je ne sais pas koi fair!!!!!!!!!!!!!!!!!
jai cherche partout sur internet mais jai pas eu de reponce jusqua mtn
merci encore
Messages postés
21
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
11 juin 2015

Dalut

voila mon nouveau problem
jai reuissie a cree une nouvelle base avec mon excel et j les integrer sou accesse et jai mis la cle primaire
qui est mon NumLivre tous va bien jusqua la compilation
je click sur le bouton recherche et jai cette erreur
Une exception de première chance de type 'System.InvalidOperationException' s'est produite dans System.Data.dll
et sans la cle prmaire ma recherche se fait parfaitement
mais la mise a jour me block
que doi je fair la je suis blocker
merci de votre aide
Messages postés
21
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
11 juin 2015

Salut
alors e se que qlq un pourais me guider dans ces problemes la
je cherche tout jour la solution
merci