Problème avec datagrid

Messages postés
13
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
15 août 2006
-
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
-
bojour,
je suis étudiant, j'ai un petit problème avec mon datagrid, je voudrai le remplir à partir du résultat d'une requète.
en effet, mon datagrid doit m'afficher le resultat de ma requète et doit me permettre de selectionner la ligne et d'en exploiter les champs.
merci d'avance les "VBtistes"!!
A voir également:

17 réponses

Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour,
On n' a aucune idée de ton problème !
Si ta question est : Comment lier une DataGrid à une source
  de donnée , fais une recherche sur le sujet . Les Tutos ne manquent pas
Par contre si ta question est : Pourquoi mon datagrid ne m'affiche pas le
resultat de ma  requète et ne me me permet pas de selectionner une ligne
et d'en exploiter les champs ?
renvois nous un bout de code pour situer le problème.

A+
Messages postés
13
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
15 août 2006

en fait, j'arrive à manipuler un datagrid et d'utiliser les champs selectionnés à partir d'une table exisstante ds une base access, mais mon pb c'est de remplir un datagrid à partir du resultat d'une requète, et quant j'utilise le RecordSource ca me génère une erreur : Method or data member not found.
voici mon bout de code, il manque les instruction qui remplissent le datagrid:

Set db = OpenDatabase(App.Path & "\base_ssc.mdb")sql "SELECT verbe_traite, expression_situ, actant_situ FROM situation where (verbe_traite '" & situcinem.verbe1.Text & "')  "
Set rs = db.OpenRecordset(sql, dbOpenSnapshot)
 
Set datagrdimport.RecordSource = rs

merci.
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Re bonsoir,
Essaies ceci

Set rs = db.OpenRecordset(sql, dbOpenDynaset) ' au lieu de Snapshot pour permettre
                                                                                           la manipulation des données
 
et  ne met pas de Set.Ton datagrdimport éxiste déjà
'rajoutes
datagrdimport.DataBaseName=<Chemin complet avec le nom de labase> datagrdimport.RecordSource = rs
datagrdimport.Refresh   'Pour radraichir la grille.

A+
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Autre solution
Au lieu de changer le RecordSource de ton datagridimport,fais le plûtot pour ton
contrôl Data.

Data.RecordSource=sql
sans redéfinir datagridimport.RecordSource
Ton Grid reste toujours lié à ton Data.Seule la source des données du Data changent.
Messages postés
13
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
15 août 2006

merci, mais ca m'affiche une erreur: method or data member not found!
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Renvoies moi ce que tu as écris
et désignes la ligne ou ça bloque
Messages postés
13
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
15 août 2006

ok, voici mon code :

Private Sub Form_Load()


Set db = OpenDatabase(App.Path & "\base_ssc.mdb")sql "SELECT verbe_traite, expression_situ, actant_situ FROM situation where (verbe_traite '" & situcinem.verbe1.Text & "')  "
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
Set datagrdimport.RecordSource = rs
Do While Not rs.EOF
datagrdimport.Columns(1).Value = rs.Fields(0).Value
datagrdimport.Columns(1).Value = rs.Fields(1).Value
datagrdimport.Columns(2).Value = rs.Fields(2).Value
rs.MoveNext
Loop
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Sub

voila mon code, j'essaye de remplir mon datagrid avec le resultat de la requète sql, si tu peu m'illuminer, et je veu stocker les enregistrements selectionnés avec SelBookmarks pour pouvoir les inserer ds un champ RichTextBox.
merci
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
datagrdimport.DataSource = rs
et non RecordSource.


Le RecordSource est resérvé pour le control Data et le Recordset.
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
et rajoutes
datagrdimport.Refresh
après
datagrdimport.DataSource = rs
Messages postés
13
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
15 août 2006

bonjour,
datagrdimport.DataSource = rs génère une erreur: type mismatch, comment faire?
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour,
je m' en doutais.
En fait ton DataGrid est défini comme étant lié à un control Data et non à un recordset.
comme dans : datagrdimport.DataSource = Data1.

Optes pour la deuxième solution , à savoir :
Je détaille ...
datagrdimport est une DataGrid
Data1 est un control Data

> En mode Conception
 Pour Data1
 Tu lie sa propriété DataBaseName  à ta base de données
 Tu lie sa propriété RecordSource à ta Table.

Pour datagrdimport
 Tu lie sa propriété DataSource à Data1
 Tu Mets en forme ta grille (largeur colonnes , entête , Police et tout)
 une fois ta mise en forme terminée, tu remet, la propriété DataBaseName
 de ton control Data1 à "" ( tu supprimes le lien)

> En mode Execution
Quand tu veux Charger ton Formulaire
 Après Load MonForm
  tu mets
 
 Dim Sql as String
 Sql="SELECT ................."
 MonForm.Data1.DataBaseName=App.Path & "_MaBase.mdb"
 MonForm.Data1.RecodSource=Sql   

 > Au cours de l' execution, quand tu veux modifier la source de données
   de ton Data1, tu Redéfinie ta requête Sql 

 Sql="SELECT ................."
 et tu re-relie ton Data1 à ta nouvelle requête
 MonForm.Data1.DataBaseName=App.Path & "_MaBase.mdb"
 MonForm.Data1.RecodSource=Sql

