Affichage RecordSet dans un FlexGrid

Résolu
cs_Rifton007 Messages postés 52 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 13 juin 2009 - 29 août 2004 à 01:29
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 29 août 2004 à 15:45
Voici mon code actuel qui fonctionne trés bien:

DataBase_1.Rows = 1
For i = 0 To DataBase_1.Cols - 1
DataBase_1.ColWidth(i) = (DataBase_1.Width / DataBase_1.Cols) - 100
Next i

DataBase_1.TextMatrix(0, 0) = "N° Client"
DataBase_1.TextMatrix(0, 1) = "Nom"

rst.Open "SELECT Dexia.Num_enrg, Dexia.Date_eng FROM Dexia", cnx
While rst.EOF = False
DataBase_1.AddItem rst.Fields("Num_enrg") & vbTab & Replace(rst.Fields("Date_eng"), "_", "'")
rst.MoveNext
Wend
rst.Close

Personnelement je le trouve long.
J'ai trouvé cette simple syntaxe mais elle ne fonctionne pas chez moi.

Set DataBase_1.Datasource = rst

Merci

16 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 août 2004 à 04:34
Autre idée Rifton007 :
Si ce FlexGrid doit toujours afficher les mêmes données (avec la même table), tu as en effet intérêt à utiliser le propriété DataSource, mais la donnée attendue dans cette propriété est le nom d'un objet Data :
-1- Insères un objet Data (pas besoin qu'il soit visible d'ailleurs), renseigne les propriétés dans la catégorie "Données" des propriétés (DatabaseName, Connect, RecordSource, RecordsetType ...)
-2- Ensuite, retourne dans les propriétés de ton FlexGrid, et dans DataSource, va sélectionner le nom du contrôle Data que tu viens d'insérer
--> Toutes les données de la table sélectionnée arriveront dans tes cellules toutes seules.

Vala
Jack
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 août 2004 à 15:15
re-salut
Comme je te le disait cette nuit dans mon deuxième Post, on ne peut affecter à DataSource qu'un objet Data : Tu ne peux pas mettre un RecordSet directement.
Je t'ai décrit étape par étape comment faire.

Vala
Jack
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 août 2004 à 04:23
Salut Rifton007

