cs_bouf
Messages postés114Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention20 mars 2008
-
31 janv. 2007 à 10:16
cs_bouf
Messages postés114Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention20 mars 2008
-
2 févr. 2007 à 15:27
Bonjour,
j'ai un programme qui fonctionne bien depuis plusieurs années. Mais depuis quelques temps, plus rien. Depuis les dernières mise à jours automatiques de windows je pense...
Le prog : j'ai un treeview qui se rempli avec une BD (3 ou 4 grandes familles) quand je clique sur un element de ce treeview, un list view juste à coté se remplissait de ce que j'avais demandé. Et là plus rien. Chose etrange, dans l'environnement VB ça marche bien, mais dès que je recompile c'est là ou ça ne marche plus.
Voici le code :
ctrListView.ListItems.Clear : ctrListView.ColumnHeaders.Clear
Select Case Node
Case "FAMILLE", "UTILISATEUR", "BUREAU"
ctrListView.Font.Size = 14
ctrListView.View = lvwList
Do While Not rsDonneeChoisie.EOF
Set mItem = ctrListView.ListItems.Add()
mItem.Text = rsDonneeChoisie("[" & Node & "]")
For i = 1 To rsDonneeChoisie.Fields.Count - 1 If IsNull(rsDonneeChoisie(i)) Then mItem.SubItems(i) "" Else mItem.SubItems(i) rsDonneeChoisie(rsDonneeChoisie(i).Name)
Next i
rsDonneeChoisie.MoveNext
Loop
Case Else ctrListView.Font.Size 8: ctrListView.View lvwReport
Dim rsTitreColonne As Recordset
Dim i As Integer
Set rsTitreColonne = db.OpenRecordset("SELECT * FROM Matériel", dbOpenSnapshot)
For i = 0 To rsTitreColonne.Fields.Count - 1
ctrListView.ColumnHeaders.Add , , rsTitreColonne(i).Name, 2000
Next
rsTitreColonne.Close
Do While Not rsDonneeChoisie.EOF
Set mItem = ctrListView.ListItems.Add()
mItem.Text = rsDonneeChoisie("[CODE MATERIEL]")
For i = 1 To rsDonneeChoisie.Fields.Count - 1 If IsNull(rsDonneeChoisie(i)) Then mItem.SubItems(i) "" Else mItem.SubItems(i) rsDonneeChoisie(rsDonneeChoisie(i).Name)
Next i
rsDonneeChoisie.MoveNext
Loop
End Select
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 31 janv. 2007 à 19:53
Salut
Bizarre en effet
Regarde si tu as bien déclaré (dans le menu Projet/Références) les bibliothèques que tu utilises.
En utilisant 'RecordSet' tout seul, je crois que c'est DAO qui est utilisé. (Microsoft DAO 3.6 Object Library)
Essaye aussi de moderniser en utilisant des moteurs d'accès aux données plus moderne/récents comme ADODB, mais cela dépend tu type de DB que tu utilises.
Quand tu dis que cela fonctionne en mode IDE et pas en mode compilé : C'est bien sur la même machine ?
Si sur des machines différentes, les références aux moteurs de connexion aux DB peuvent expliquer le dysfonctionnement.
Dans ce cas, ajoute bien tes références et réinstalle ton projet compilé grace à l'empaquetage (SetUp).
As-tu un message d'erreur ?
Masques-tu les erreurs avec de vilains "On Error Resume Next" ?
Essaye de remplacer tes syntaxes minimalistes rsDonneeChoisie(i) par la syntaxe complète et officielle rsDonneeChoisie.Fields(i).Value
et rsDonneeChoisie(i).Name par rsDonneeChoisie.Fields(i).Name
On ne sait jamais ...
En regardant de plus près cette ligne :If IsNull(rsDonneeChoisie(i)) Then mItem.SubItems(i) "" Else mItem.SubItems(i) rsDonneeChoisie(rsDonneeChoisie(i).Name)
Elle me semble bizarre (dernière partie) : rsDonneeChoisie(rsDonneeChoisie(i).Name)
La structure est un peu lourde. Tu demandes à l'objet le nom de la colonne i, puis tu lui redonnes ce nom pour le sélectionner.
rsDonneeChoisie(i) aurait suffit (ou rsDonneeChoisie.Fields(i).Value après les modifs que je te suggère plus haut)
Fais attention aussi dans tes requètes SQL aux noms de champ qui ne comportent pas que des caractères standards (c'est à dire les accents ou des caractères comme espace ou & ...) ==> Encadre leur nom avec des crochets droits [ et ], comme tu l'as fait pour désigner un nom de colonne particulier dans ton RecordSet [CODE MATERIEL] : "SELECT * FROM [Matériel]"
La requète pourrait merdouiller.
(fin des idées)
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005, en lice pour 2006, délibérations en cours Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_bouf
Messages postés114Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention20 mars 2008 2 févr. 2007 à 15:07
Salut,
Rien à faire. Pour reprendre tous tes points c'est OK. et bien sur quand je dis que dans le prog en VB ça marche et en compilé ça ne marche plus, c'est sur la meme machine. De plus, aucun message d'erreur VB : Directement la fenetre windows XP : votre prog a rencontré un probleme et doit fermer... veuillez signaler ce probleme à microsoft...
Par contre si je clique dans cette fenetre sur debogage et qu'il m'ouvre le debogeur (visual c++) un message apparait : Unhandled exception in [nom de mon prog.exe] (DAO360.DLL) : 0xc00000005 : access violation.
En fait j'utilise une BD access 97 car cela reste une toute petite base en poid et je travaille tout en vb. Dans mes autres prog ce genre de methode fonctionnent bien.
Ce bug survient en fait quand mon prog essai de remplir un list view.
a+
cs_bouf
Messages postés114Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention20 mars 2008 2 févr. 2007 à 15:27
Salut,
Trouvée la réponse : Bizarre d'ailleur. Comme j'utilise une base access 97, il faut les référence Microsoft DAO 3.51 (ce que j'avais il y a longtemps). Depuis les dernières MAJ (???), le prog VB a pris DAO 3.6 ce qui fait qu'il y avait incompatibilité. Chose bizarre c'est que ça marchait quand meme dans l'environnement VB...
Voila et merci encore.
a+ sur le site