Comparer listbox avec la BD

Signaler
Messages postés
52
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
21 juin 2011
-
Messages postés
149
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
16 juillet 2013
-
slt,
svp je veut connaître comment on peut savoir si un element d'un listbox se trouve dans ma base access ou non.
et merci...

10 réponses

Messages postés
540
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
1 février 2013
1
Salut,
tu peux regarder du côté de OleDbDataReader,OleDbCommand avec sa méthode ExecuteReader et ensuite tu compares le résultat avec les élements de ta listbox...

Bonne continuation

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...

Visual Basic .Net is the best
and vb6.0
Messages postés
52
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
21 juin 2011

merci bien pour me rependre, je fait ca pour ne pas ajouter à ma base que les nouveaux élements du listbox,mais tjr m'affiche qu'il y'a des duplication:
 Dim dreader As OleDbDataReader = ocm.ExecuteReader()
        While dreader.Read
            For Each Name As String In Lstexec.Items
                If dreader.Read.ToString = Name Then
                    lancerRequete("INSERT INTO Programs VALUES('" & Name.Replace("'", "''") & "')")
                End If
            Next
        End While
Messages postés
52
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
21 juin 2011

 If dreader.Read.ToString <> Name Then 

c plûtot ca mais mem probléme
Messages postés
149
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
16 juillet 2013
4
Bonjour,

peux tu mettre les parametres de ta commande ocm? (Requete surtout)?
Messages postés
52
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
21 juin 2011

salut
merci pour me repondre, j'espére bien que tu pourra m'aider, mon but réel est de ne pas avoir le mesage d'erreur("il ya des doublons")car j'ai un listbox qui contient des nom des programmes qui seront être bloqué(application de contrôle parental) et chaque foi l'utilisateur peut ajouter un autre program et l'envoyer a la base, mais la listbox déja contienne les autres prog enregistré a la base.
j'espére que tu m'a compris, en tout cas c ca le reste du code que tu demande:
 Dim txtsql As String = "select * from Programs"
        Dim ocn As New OleDbConnection(sconstr)
        Dim ocm As New OleDbCommand(txtsql, ocn)
        ocm.Connection.Open()
        Dim dta As OleDbDataAdapter = New OleDbDataAdapter(ocm)
        Dim dreader As OleDbDataReader = ocm.ExecuteReader()
Messages postés
149
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
16 juillet 2013
4
En fait j'ai relu ton code ton problème, et j'ai remarqué que tu ne faisais pas exactement ce que tu voulais...

Alors essaye ça :

Dim trouvé as boolean = False
For Each Name As String In Lstexec.Items
  Dim dreader As OleDbDataReader = ocm.ExecuteReader()
  While dreader.Read
      If dreader(0).ToString = Name Then
        trouvé = True
      End If
    Next
  End While
  if NOT Trouvé then
    lancerRequete("INSERT INTO Programs VALUES(...)")
Next


Ce code insert tous les elements de la listBox qui ne sont pas dans la base...

En fait dans ton code tu as quelques erreurs:

En premier tu compare tous tes elements de la liste box avec un seul element de la base, tu compare le premier elt de la base avec le premier elt de la liste, puis le premier elt de la base avec le deuxieme elt de la liste, ... si le premier elt de la base et egale au premier elt de la liste alors le deuxieme est forcement different du premier alors qu'il est peut etre deja dans la base... C'est un peu confus, mais j'espere que tu as compris cette erreur...

Ensuite tu fais un "While dreader.read" qui est parfait mais dans cette boucle tu fais un test "If dreader.Read.ToString" qui n'est pas correct puisque le fait de faire ".read" passe à l'elt suivant du dataReader, donc tu zappe un enregistrement sur deux...

Normalement avec le code ci dessus cela devrait aller
Messages postés
149
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
16 juillet 2013
4
Alors il y a une petite erreur (j'ai validé le message avant de le relire...

Dim txtsql As String = "select * from Programs"
Dim ocn As New OleDbConnection(sconstr)
Dim ocm As New OleDbCommand(txtsql, ocn)
ocm.Connection.Open()
Dim dta As OleDbDataAdapter = New OleDbDataAdapter(ocm)

For Each Name As String In Lstexec.Items
  Dim trouvé as boolean = False
  Dim dreader As OleDbDataReader = ocm.ExecuteReader()
  While dreader.Read
      If dreader(0).ToString = Name Then
        trouvé = True
      End If
    Next
  End While
  if NOT Trouvé then
    lancerRequete("INSERT INTO Programs VALUES(...)")
Next
dreader.Close()
ocm.connection.close()
Messages postés
149
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
16 juillet 2013
4
Je suis navré (Vendredi soir, fin de semaine, pas les yeux en face des trous...)

Dim txtsql As String = "select * from Programs"
Dim ocn As New OleDbConnection(sconstr)
Dim ocm As New OleDbCommand(txtsql, ocn)
ocm.Connection.Open()
Dim dta As OleDbDataAdapter = New OleDbDataAdapter(ocm)

For Each Name As String In Lstexec.Items
  Dim trouvé as boolean = False
  Dim dreader As OleDbDataReader = ocm.ExecuteReader()
  While dreader.Read
      If dreader(0).ToString = Name Then
        trouvé = True
      End If
    Next
  End While
  dreader.Close()

  if NOT Trouvé then
    lancerRequete("INSERT INTO Programs VALUES(...)")
Next
ocm.connection.close()

Là cela doit être bon maintenant...
Messages postés
52
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
21 juin 2011

merci bien pour ton aide frére mais,
c pa totalement fonctionnel, il y'a quelque fautes , par exmpe:
1- il y'a un Next qui n'a pa a son place(apré end if)
2-tu est sur de l'emplacement de dreader.close () !!
3- c vrai que le messgae de doublons est disapparu mais il n'envoie plus les nouveau porgrammes ajoutés à ma base!!!! peut être c a cause de ma requête:
If Not trouvé Then
            lancerRequete("INSERT INTO Programs VALUES('" & Name.Replace("'", "''") & "')")

        End If
Messages postés
149
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
16 juillet 2013
4
Alors:
1-Oui le premier next est en trop...
2-Oui je suis sûr de l'emplacement du dreader.close, tu fais la boucle while pour parcourir ton dreader, puis tu le ferme, si tu le ferme avant (dans la boucle while) alors tu aura une erreur lorsque tu fera le dreader suivant, si tu le fermes plus tard alors il ne voudra par reouvrir le next de ta liste.
3- Tu n'a pas d'autre message d'erreur mais les nouveaux programmes ne s'insere pas??? Peux tu mettre le code derniere ta fonction LancerRequete?