et tout ça sans toucher à ton datagrdimport. Celui là reste toujour lié
à Data1.

Essaies et tu verras.
En tout cas ça marche toujours pour moi.

a+

 
Messages postés
13
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
15 août 2006

excuz moi, mai j'ai pa bien compris, le controle data, tu pe me formuler un bout de code qui part de la connection jusqu'au remplissage du datagrid stp, je comprend mieux comme ca, marci d'avance!! 
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Dans ton formulaire , tu as bien une grille de données que tu as
appelé datagrdimport ?
Cette grille , elle est bien attachée à un Control ?
( ce petit rectangle avec les flèches |<  <    >  | )
Et bien c' est de celà que je parle.
Et dans mon précédent msg je t' ai seulement fait remarqué
qu' il ne faut pas liée ta grille à un recordset mais à un Control
de ce type dont tu changes la pripriété DataSource au cours de l' exécution
à chaque fois que tu crée une nouvelle requête.
. DataSource= Ta nouvelle requête.
Quand au code qui part de la connection jusqu'au remplissage du datagrid
tu as déjà le tien qui reste valable.

j' espère que j' étais clair cette fois !
Messages postés
13
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
15 août 2006

salut, tu va te foutre de moi lol  mais j'ai encore une erreur qui s'affiche, unregognized database format C:/..../base_ssc.mdb, pourtant elle est bien une base acess et "connect" est bien sur access, donc je peux pa connecter mon controle data à ma table. et si je met rien j'ai une erreur qui dit kil fau un OLEDB datasource ou un adodatacontrol, si j'essaye d'executer le prog, j'ai une erreur aussi "le moteur de base de données Microsoft jet ne peut pas trouver la table ou la requète source Data1,
sinon, g prévu de remplir unr autre base que je remplis par ma requète et je connecte mon datagrid à cette table, mai je veux kelle se se vide kand je sort de la forme!!
ca prend plus de temps processeur mais bon c ce ke g trouvé comme solution.

A+, encore merci!
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour,
Cher Deamon.
Je ne me permetterai jamais de me moquer de quelqu' un.
Ici ,on est tous égaux.
Crois moi, j' essaie de te t' aider du mieux que je peux, avec le peu que je sais.
Je ne te lacherai plus jusqu' à ce que tout cela fonctionne et bien.
On s' en fiche du temps que celà prendera.
Maintenant reprenons pas à pas, et répond moi d' abord :
 1° Ta base elle est dans Access 97 ou 2003 ? 
 2°  Dans ton formulaire tu as 
      -Un DataGrid ou un DBGrid ?
      -Le petit rectangle avec les flèches...s' appelle Data ou Adodc ?
     -Tu veux faire un programme simple avec un accès direct ou tu veux
       utiliser une chaine de connection ?
 
       Réponds moi d' abord et on verra par la suite.

chaibat05
"
Messages postés
13
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
15 août 2006

voila, je suis en train de faire une apllication en VB6  qui permet de saisir des verbes et d'enregistrer des information relatives à ce verbe, je suis en informatique linguistique, donc mon pb c'est de donner à l'utilisateur la possibilité de choisir la  construction qui l'intéresse et de récupérer la ligne selectionnée pour un traitemement ultérieur.
pour ca, j'ai pensé utiliser un datagrid pour afficher les contructions du verbe souhaité, et de permettre la selection au sémanticien "expr1 = frmimport.datagrdimport.Columns(3).CellValue(frmimport.datagrdimport.SelBookmarks(0))", ce datagrid sera alimenté par le resultat de la requète qui va chercher ttes les constructions du verbe cherché "verbe_traite_ ds mon application.
j'utilise un data controle nommé "Data1", un datagrid nommé "datagrdimport", et une base de données Access 2003 appelée "base_ssc".
tout fonctionne normalement, sauf les problèmes que tu connai. en effet, je pe pa connecter mon controle data à ma base, j'ai un message d'erreur, en plus j'ai une ereur RowSet not available avec ce coce là:

Private Sub Form_Load()


Dim db As dao.Database
Dim rs As dao.Recordset
Dim sql As String

Set db = OpenDatabase(App.Path & "\base_ssc.mdb")sql "SELECT verbe_traite, expression_situ, actant_situ FROM situation where (verbe_traite '" & situcinem.verbe1.Text & "')  "




frmimport.Data1.DatabaseName = App.Path & "\base_ssc.mdb"
frmimport.Data1.RecordSource = sql
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
'Set datagrdimport.RecordSource = dataimport
datagrdimport.Refresh


Do While Not rs.EOF
datagrdimport.Columns(0).Value = rs.Fields(0).Value  <=== RowSet Not available
datagrdimport.Columns(1).Value = rs.Fields(1).Value
datagrdimport.Columns(2).Value = rs.Fields(2).Value
rs.MoveNext
Loop

