[VB6] Quelques Questions Listview et autres [Résolu]

Signaler
Messages postés
19
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
26 juin 2009
-
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
-
Bonsoir !
Voila je viens poster ici car j'ai quelques problèmes quant à un projet multimédia et j'aurai souhaité des réponses dans la mesure du possible, je vais vous les énumérer :

J'utilise une listview de type Cheked ainsi qu'une base de donnée où l'un des champs est un binaire (Oui, ou non). Lorsque je coche la case, l'information doit etre mise à jour dans la base. Dans mon programme j'ai donc ouvert ma base, correctement, mais apparemment l'information n'est pas envoyée.


Je me demande donc si je l'ai bien mis dans le bon module car l'algo est dans ListView1_ItemCheck et j'écris :

   Set db = OpenDatabase("C:\Program Files\Microsoft Visual Studio\VB98\IHM\mabase1.mdb")    SQL "select * from TableTaches where Date  # " & Calendar1.Month & "/" & Calendar1.Day & "/" & Calendar1.Year & " # and Nom = ' " & ListView1.SelectedItem.Text & " ' "
   
    Set rs = db.OpenRecordset(SQL, dbOpenDynaset)
   
    If Not rs.EOF Then
   
            rs.Edit
           
           
            If ListView1.SelectedItem.Checked = True Then
                rs.Fields("Fait") = True
            Else
                rs.Fields("Fait") = False
            End If
   
            rs.Close
    End If




End Sub

Voilà si vous avez déjà une solution pour moi à ce sujet... c'est l'une des choses sur lesquelles je bloque pour le moment.

Ensuite j'aimerai juste savoir les synthaxes pour Ecrire dans une base de donnée... Merci d'avance à vous !

12 réponses

Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
Salut,

Pour ta première question, il me semble que ton code doit être dans l'évènement :

Private Sub ListView1_ItemCheck(ByVal Item As MSComctlLib.ListItem)

Pour ta deuxième question (et comme je vois que tu utilises le SQL), regarde une de mes sources ici, elle pourrait peut-être t'aider. Il y en a pleins sur le site des sources sur les Bdd...

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
73
Salut
Une remarque dans le SQL : Tu as pris soin de bien utiliser l'encadrement # avec des dates.
Par contre, je vois des espaces après le 1er # et avant le dernier #
Ces espaces appartiennent à la donnée, donc au format de la date.
Ca fonctionne peut-être (pas testé), mais attention quand même.
Idem pour les apostrophes, je viens de le voir : ... and Nom = ' " ... <-- pas d'espace après le ', idem pour le ' de fin.

Pour ta question, je pense qu'un rs.Update juste avant le rs.Close devrait suffire.

Comme ton orthographe est excellente et que j'apprécie pour cause de rareté (+1 point), je vais te donner un tuyau qui t'évitera un futur problème :
Le champ Nom dans ta DB doit contenir ... des noms.
Si ce nom comporte des apostrophes, la requète SQL provoquera une erreur puisque la syntaxe SQL va se retrouver avec un nombre impair d'apostrophes (encadrement + celui de la data); elle ne saura plus distinguer la fin de la data.
Donc, quand tu écriras le champ Nom dans la DB par ton programme, il faut penser à traiter le texte à insérer dans la requète afin d'éviter le problème : Ne pas utiliser la source de donnée directement dans la requète, il faut la bricoler avant :

   Dim sTemp As String

   sTemp = ListView1.SelectedItem.Text
   sTemp = Replace(sTemp, "'", "''")   ' On remplace un ' par deux ''   SQL " ... Nom '" & sTemp & "', ..."

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
38
Date d'inscription
jeudi 20 septembre 2007
Statut
Membre
Dernière intervention
9 décembre 2008

Pour le nombre au hasard:
int(rnd*(n-1))+1
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
Laisse tomber le ListView1_ItemCheck, j'ai pas les yeux en face des trous...

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Messages postés
19
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
26 juin 2009

D'accord, merci pour la réponse lol j'en attend une autre concernant le ListView1_ItemCheck en tout cas merci pour les sources ça m'a bien aidé !
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
73
Astuce n° 2 :
Pour plus de clarté dans ta requète, utilise le renvoi de ligne de VB = le signe _ en fin de ligne :

    SQL = "Select * from TableTaches " & _
          " where Date = #" & Calendar1.Month & "/" & _
                              Calendar1.Day & "/" & _
                              Calendar1.Year & "# " & _
          "   And Nom = '" & ListView1.SelectedItem.Text & "'"

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
19
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
26 juin 2009

Ah merci pour les astuces !!  Je viens d'essayer en ce qui concerne le rs.Update , ça fonctionne mais uniquement pour le premier indice de ma listview, donc apparemment il faudrait prendre en compte les indices des items.
Messages postés
19
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
26 juin 2009

Ah et j'oubliais ! Une autre chose que j'ai assez de mal à trouver : Choisir un nombre au hasard entre 1 (le premier indice de ma table) et n (le nombre variable d'éléments de ma table). Je sais que c'est avec un Randomize ou un Rnd mais je n'ai pas trouvé mon bonheur donc sans doute que vous pourriez également m'aider
Messages postés
19
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
26 juin 2009

Ah non j'ai trouvé la feinte... En fait je viens de voir que c'était And Nom = '" & ListView1.SelectedItem.Text & "' donc selon les tests que je viens de faire, l'algorithme fonctionne si, avant de cocher la case, je selectionne le texte qui lui correspond. Je vais voir pour changer ça de façon à ce que seule la case suffise
Messages postés
19
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
26 juin 2009

Merci !
Messages postés
19
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
26 juin 2009

Une dernière petite question, quelqu'un sait-il comment vider une listview ? Car si je relance mon programme pour afficher la base dans le menu principal, elle s'ajoute à l'ancienne, donc il faudrait que je vide la listview pour rajouter la base.
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
Re,

Listview1.ListItems.Clear

A+
Exploreur

 Linux a un noyau, Windows un pépin