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 !
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...
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)
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.
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
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
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.