Affichage RecordSet dans un FlexGrid [Résolu]

cs_Rifton007 52 Messages postés samedi 28 août 2004Date d'inscription 13 juin 2009 Dernière intervention - 29 août 2004 à 01:29 - Dernière réponse : jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention
- 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
Afficher la suite 

16 réponses

Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 29 août 2004 à 04:34
3
Merci
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

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 29 août 2004 à 15:15
3
Merci
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

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 29 août 2004 à 04:23
0
Merci
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
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 29 août 2004 à 04:39
0
Merci
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
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 29 août 2004 à 09:24
0
Merci
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)
cs_Rifton007 52 Messages postés samedi 28 août 2004Date d'inscription 13 juin 2009 Dernière intervention - 29 août 2004 à 11:38
0
Merci
Merci à vous deux pour votre réponce.

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

Voici mon code:
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 29 août 2004 à 12:16
0
Merci
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)
cs_Rifton007 52 Messages postés samedi 28 août 2004Date d'inscription 13 juin 2009 Dernière intervention - 29 août 2004 à 12:35
0
Merci
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
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 29 août 2004 à 12:58
0
Merci
C est quelle ligne qui plante ?

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

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

Set DataBase_1.DataSource = rst
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 29 août 2004 à 13:19
0
Merci
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)
cs_Rifton007 52 Messages postés samedi 28 août 2004Date d'inscription 13 juin 2009 Dernière intervention - 29 août 2004 à 13:26
0
Merci
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
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 29 août 2004 à 13:32
0
Merci
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)
cs_Rifton007 52 Messages postés samedi 28 août 2004Date d'inscription 13 juin 2009 Dernière intervention - 29 août 2004 à 13:39
0
Merci
Bon appetit l'amis, et en ce qui concerne le debug, sa me donne la meme chose
cs_Rifton007 52 Messages postés samedi 28 août 2004Date d'inscription 13 juin 2009 Dernière intervention - 29 août 2004 à 15:39
0
Merci
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é
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 29 août 2004 à 15:45
0
Merci
De rien ;)

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

:big)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.