Problème Base de données

Fab - 27 avril 2000 à 12:14
 Didier DEPOISIER - 12 mai 2000 à 16:47
Bonjour,

Je travaille à la conception d'un outil (Systeme d'Information Territorial)d'aide à la décision. Je développe sur VB 6 et MapObject.

Je suis novice en prog et j'ai gd besoin d'aide. Voici mon problème général:

je souhaiterai que les utilisateurs de l'outil que je suis en train de concevoir puissent avoir le choix du domaine sur lequel ils désirent avoir des informations (par ex Environnement, Agriculture, etc). Après avoir sélectionné le domaine, j'aimerai qu'apparaisse une liste de ttes les données se référant au domaine choisi.

Les domaines et données relatives au domaine sont listées dans des bases de données. Par ex,
Table Domaine comporte Identifiant_domaine et Nom_domaine
Table Données comporte
Id_Donnée, Nom_donnée et Id_domaine.

J'ai essayé de travaillé avec deux fenètres Datalist afin qu'un clic sur un domaine sélectionné fasse apparaître dans l'autre Datalist les données relatives à ce domaine.

Seulement l'échec est patent. Je m'en remets donc à vous. Je serais donc preneur de tout conseil ou esquisse de solution (peut-être vaut il mieux changer la manière d'appréhender le pb et passer par un DirlistBox?).

J'espère n'avoir pas été trop confus et suis dispo pour vous éclaircir.

Merci d'avance pour vos réponses

Fabien

2 réponses

Bien, j'espère avoir compris.

Voici l'approche recommandée:
=Ajoute dans les références:
"Microsoft DAO 3.x Object Librairy"
La version dépend de ce que tu as d'installé.
=Contrôle List1 ListBox +/- 6 lignes de haut
=Contrôle Combo1 ComboBox

Sub Form_Load
Dim SQLQry As String
Dim BaseDonnees as DataBase
Dim RSTemp1 As Recordset


Set BaseDonnees = DBEngine.OpenDatabase(=chemin et nom du fichier=, True, True)

'Lire un ensemble contenant tout les noms de domaines
SQLQry = "SELECT Nom_domaine FROM Domaine;"
Set RSTemp1 = BaseDonnees.OpenRecordset(SQLQry, dbOpenSnapshot)

List1.Clear

do while (RSTemp1.EOF)
Combo1.AddItem RSTemp1!Nom_domaine
RSTemp1.MoveNext
loop

Combo1.ListIndex = 0
End Sub

Sub Combo1_Click()
Dim SQLQry As String
Dim BaseDonnees as DataBase
Dim RSTemp1 As Recordset
Dim RSTemp2 As Recordset


Set BaseDonnees = DBEngine.OpenDatabase(=chemin et nom du fichier=, True, True)

'Trouver le ID de domaine selon la sélection dans Combo1SQLQry "SELECT Identifiant_domaine FROM Domaine WHERE Nom_domaine '" & Combo1.Text & "';"
Set RSTemp1 = BaseDonnees.OpenRecordset(SQLQry, dbOpenSnapshot)

'Aller chercher tout les renseignements sur ce domaine...SQLQry "SELECT * FROM Données WHERE Id_domaine " & RSTemp1!Identifiant_domaine & ";"
Set RSTemp2 = BaseDonnees.OpenRecordset(SQLQry, dbOpenSnapshot)

do until (RSTemp2.EOF)
'Pour la prochaine ligne, la forme est arbitraire, l'important
'est de comprendre ce qui est possible de faire.
List1.AddItem RSTemp2!Nom_donnée & "(" & RSTemp2!Id_Donnée & ")"
RSTemp2.MoveNext
loop

End Sub

J'espère seulement que se sera clair et que ça fonctionnera comme tu le veux.

Remarque, aucune vérification quant à l'existance des champs ou si la table Données contient effectivement des renseignements sur un domaine X n'est faite. Mais ce serait avantageux.
0
Didier DEPOISIER
12 mai 2000 à 16:47
ersion du langage : VB6 edition professionelle.

J'ai exactement le meme problème concernant des controles Adodc liés entre eux avec les controles DataCombo qui leur correspondent.
Soient 2 DataCombo etant liee chacune a son controle Adodc correspondant.
Je voudrai que, suivant la valeur d'un item sélectionné dans la DataCombo_1, la liste des items de la datacombo2 se mette a jour AUTOMATIQUEMENT.
Est-ce que cela est possible SANS UTILISER DE CODE c'est a dire sans programmer un quelconque évènement (change, click, etc...)
Certaines pages de MSDN parlent de liaisons de 2 tables via un controle DataCombo ou DataList ADSOLUMENT SANS CODE, mais je n'ai pas réussi à mettre en oeuvre les exemples ou alors cela ne correspond pas vraiment à ce que je souhaite faire.
MSDN parle aussi de controles hierarchiques...

De plus, à partir de la V6, Microsoft préconise d'utiliser les controles et méthodes Adodc au lieu des opendatabase() qui vont peu à peu disparaitre...

Merci à tous...
0
Rejoignez-nous