Changer la présentation d'une fenêtre? [Résolu]

Signaler
Messages postés
10
Date d'inscription
jeudi 28 avril 2005
Statut
Membre
Dernière intervention
22 décembre 2010
-
Messages postés
10
Date d'inscription
jeudi 28 avril 2005
Statut
Membre
Dernière intervention
22 décembre 2010
-
Bonjour à tous,

Je m'excuse d'avance , car je n'ai pas fait la recherche de mon sujet dans le fofo.
Mais je suis au travail et cela ne concerne pas mes activités professionnelles mais personnelles.
Donc je passe ici en coup de vent. ^^

Voilà, je souhaite développer une application en "Vb6", dans laquelle il se trouve un carnet d'adresse.
Donc j'aurais un accès à des tables Access (2002).

Mon idée et de pouvoir consulter, dans une même fenêtre, deux tables différentes.
Illustration :
- table 'clients'
- table 'fournisseurs'
Donc, ces deux tables n'auront pas toutes les mêmes rubriques.
Comment je peux changer la présentation de ma fenêtre, rien qu'en choisissant la table concerner?
Dois-je passer par une Class? en superposant deux frames?
Comment je pourrais être le plus efficace?

Merci de votre aide!

Gootsuunique au monde

6 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
En VB6, on peut indexer les composants sur une feuille et, bien sûr, on peut, en mode Run, générer (presque) autant de copie de ce composant original (Index 0) que nécessaire - méthode Load monObjet(x).
A mon avis, c'est cette technique qu'il faut utiliser :
Une fois que tu as la liste des champs à afficher (*), il te suffit de :
-1- "Loader" autant de TextBox (**) et de Label que tu as besoin
-2- (c'est ça qui est chiant à faire) les placer au bon endroit sur la forme - méthode monObjet(x).Move
-3- pour les Labels, mettre le nom du champ dans son Caption
(*) Liste : Soit des paramètres que tu crées toi même sous forme d'un tableau = f(client ou fournisseur), soit en relisant les Fields(x).Name dans le RecordSet
(**) Chaque objet VB6 possède une propriété Tag qui ne sert à rien d'autre que de stocker un texte ou un chiffre, invisible à l'utilisateur : Tu peux en profiter pour y stocker le nom du champ, comme ça tu pourras plus facilement reconnaitre le TextBox parmi la collection de TextBox.

Exemple rapide basé sur un RecordSet :
   For r = 1 To monRecordSet.Fields.Count
      ' Il me semble que les Fields sont numérotés à partir de 0 --> A revoir
      Load maTextBox(r)
      With maTextBox(r)
         .Visible = True
         .Move maTextBox(0).Left, maTextBox(r - 1).Top + .Height + 100
         .Tag = monRecordSet.Fields(r).Name
         .Text = monRecordSet.Fields(r).Value
      End With
      With monLabel(r)
         .Visible = True
         .Move monLabel(0).Left, monLabel(r - 1).Top + .Height + 100
         .Text = monRecordSet.Fields(r).Name
      End With
   Next r

Et, lors de la validation, reprendre le même principe à l'envers

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
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
salut,

tu poses une listview, tu passes le bonne requête à cette procédure selon ce que tu veux visualiser :



<hr />
'    AJOUT HEADERS ET/OU ENREGISTREMENTS DANS UNE LISTVIEW VIA LECTURE
D'UNE TABLE/BDD
'    http://www.codyx.org/snippet_ajout-headers-ou-enregistrements-dans-listview-via-lecture_498.aspx#1576
'    Posté par [ 17710 Exploreur ] le 25/11/2007
<hr />




Public Function 
FillListViewFromAdoCnx(
ByRef

CnxAdo
As
ADODB.Connection, MyLv
As
ListView,
ByVal
sSql
As String
,
Optional ByVal
bHeader
As Boolean
=
True
,

Optional ByVal
lFirstRow

As Long
=
1
,
Optional
ByVal
lLastRow
As Long

=
0
)
As Boolean


'******************************************************************************


'*    Fonction remplissage de colonnes (headers / nom des
tables)  et des    *


'*          champs avec
"LIMIT"  définissable dans ListView à partir         *


'*                          d'une Connexion
ADO  active                      *


'*                                                                          
*


'*    -----------------------                            
                    *


'*  -Ajout Référence projet
: Microsoft ActiveX Data Objects 2.5  Library    *


'*  -Ajout composant        :  Microsoft Windows Common controls
6.0        *


'*    -----------------------                                      
          *


'*                                                                          
*


'*  ------------                                                            
*


'*  Utilisation
:                                                            *


'*  ------------                                                            
*


'* les 5
premiers  :                                                       
*


'*      FillListViewFromAdoCnx CnxAdo,
ListView1, Sql, , 1,  5               *


'                                                  
                          *


'* les 5
seconds  :                                                          *


'*      FillListViewFromAdoCnx CnxAdo, ListView1, Sql, ,
6,  10              *


'                                                       
                     *


'* du 11è à la
fin  :                                                        *


'*      FillListViewFromAdoCnx CnxAdo, ListView1, Sql, ,
11,  0              *


'                                                         
                   *


'* tous sans
Header  :                                                      *


'*      ListView1.ColumnHeaders.Add , ,
"champs  1"                          *


'*      ListView1.ColumnHeaders.Add , ,
"champs  2"                          *


