OVH Cloud OVH Cloud

VB6 : Conflit de références / composants ?

3 réponses
Avatar
YannX
Bonjour,

En-cours sur une appli. VB 6 (avec DAO, mais programmé)
j'ai des difficultés avec mon Form de saisie !

J'ai voulu utiliser le MicroSoft FORMS 2.0 componant
pour obtenir des Combo Multi-colonnes......percu un vb
(depuis, j'ai apercu la propriété .Style qui offre en particulier
fmStyleDropDownList ' 2 = vbComboDropDownList).....
Je passe sur le fichier d'aide FM20.CHM qu'il faut retrouver a la main !

Après avoir bien pataugé dans les composants références,
cela marchait ; je pouvais meme charger une valeur .Text
qui me servait de message d'avertissement pour piloter
les saisies imbriquées entre plusieurs combo
chargées avec des listes dépendantes..

J'intègre ensuite une classe ..... un MSChart,
et brutalement, je ne peux plus compiler, si pardon "exécuter" !

Rune-Time error 380
Impossible de definir la propriété 'Text'

Or, (et la cela devient PENIBLE !) , l'IDE me montre bien que la facette
.Text existe (à Null)
Et il me propose egalement celle-ci dans l'accompagnateru de syntaxe
DropDown list !

Et je suis bien sur que ces lignes de codes ont pu s'exécuter
auparavant.......

Et en plus je me fais regulièrement insulté par VB6 qd je veux retirer un
composant
(il me raconte que celui-ci est utilisé.....très bien, mais par qui ou quoi
EXACTEMENT!!)

Je me suis demandé si je n'allais pas plonger avec un editeur hexa pour
patcher le
type de la combo de Forms, histoire de lui coller un nom impossible a
confondre
avec celui des controles standards......je sais d'aileurs pas ou j'aurais
cherché mais....

Donc mes questions :
- - - - - - - - - - - - - - - - - -

1°/ comment identifier avec certitude/precision les Références et Composants
liés,
avec les types correspondants ?
Plus particulièrement, si le meme type (ComboBox) est présent dans deux
Composants ?
(peut-etre avec un préfixe du genre ADODB.Recordset et DAO.RecordSet ?)

2°/ Existe-t-il un Add-In capable de gérer et changer les types des objets
"à la volée" ?
(il me semble bien avoir vu cela sur Access autrefois)

3°/ je n'ai pas trouvé de référence ( ;-) sur les références et composants
VB6 :
avez-vous des tuyaux ? des sites ? des outils d'analyse ?
Voire un bon bouquin.....

4°/ une question annexe : l'early-binding en VB ?
Houpps, comment gere-t-il cela ?

- - - - - - - - - - -

Bon, me direz-vous peut-etre ! Et si tu basculais a VB.NET ! ! !
(peut-etre est-il plus affiné à ce niveau ?)

Cela me semblerait tres intéressant, coté support de l'objet
(je viens du C++ Builder et GCC !), mais la puissance machine et les mises a
jour me restreignent un peu.....
d'autant que pour des raisons propres a l'application, je veux rester
compatible VBA Office 2000 et Access Jet !
Vos reactions, retours d'expérience, etc... m'interesseront
Mais cela ferait l'objet d'un autre fil............

Bien, merci d'avance a ceux qui prendront le temps de repondre,
meme de facon approximative(cela aide tjrs un peu !)
comme certains l'ont déja fait !
Je veux déjà remercier Quasimodo et NG

Yann

3 réponses

Avatar
ng
Salut,

Deja d'une manière générale, il n'est pas conseillé d'utiliser les controles
Forms 2.0 en VB (en VBA par contre ou peut, heureusement :)), cela pour 3
raisons principales :
* aucune "licence" n'est fournie avec VB pour les utiliser avec VB et donc
les redistribuer donc normalement on n'a pas le droit de les redistribuer.
(donc il faudra que le poste utilisateur ait son office, ce qui pose
d'autres problèmes)
* la distribution pose des problèmes de compatibilité bien souvent car ces
composants sont fournis avec office (ce n'est pas une simple DLL).
* ils sont connus pour leurs multiples bugs/comportements étranges sous VB

1°/ comment identifier avec certitude/precision les Références et
Composants liés,
avec les types correspondants ?
Plus particulièrement, si le meme type (ComboBox) est présent dans
deux Composants ?
(peut-etre avec un préfixe du genre ADODB.Recordset et
DAO.RecordSet ?)



Il suffit d'utiliser le nom de la librairie au moment de la création de
l'objet (donné dans l'explorateur d'objet).

2°/ Existe-t-il un Add-In capable de gérer et changer les types des
objets "à la volée" ?
(il me semble bien avoir vu cela sur Access autrefois)



Pas à ma connaissance mais pourquoi pas, il faudrait regarder sur le Net.

3°/ je n'ai pas trouvé de référence ( ;-) sur les références et
composants VB6 :
avez-vous des tuyaux ? des sites ? des outils d'analyse ?
Voire un bon bouquin.....



Il s'agit juste d'une liste des comopsants COM utilisés par le projet
courant.

4°/ une question annexe : l'early-binding en VB ?
Houpps, comment gere-t-il cela ?



Il suffit d'ajouter une référence vers l'ojet concerné puis de l'instancier
:

Dim oObjet As Librairie.MaClasse
Set oObjet = New Librairie.MaClasse

'//Attention, pas de Dim oObjet As New Librairie.MaClasse
'//c'est une horreur sous VB6 on gardera ça pour .Net

Set oObjet = Nothing

Si l'objet à des événements, on peut le déclarer ainsi dans les déclarations
de la classe en cours :
Dim WithEvents oObjet As Librairie.MaClasse


Rune-Time error 380
Impossible de definir la propriété 'Text'


Ton ComboBox n'est pas en lecture seule ou moins ? Ou peut-etre est-ce une
bizarrerie des Forms 2.0 sous VB ?...

Et je suis bien sur que ces lignes de codes ont pu s'exécuter
auparavant.......


As-tu changé des propriétés du controle entre temps ?

Et en plus je me fais regulièrement insulté par VB6 qd je veux
retirer un composant
(il me raconte que celui-ci est utilisé.....très bien, mais par qui
ou quoi EXACTEMENT!!)


N'en n'as tu pas un caché qqepart dans ta form ? Car c'est étrange sinon...

Je me suis demandé si je n'allais pas plonger avec un editeur hexa
pour patcher le
type de la combo de Forms, histoire de lui coller un nom impossible a
confondre


C'est une mauvaise idée, tu ne pourrais pas redistribuer ton fm20.dll (car
il n'est pas redistribuable cf plus haut pi même si on force on risque de
bousier l'office client si ce n'est pas la mm version).

Bon, me direz-vous peut-etre ! Et si tu basculais a VB.NET ! ! !
(peut-etre est-il plus affiné à ce niveau ?)

Cela me semblerait tres intéressant, coté support de l'objet
(je viens du C++ Builder et GCC !), mais la puissance machine et les
mises a jour me restreignent un peu.....


En effet, .Net contrairement à 6.0 est langage absolument totalement orienté
objets (plutot Types même diront certains).
Qu'entends-tu par "puissance machine" ? Tu veux parler de la non compilation
du code et du Just In Time Compiler ? Enfin bref c'est pas le sujer ;)

d'autant que pour des raisons propres a l'application, je veux rester
compatible VBA Office 2000 et Access Jet !


Eh oui pas encore de VBA.Net :-(

Bien, merci d'avance a ceux qui prendront le temps de repondre,
meme de facon approximative(cela aide tjrs un peu !)
comme certains l'ont déja fait !
Je veux déjà remercier Quasimodo et NG


Mais y a pas de quoi ;)

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Avatar
YannX
D'abord, merci Nicolas d'etre toujours a me proposer au moins un élément de
réponse...


"ng" a écrit dans le message de
news:
Salut,

Deja d'une manière générale, il n'est pas conseillé d'utiliser les


controles
Forms 2.0 en VB > * aucune "licence" n'est fournie . ......
(donc il faudra que le poste utilisateur ait son office, ce qui pose



=> je me trouve dans ce cas ! OK !
(précision a avoir : quelle version d'Office ? ? )

* la distribution pose des problèmes de compatibilité bien souvent car ces
composants sont fournis avec office (ce n'est pas une simple DLL).
* ils sont connus pour leurs multiples bugs/comportements étranges sous VB



je commence a le voir : mais n'y a-t-il un forum ou un site
un peu spécialisé (FR ou Engliche.....anywhere)


> 1°/ comment identifier avec certitude/precision les Références et
> Composants liés,
> avec les types correspondants ?
> Plus particulièrement, si le meme type (ComboBox) est présent dans
> deux Composants ?
> (peut-etre avec un préfixe du genre ADODB.Recordset et
> DAO.RecordSet ?)

Il suffit d'utiliser le nom de la librairie au moment de la création de
l'objet (donné dans l'explorateur d'objet).



Donc ici MSForms.ComboBox ; mais puisqu'il s'agit d'un objet créé dans
le .FRM
justement, je n'ai pas accès (cf. des posts precedents...)

=> mais je vais me reposer des questions sur les versions......plus tard
!


> 2°/ Existe-t-il un Add-In capable de gérer et changer les types des
> objets "à la volée" ?
> (il me semble bien avoir vu cela sur Access autrefois)

Pas à ma connaissance mais pourquoi pas, il faudrait regarder sur le Net.



Excuse-moi de dire que j'ai (qd meme ;-) cherché un peu,
mais sans succès (entre Pub et Sommaires de cours.....)


> 3°/ je n'ai pas trouvé de référence ( ;-) sur les références et
> composants VB6 :
> avez-vous des tuyaux ? des sites ? des outils d'analyse ?
> Voire un bon bouquin.....

Il s'agit juste d'une liste des composants COM utilisés par le projet
courant.



Je vais devoir finir par ecrire un presentateur (visuel)
d'arborescence des dépensances ?????
Mais faut d'abord que je finisse ce pgm !
(et les modules de calcul qui en découlent.......2 mois ?)


> 4°/ une question annexe : l'early-binding en VB ?
> Houpps, comment gere-t-il cela ?

Il suffit d'ajouter une référence vers l'ojet concerné puis de


l'instancier
:

Dim oObjet As Librairie.MaClasse
Set oObjet = New Librairie.MaClasse

'//Attention, pas de Dim oObjet As New Librairie.MaClasse
'//c'est une horreur sous VB6 on gardera ça pour .Net

Set oObjet = Nothing

Si l'objet à des événements, on peut le déclarer ainsi dans les


déclarations
de la classe en cours :
Dim WithEvents oObjet As Librairie.MaClasse


> Rune-Time error 380
> Impossible de definir la propriété 'Text'
Ton ComboBox n'est pas en lecture seule ou moins ? Ou peut-etre est-ce une
bizarrerie des Forms 2.0 sous VB ?...


-> j'y crois fort : un site spécialisé sur ce sujet ?

Ou bien des controles de remplacement efficaces !

Car a force de modifier, plus RIEN ne va marcher d'ici peu !!!!!


> Et je suis bien sur que ces lignes de codes ont pu s'exécuter
> auparavant.......
As-tu changé des propriétés du controle entre temps ?


Ben, pas a mon souvenir, par contre j'ai certainement
introduit/modifié des composants et références.....


> Et en plus je me fais regulièrement insulté par VB6 qd je veux
> retirer un composant


(de la liste des composants du projet / par exemple pour l'épurer,
( et savoir de quoi je repars.......

> (il me raconte que celui-ci est utilisé.....très bien, mais par qui
> ou quoi EXACTEMENT!!)
N'en n'as tu pas un caché qqepart dans ta form ? Car c'est étrange


sinon...

Ben non, rien vu de tel (mais tu comprends pourquoi je cherchais un
Add-In me gérant les types (et en fait il devrait intégrer des facilités
de l'Object Browser <oui, j'utilise ici une version US de VB6 SP6 !)


> Je me suis demandé si je n'allais pas plonger avec un editeur hexa
> pour patcher le
> type de la combo de Forms, histoire de lui coller un nom impossible a
> confondre
C'est une mauvaise idée, tu ne pourrais pas redistribuer ton fm20.dll (car
il n'est pas redistribuable cf plus haut pi même si on force on risque de
bousier l'office client si ce n'est pas la mm version).

> Bon, me direz-vous peut-etre ! Et si tu basculais a VB.NET ! ! !
> (peut-etre est-il plus affiné à ce niveau ?)
>
> Cela me semblerait tres intéressant, coté support de l'objet
> (je viens du C++ Builder et GCC !), mais la puissance machine et les
> mises a jour me restreignent un peu.....
En effet, .Net contrairement à 6.0 est langage absolument totalement


orienté
objets (plutot Types même diront certains).
Qu'entends-tu par "puissance machine" ? Tu veux parler de la non


compilation
du code et du Just In Time Compiler ? Enfin bref c'est pas le sujer ;)

> d'autant que pour des raisons propres a l'application, je veux rester
> compatible VBA Office 2000 et Access Jet !
Eh oui pas encore de VBA.Net :-(

> Bien, merci d'avance a ceux qui prendront le temps de repondre,
> meme de facon approximative(cela aide tjrs un peu !)
> comme certains l'ont déja fait !
> Je veux déjà remercier Quasimodo et NG
Mais y a pas de quoi ;)



D'abord, si SI SI, parce que j'ai au moins l'impression de ne pas me
battre
tout seul contre des moulins microDaubés, et parce que tu apportes des
éléments
Et puis tu reconnaitras, comme nous tous, que cela fait parfois plaisir a
entendre/lire !

Alors.....Merci

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/




Avatar
ng
Salut,

=> je me trouve dans ce cas ! OK !
(précision a avoir : quelle version d'Office ? ? )


C'est justement ca le problème, tes utilisateurs n'auront pas forcément la
m^me version que toi, ce qui pourrait poser problème.

je commence a le voir : mais n'y a-t-il un forum ou un site
un peu spécialisé (FR ou Engliche.....anywhere)


Ce sujet à été évoqué moult fois sur ces forums, regarde dans les archives :

http://groups.google.com/groups?threadmbcd9c4%24f543a600%24c27f2fd1%40rgb
http://groups.google.fr/groups?hl=fr&q=forms+2.0+problems+group%3A*vb*&lr=&t


Donc ici MSForms.ComboBox ; mais puisqu'il s'agit d'un objet créé
dans le .FRM
justement, je n'ai pas accès (cf. des posts precedents...)


Si c'est ajouté avec le bon bouton vb prend automatiquement le bon controle
ne t'inquiète pas ;)
Sinon tu peux toujours les ajouter dynamiquement (Me.Controls.Add()).

Excuse-moi de dire que j'ai (qd meme ;-) cherché un peu,
mais sans succès (entre Pub et Sommaires de cours.....)


Ok je n'en ai pas trouvé non plus de toute facon.

Je vais devoir finir par ecrire un presentateur (visuel)
d'arborescence des dépensances ?????
Mais faut d'abord que je finisse ce pgm !
(et les modules de calcul qui en découlent.......2 mois ?)


C'est en effet le problème, chaque compsants à ses réfèrences mais cela se
gère de manière transparente (les composants de tes composants ne seront
alors visibles que par tes composants, pas par toi car tu nen a pas
directement besoin donc ce n'est pas dans la liste).

-> j'y crois fort : un site spécialisé sur ce sujet ?

Ou bien des controles de remplacement efficaces !

Car a force de modifier, plus RIEN ne va marcher d'ici peu !!!!!


C'est possibles donc si tu le peux encores remplaces ces controles par des
autres (http://vbnet.mvps.org (plein d'astuces : "amélioration" de controles
par subclassing... http://www.vbadvance.com (plein de controles gratuits))

Ben non, rien vu de tel (mais tu comprends pourquoi je cherchais un
Add-In me gérant les types (et en fait il devrait intégrer des
facilités de l'Object Browser <oui, j'utilise ici une version US de
VB6 SP6 !)


C'est vrai que ca devient complqiué cette affaire :/

D'abord, si SI SI, parce que j'ai au moins l'impression de ne pas me
battre
tout seul contre des moulins microDaubés, et parce que tu apportes des
éléments
Et puis tu reconnaitras, comme nous tous, que cela fait parfois
plaisir a entendre/lire !


C'est vrai :) ^^

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/