Comparer listbox avec la BD

cs_etoile100100 Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 21 juin 2011 - 6 mai 2011 à 20:10
 Utilisateur anonyme - 16 mai 2011 à 15:14
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

NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
6 mai 2011 à 20:54
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
0
cs_etoile100100 Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 21 juin 2011
7 mai 2011 à 00:16
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
0
cs_etoile100100 Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 21 juin 2011
7 mai 2011 à 00:18
 If dreader.Read.ToString <> Name Then 

c plûtot ca mais mem probléme
0
Utilisateur anonyme
13 mai 2011 à 10:01
Bonjour,

peux tu mettre les parametres de ta commande ocm? (Requete surtout)?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_etoile100100 Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 21 juin 2011
13 mai 2011 à 17:22
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()
0
Utilisateur anonyme
13 mai 2011 à 18:43
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
0
Utilisateur anonyme
13 mai 2011 à 18:46
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()
0
Utilisateur anonyme
13 mai 2011 à 18:48
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...
0
cs_etoile100100 Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 21 juin 2011
13 mai 2011 à 20:10
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
0
Utilisateur anonyme
16 mai 2011 à 15:14
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?
0
Rejoignez-nous