Perso, dans la boucle, j'aurai continué avec les TextMatrix, intuitivement, je n'aurai pas pensé aux AddItem dans un tableau (manque d'utilisation)
Essaye cette solution et compare les vitesses.
Dim r As Long
rst.Open "SELECT Dexia.Num_enrg, Dexia.Date_eng FROM Dexia", cnx
If rst.RecordCount > 0 Then DataBase_1.Rows = rst.RecordCount + 1
While rst.EOF = False
r = r + 1  ' N° de ligne
DataBase_1.TextMatrix(r, 0) = rst.Fields("Num_enrg")
DataBase_1.TextMatrix(r, 1) = rst.Fields("Date_eng")
rst.MoveNext
DoEvents
Wend
rst.Close

Pour faire une affectation directe de matrice dans ce contrôle, il faut utiliser la méthode .Clip = Chaine où Chaine est constituée des textes séparés par des vbTab entre cellules et par des vbCr pour changer de ligne <-- Va falloir retravailler le contenu du 'rst' vers un tableau (Gain de temps très moyen).
Dim Chaine As String, r As Long
Do While Not rst.EOF
Chaine = Chaine & rst.Fields(0) & vbTab & rst.Fields(1) & vbCr
DoEvents
Loop
De plus, avant de faire ce .Clip, il faut sélectionner la zône concernée par ce transfert : Il faut donc sélectionner avec :
DataBase_1.Row = 1 ' ligne départ
DataBase_1.RowSel = rst.RecordCount + 1 ' ligne de fin
DataBase_1.Col = 0 ' Colonne de départ
DataBase_1.ColSel = 1 ' Colonne de fin


Vala
Jack
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 août 2004 à 04:39
Dernier truc, après j'ai fini :
Dans le Data.RecordSource, tu peux choisir une table complète (tous les champs) ou préciser les champs que tu désires en mettant une requète SQL à la place, comme la tienne :
SELECT Num_enrg, Date_eng FROM Dexia
(tu n'es pas obligé de préciser le nom de la table à chaque champ si tu n'utilises qu'une table dans ta requète)

Vala
Jack
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 août 2004 à 09:24
Salut

Pour la syntaxe simple : Set DataBase_1.Datasource = rst

est ce que tu ouvre ton recordset avant ou apres cette ligne.

Car si le flexgrid est comme le DataReport, il faut l ouvrir avant ;)

@+
-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
0
cs_Rifton007 Messages postés 52 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 13 juin 2009
29 août 2004 à 11:38
Merci à vous deux pour votre réponce.

Quant au message de JRIVET chez eu infin une réaction de VB.

Voici mon code:
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 août 2004 à 12:16
si ton code est tel quel, je pense qu il te manque ceci

---PARTIE PEU ETRE MANQUANTE
rst.source = TarequeteSQL
rst.activeconnection = cnx
rst.open
-------

dans ton code ca donnera

Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset

Set rst = New ADODB.Recordset
Set cnx = New ADODB.Connection

cnx.Provider = "Microsoft.Jet.Oledb.4.0"
cnx.ConnectionString = "E:\Mes documents\Porte-documents\Finance XP\BDA\Dexia.mdb"
cnx.Open

---PARTIE PEU ETRE MANQUANTE
rst.source = TarequeteSQL
rst.activeconnection = cnx
rst.open
-------

Set DataBase_1.DataSource = rst

@+
-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
0
cs_Rifton007 Messages postés 52 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 13 juin 2009
29 août 2004 à 12:35
J'ai essaye ce que tu ma dis Jrivet. Mais malheuresement même probléme. Enfaite la pratie manquante dont tu me parle je l'avais oublié de la mettre dans mon message précedent désole.

---
Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset

Set rst = New ADODB.Recordset
Set cnx = New ADODB.Connection

'Définition du pilote de connexion
cnx.Provider = "Microsoft.Jet.Oledb.4.0"
'Définition de la chaîne de connexion
cnx.ConnectionString = "E:\Mes documents\Porte-documents\Finance XP\BDA\Dexia.mdb"
'Ouverture de la base de données
cnx.Open

rst.Open "SELECT Dexia.Num_enrg, Dexia.Date_eng FROM Dexia", cnx

Set DataBase_1.DataSource = rst
---

Mais comme je t dis j'ai tout de meme essaye avec la partie manquante que tu ma donné. Meme probléme. Merci
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 août 2004 à 12:58
C est quelle ligne qui plante ?

-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
0
cs_Rifton007 Messages postés 52 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 13 juin 2009
29 août 2004 à 13:00
La planteuse c'est elle

Set DataBase_1.DataSource = rst
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 août 2004 à 13:19
Et bien la je dirai 3 choix possibles:

- DataBase_1 n existe pas... (c est possible mais peu probable)
- Y a peu etre pas besoin du SET
- rst n existe pas

T as essayer de faire Shift + F9 en debug. (selection de rst par exemple et de database1)

Si tu veux je peux essayer avec ta base de donnees mais faut me l envoyer

-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
0
cs_Rifton007 Messages postés 52 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 13 juin 2009
29 août 2004 à 13:26
DataBase_1 c'est le nom de mon FlexGrid
rst c'est le nom de variable que j'ai donné pour y stocker mes recordset.

J'ai vérifier avec un textbox pour voir si tout fonctionne et effectivement tout fonctionne bien. Aussi bien la connection que la requete SQL.

Le probléme viens du
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 août 2004 à 13:32
T as essayer de faire Shift + F9 en debug. (selection de rst par exemple et de database1)

J vais manger a toute ;)
-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
0
cs_Rifton007 Messages postés 52 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 13 juin 2009
29 août 2004 à 13:39
Bon appetit l'amis, et en ce qui concerne le debug, sa me donne la meme chose
0
cs_Rifton007 Messages postés 52 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 13 juin 2009
29 août 2004 à 15:39
Jack, merci je pense que tu as raison. J'ai pris ta solution et tout fonctionne à merveille.

Jrivet, je pense que le

Set Database_1.datasource = rst

Ne soit effectivement pas utilisable dans ce genre de code.

Et merci de l'aide que vous m'avez apporté
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 août 2004 à 15:45
De rien ;)

@+
-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
0
Rejoignez-nous