'*      FillListViewFromAdoCnx  CnxAdo, ListView1, Sql,
False                *


'                                                                    
        *


'******************************************************************************


    ' init

    FillListViewFromAdoCnx = False
    
    ' cnx
inexistante?
    If CnxAdo Is Nothing Then
        Exit Function
    ElseIf Not (CnxAdo.State = adStateOpen)
Then
        Exit Function
    End If
    
    '
sql  vide?
    sSql = Trim$(sSql)
    If LenB(sSql) = 0 Then Exit Function
    
    '
logique  rows
    If lFirstRow < 0 Then
        Exit Function
    ElseIf lLastRow < 0 Then
        Exit Function
    ElseIf (lLastRow > 0) And (lLastRow < lFirstRow)
Then
        Exit Function
    End If
    '  variables
    Dim i       As Long
    Dim j       As Long
    Dim RstAdo  As New ADODB.RecordSet
    Dim Itmx    As ListItem
    
    ' init Listview
    If bHeader Then MyLv.ListItems.Clear:
MyLv.ColumnHeaders.Clear
    MyLv.Visible = False
    
    On Error GoTo Lbl_Err
    ' Paramètres  RecordSet et lancement de la
requête
    RstAdo.CursorLocation = adUseClient
    RstAdo.Open sSql, CnxAdo, adOpenDynamic,
adLockPessimistic
    ' Si il n'y a pas de  champs
on ne fait rien
    If RstAdo.Fields.Count > 0 Then
        '  header
        If bHeader Then
            ' on affiche
forcément toutes les colonnes puisque  c'est la requête qui prévoit le
retour
            For i = 0 To RstAdo.Fields.Count - 1
                 MyLv.ColumnHeaders.Add , ,
RstAdo.Fields(i).Name
            Next i
        End If
        
        '
champs.  attention!! si pas de header, il faut évidemment que la listview ait
été  préparée avant!
        If RstAdo.RecordCount > 0 Then
            ' 1er champ zéro
=  aucun champs
            If lFirstRow > 0 Then
                ' dernier
champ  zéro tous, trop grand> on réduit
au  dernier
                If (lLastRow = 0) Or (lLastRow > RstAdo.RecordCount) Then
lLastRow = RstAdo.RecordCount
                ' ajoute
                RstAdo.Move lFirstRow - 1
                For i = lFirstRow - 1 To lLastRow - 1
                    Set Itmx = MyLv.ListItems.Add(, ,
CStr(RstAdo.Fields(0).Value))
                    For j = 1 To RstAdo.Fields.Count - 1
                        Itmx.SubItems(j) = IIf(LenB(RstAdo.Fields(j).Value) > 0, RstAdo.Fields(j).Value,
vbNullString)
                    Next j
                    ' passe à
l'enregistrement  suivant
                    If Not RstAdo.EOF Then RstAdo.MoveNext
                Next i
                ' pas d'erreur
                FillListViewFromAdoCnx = True
            Else
                ' pas de
champs  mais pas d'erreur pour autant
                FillListViewFromAdoCnx = True
            End If
        Else
            ' pas d'erreur
            FillListViewFromAdoCnx = True
        End If
    End If
' gestion d'erreur  s'il y en a eu
Lbl_Err:
    If Not (Err.Number = 0) Then
        FillListViewFromAdoCnx = False
        Err.Clear
    End If
    
    MyLv.Visible = True
    
    '
destruction  objets
    RstAdo.Cancel
    If Not (RstAdo.State = adStateClosed)
Then RstAdo.Close
    Set RstAdo = Nothing
    Set Itmx = Nothing
End Function





'----------------------------------------------------------------



'Remarques :


'permet d'initialiser une listview d'après une requête et une
cnx/bdd active





et le tour est joué

<hr size ="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
Messages postés
10
Date d'inscription
jeudi 28 avril 2005
Statut
Membre
Dernière intervention
22 décembre 2010

Ah merci beaucoup, je vais jeter un coup d'œil ce week-end si j'ai le temps, et je viendrais valider vos réponses!

Merci et BONNE ANNEE, encore désolé pour la recherche que j'ai pas pu faire !

Gootsu  unique au monde
Messages postés
10
Date d'inscription
jeudi 28 avril 2005
Statut
Membre
Dernière intervention
22 décembre 2010

Vos deux idées sont exactement ce dont je cherche.
La première, c'est celle que j'imaginais faire car c'est l'aspect mise en page de textbox et label que je souhaitais faire.
Cependant, je n'avais pas pensé à la seconde idée évoqué!

Donc question subsidiaire :
- Quelle est celle que vous me conseillez?

Merci encore

Gootsuunique au monde
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
salut,
la 2e méthode étant très très facile à mettre en place, tu peux te permettre de faire les deux et de choisir ensuite
Messages postés
10
Date d'inscription
jeudi 28 avril 2005
Statut
Membre
Dernière intervention
22 décembre 2010

C'est vrai!!

j'aurais dû venir après le petit déjeuné, ça m'aurais évité de poser une question idiote! ^^
Ah quand on est pas réveillé, c'est pas le moment de bosser, on fait tous de travers!! lol
... à moins que ça ne s'applique qu'à moi!

Merci encore (à toute et) à tous!  Et BONNE ANNEE

Gootsu  unique au monde