Chargement d'un combo à partir d'un autre lent lors de l'enregistrement!

js8bleu Messages postés 576 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 27 janvier 2014 - 27 nov. 2010 à 11:12
paramecie Messages postés 15 Date d'inscription samedi 23 octobre 2010 Statut Membre Dernière intervention 29 novembre 2010 - 28 nov. 2010 à 02:35
Bonjour à tous,

j'ai 4 combobox. Lorsque je sélectionne le combo1, en fonction du choix, il charge les données de la combo2. Lorsque je sélection un item de la combo2 il charge les données de la combo3. Ainsi de suite. Je souhaiterai savoir si cette méthode est gourmande en mémoire d'autant plus que mon application est en réseau et que souvent les données chargées par combo peuvent atteindre la dizaine. Ou peut-être que mon code n'est pas optimisé. Voici la partie de mon code qui charge cmbpropriete en fonction du choix de cmbexamen.

    cmbpropriete.Clear
    
    Dim rscmbexamen As New ADODB.Recordset
    rscmbexamen.Open "select numexamen from Tableexamen where nomexamen = '" & Replace(cmbexamen.Text, "'", "''") & "' ", cn, adOpenStatic, adLockPessimistic
    txtnumexamen.Text = rscmbexamen.Fields(0)

    cmbpropriete.Clear

    Dim rspropriete As New ADODB.Recordset
    rspropriete.Open "select nompropriete from Tablepropriete where numexamen = " & txtnumexamen & " order by nompropriete", cn, adOpenDynamic, adLockOptimistic
    
    Do While Not rspropriete.EOF
    cmbpropriete.AddItem rspropriete.Fields(0)
    rspropriete.MoveNext
    Loop


Merci d'avance pour votre très précieuse aide.

Cordialement.

1 réponse

paramecie Messages postés 15 Date d'inscription samedi 23 octobre 2010 Statut Membre Dernière intervention 29 novembre 2010
28 nov. 2010 à 02:35
Bonjour!

Je ne suis pas très pro en ADODB, mais...

On ne doit pas être obligé de créer un nouvel objet à chaque requête (réutiliser ou objet recordset global au module) ça doit être plus économique. On peut le remplir d'enregistrements différents (Open) à chaque fois, au lieu de le détruire.

J'éviterais surtout de passer un code SQL, si c'est du Access utiliser une requête proprement paramétrée, c'est beaucoup plus efficace. Sinon une procédure stockée.

Sinon non ceci n'est pas vraiment gourmand, et 10 lignes, ce n'est rien - on peut recevoir des centaines ou milliers d'enregistrement en réseau, mais effectivement, il vaut mieux optimiser.

Utiliser des requêtes (et sous réserve que les tables, champs, indexes, règles et tout le tintouin soient bien construits aussi

Voilà -
0
Rejoignez-nous