Bonjour,
Alors déjà pour peupler la ListBox, il y a deux approches :
> Soit via son Rowsource par itération pour rentrer toute les valeurs
[CODE]Ne pas oublier de retirer le dernier ";" dans le Rowsource !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Set Cn1 = New ADODB.Connection Cn1.Open *** chaîne de connexion SQL Server *** Set Rs = New ADODB.Recordset chSQL = "SELECT Col1, Col2, ...., Colx FROM TABLE1" Rs.Open chSQL, Cn1, adOpenForwardOnly, adLockReadOnly If Not Rs.EOF Then RS.Rowsource=RS.Rowsource & ";" & RS.Fields(0) & ";" & RS.Fields(1) & .....& ";" & RS.Fields(x) & ";" End If Rs.Close
> Soit via la commande .additem
Dans les deux cas, ce traitement peut être particulièrement long s'il y a pas mal de lignes et de colonnes à traiter.
Une astuce qui permet de booster drastiquement ce traitement consiste à déporter la pseudo itération de la première approche (celle avec Rowsource) sur le SQL Server en utilisant la clause FOR XML PATH (). Exemple :
Attention : Le Rowsource est limité à seulement 32 750 caractères (2048 dans les anciennes versions) !!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Set Cn1 = New ADODB.Connection Cn1.Open *** chaîne de connexion SQL Server *** Set Rs = New ADODB.Recordset chSQL = "SELECT STUFF((SELECT ';' + Col1 + ';' + ';' + Col2 + ';' + .... + ';' + Colx FROM TABLE1 FOR XML PATH ('')), 1, 1, '')" Rs.Open chSQL, Cn1, adOpenForwardOnly, adLockReadOnly If Not Rs.EOF Then ListeBox.Rowsource= Rq1.Fields(0) End If Rs.Close
Partager