Connection sql avec 2 tables pour affichage dans msflexgrid [Résolu]

Signaler
Messages postés
12
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
16 juillet 2004
-
Messages postés
12
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
16 juillet 2004
-
Bonjour à toutes et tous.

Voilà mon problème.
J'ai une base de données Access 97 (FARC.mdb) et je travaille sous VB6.
Dans ma BD, j'ai 2 tables Farc24 et Farc25 avec exactement les mêmes champs.
Dans mon projet VB, sur l'une de mes form (frmTableau) j'ai un MSFlexGrid (Grille2).
J'aimerai que lorsque l'utilisateur arrive sur cette form, la MSFlexGrid affiche le contenu de mes 2 tables.
Je sais afficher une table mais pas deux.
Est-ce possible? Et si oui, comment dois-faire?
Voici le code de ma feuille:

Dim db As Database
Dim RS As Recordset
Dim sql As String
Dim i As Integer
Dim MyWord As New Word.Application

Function faIndex(row As Integer, col As Integer) As Long
faIndex = row * Grille2.Cols + col
End Function

Private Sub cmdQuitter_Click()
frmFARC.Show
Unload Me
End Sub

Private Sub Form_Load()
Set db = OpenDatabase("G:\FARC\BD\Farc.mdb")


End Sub

Private Sub Grille2_Click()
sql = "SELECT * FROM Farc24 ORDER BY Nom"
sql = "SELECT * FORM Farc25 ORDER BY Nom"
Dim i As Integer

Grille2.Rows = 1
Grille2.ColWidth(0) = 1500
Grille2.TextArray(faIndex(0, 0)) = "Nom"
Grille2.TextArray(faIndex(0, 1)) = "Prénom"
Grille2.TextArray(faIndex(0, 2)) = "Epouse"
Grille2.TextArray(faIndex(0, 3)) = "DateNaissance"
Grille2.TextArray(faIndex(0, 4)) = "LieuNaissance"
Grille2.TextArray(faIndex(0, 5)) = "DeptNaissance"
Grille2.TextArray(faIndex(0, 6)) = "Adresse"
Grille2.TextArray(faIndex(0, 7)) = "Téléphone"
Grille2.TextArray(faIndex(0, 8)) = "Véhicule"
Grille2.TextArray(faIndex(0, 9)) = "Fait1"

Grille2.ColWidth(1) = 1500
Grille2.ColWidth(2) = 1500
Grille2.ColWidth(3) = 1000
Grille2.ColWidth(4) = 2500
Grille2.ColWidth(5) = 400
Grille2.ColWidth(6) = 3800
Grille2.ColWidth(7) = 1300
Grille2.ColWidth(8) = 1200
Grille2.ColWidth(9) = 3000
i = 0
sql = "SELECT * FROM Farc24 ORDER BY Nom"
sql = "SELECT * FORM Farc25 ORDER BY Nom"

Set RS = db.OpenRecordset(sql, dbOpenDynaset)
For i = 1 To RS.RecordCount
With Grille2
.Rows = Grille2.Rows + 1
.TextArray(faIndex(i, 0)) = RS.Fields("Nom")
.TextArray(faIndex(i, 1)) = RS.Fields("Prénom")
.TextArray(faIndex(i, 2)) = RS.Fields("Epouse")
.TextArray(faIndex(i, 3)) = RS.Fields("DateNaissance")
.TextArray(faIndex(i, 4)) = RS.Fields("LieuNaissance")
.TextArray(faIndex(i, 5)) = RS.Fields("DeptNaissance")
.TextArray(faIndex(i, 6)) = RS.Fields("Adresse")
.TextArray(faIndex(i, 7)) = RS.Fields("Téléphone")
.TextArray(faIndex(i, 8)) = RS.Fields("VL1")
.TextArray(faIndex(i, 9)) = RS.Fields("Fait1")
End With
RS.MoveNext
Next
RS.Close
End Sub

MERCI BEAUCOUP POUR VOTRE AIDE
Stasze :clown)
A voir également:

9 réponses

Messages postés
12
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
16 juillet 2004

J'ai trouvé la solution à mon problème avec ceci:

sql = "SELECT * FROM Farc24 UNION SELECT* FROM Farc25 ORDER BY Nom"



Stasze :clown)
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 179 internautes nous ont dit merci ce mois-ci

Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Pourquoi utiliser 2 tables si elle contienne exactement les mêmes champs ?

sql = "SELECT * FROM Farc24 ORDER BY Nom"
sql = "SELECT * FORM Farc25 ORDER BY Nom"

Set RS = db.OpenRecordset(sql, dbOpenDynaset)
For i = 1 To RS.RecordCount
......

La premiere ligne est inutile car elle est immediatement modifiée.

Fais plutot :

sql = "SELECT * FROM Farc24 ORDER BY Nom"
Set RS = db.OpenRecordset(sql, dbOpenDynaset)
For i = 1 To RS.RecordCount
....

puis

sql = "SELECT * FORM Farc25 ORDER BY Nom"
Set RS = db.OpenRecordset(sql, dbOpenDynaset)
For i = 1 To RS.RecordCount
.....

et ton tableau comportera les deux tables.

Mais à mon avis tu devrai ne faire qu'une seule table avec les deux. Si tu veux distinguer certain enregistrement ajoute un champs pour cela avec par exemple une valeur vrai/faux (Boolean).

Bonne prog
++
Messages postés
12
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
16 juillet 2004

Cela ne fonctionne pas.
erreur : For control variable already in use

Et puis dans ma 2ème table, j'ai quand même un champs en plus.
Stasze :clown)
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
oups
j'avais oublie

sql = "SELECT * FROM Farc24 ORDER BY Nom"
Set RS = db.OpenRecordset(sql, dbOpenDynaset)
For i = 1 To RS.RecordCount
....

rs.close
set rs = nothing

puis

sql = "SELECT * FORM Farc25 ORDER BY Nom"
Set RS = db.OpenRecordset(sql, dbOpenDynaset)
For i = 1 To RS.RecordCount
.....
Messages postés
12
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
16 juillet 2004

Non toujours un problème.
Stasze :clown)
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Quel message ?
et quelle ligne
Messages postés
12
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
16 juillet 2004

Voila l'erreur:

Compile error:
Duplicate declaration in current scope

Cela me surligne :

Dim i As Integer

Si j'enlève la variable, une nouvelle erreur:

Erreur de syntaxe (opérateur absent) dans l'expression '*FORM Farc25 ORDER BY Nom'

Cela me surligne sous la ligne sql = "SELECT * FORM Farc25 ORDER BY Nom":

Set RS = db.OpenRecordset(sql, dbOpenDynaset)
Stasze :clown)
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
OK, quand tu déclare une variable au debut d'une procedure, tu n'a pas besoin de le refaire au milieu ou a la fin, sinon elles entrent en conflit
Au debut de ton code du fait

Private Sub Grille2_Click()
Dim i As Integer

sql = "SELECT * FROM Farc24 ORDER BY Nom"
......

Et tu n'a pas besoin de redeclarer la variable.

Et pour :
Erreur de syntaxe (opérateur absent) dans l'expression '*FORM Farc25 ORDER BY Nom'

ajoute un espace entre * et FROM
puis corrige FORM par FROM

Enfin je te conseil de mettre
"Next i" au lieu de "Next"

Bonne prog
Messages postés
12
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
16 juillet 2004

Je n'ai plus d'erreur mais cela ne m'affiche que ma table Farc25.

Peux-tu encore m'aider.
MERCI BEAUCOUP
Stasze :clown)