rs.Close
db.Close
Set rs = Nothing
Set db = Nothing


End Sub

tout fonctionne normalement sauf ça!!
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonsoir,
Execuses moi je n' ai pas pu te répondre plutôt.
Bien , allons y !
En ce concerne Acces 2003, saches qu' il ne fonctionne pas
avec VB6 pour tout le monde, d' ou l' erreue
Par contre il fonctionne très bien avec Acces97.Moi même j' ai
rencontré le même problème et je n' ai pas pu le résoudre.Alors
je suis revenue à Acces97.
Va voir de ce côté
http://www.vbfrance.com/infomsg_access2003%20VB%206_792464.aspx
Il y' a un débat qui s' est ouvert à ce sujet.


Quand au problème concernant ton code
Ton programme s' arrête là ou tu m' as indiqué
parce que le recordsource du ndatagrdimport n' est
pas défini à ce niveau.Tu as cru bon d' ignorer cette ligne
'Set datagrdimport.RecordSource = dataimport
par ce qu' au départ c' était ici qu' il y' y avait une erreur et donc
cette erreur s' est portée sur
datagrdimport.Columns(0).Value = rs.Fields(0).Value  
                                               ' <=== RowSet Not available


Et à l' origine l' erreur dans
'Set datagrdimport.RecordSource = dataimport
vient du faite que tu declare ton rs comme Ado.RecordSet
et tu utilise dans Set rs=Db.OpenRecordSet("..........)
qui est une expression reservée au recordset DAO et non pas d' ADO


Voilà ce que je te propose pour résoudre le problème.
Tu me dira si ça te convient.
Tu as le choix entre
 >Une DBGrid et Control Data, ou bien un DataGrid et un control Ado
 pour celà je te conseille de consulter un Tutorial qui t' expliquera
en détail et mieux que moi comment établir une connection avec ADODB.


>l' autre option consiste à remplacer ton  DataGrid par un DBGrid.
Les deux Grids se ressemblent sauf que le premier va avec un control Ado
et l' autre avec un control Data ce qui correspond à ton contrôl.


Voilà comment tu vas procéder:
Tu supprime ton DataGrid de ton formulaire et tu le remplace par un DBGrid.
Si tu n' a pas un control Data sur ta feuille tu y insère un.
Tu sélectionne ton Control Data et tu vas à sa page de Propriétés.
Tu sélectionne "DataBaseName et tu indique le chemin de ta base de données.
Tu vas ensuite à RecordSource et Tu choisi Table.
Après tu selectionne ton Grid et dans sa page de propriété tu vas à DataSource
et tu selectionne ton Control Data sur le combo qui va s' ouvrir.
Tu revie,s à ton Grid et cette fois tu click avec le bouton Droit de la souris et
tu click sur "Extraire les champs".
Et là (comme par magie) tout tes les libéllés de tes champs vont s' inscrire sur
l' entpete de ta grille.Maintenant ta Grid est lié à ta table via ton control Data.
Si tu veux mettre en forme cette grille, tu click avec le bouton droit et tu choisi
"Propriétés".Tu paramètera ta grille avec les options de la page de propriétés.


Tu peux le renomé DBGrid en Dbgrdimport.


A partir de la si tu lance ton formulaire tous les enregistrements de ta table
vont s' afficher sur ton grid et pas besoin de la remplir par code.Le remplissage
se fait automatiquement.


Quand tu veux Charger ton Formulaire
 Après Load MonForm
  tu mets
 
 Dim Sql as String
 Sql="SELECT ................."
 MonForm.Data1.DataBaseName=App.Path & "_MaBase.mdb"
 MonForm.Data1.RecodSource=Sql  
 Dbgrdimport.Rebind  'pour reconstruire ta grille.


 MonForm étant le nom de ta fenêtre et Dbgrdimport le nom
de ta grille.

> Au cours de l' execution, quand tu veux modifier la source de données
   de ton Data1, tu Redéfinie ta requête Sql


 Sql="SELECT ................."
 et tu re-relie ton Data1 à ta nouvelle requête
 MonForm.Data1.DataBaseName=App.Path & "_MaBase.mdb"
 MonForm.Data1.RecodSource=Sql
 MonForm.Dbgrdimport.Rebind


et tout ça sans toucher à ton Dbgrdimport. Celui là reste toujour lié
à Data1.
Et pas la peine de faire
Do While Not rs.EOF
....
Loop

Le remplissage se fera automatiquement avec Dbgrdimport.Rebind

Si tu comptes par la suite déplacer ta base de données. tu vas à la page
de propriétés de ton Data1 et tu supprime tout ce qui est écrit devant DataBaseName.
Celui là va étre défini par code avec
 MonForm.Data1.DataBaseName=App.Path & "_MaBase.mdb"
ainsi le programme saura toujours que ta base se trouve dans le dossier
de ton application


J4espère que je ne t'' és pas "soulé" avec ceci.
Si tu as d' autres question n' hésites pas.
Bon courage.


chaibat05