Connection sql avec 2 tables pour affichage dans msflexgrid

Résolu
stasze Messages postés 12 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 16 juillet 2004 - 14 juil. 2004 à 18:18
stasze Messages postés 12 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 16 juillet 2004 - 16 juil. 2004 à 04:04
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)

9 réponses

stasze Messages postés 12 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 16 juillet 2004
16 juil. 2004 à 04:04
J'ai trouvé la solution à mon problème avec ceci:

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



Stasze :clown)
3
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
14 juil. 2004 à 19:00
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
++
0
stasze Messages postés 12 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 16 juillet 2004
14 juil. 2004 à 19:13
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)
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
14 juil. 2004 à 19:15
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
.....
0

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

Posez votre question
stasze Messages postés 12 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 16 juillet 2004
14 juil. 2004 à 19:36
Non toujours un problème.
Stasze :clown)
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
14 juil. 2004 à 20:44
Quel message ?
et quelle ligne
0
stasze Messages postés 12 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 16 juillet 2004
15 juil. 2004 à 03:31
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)
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
15 juil. 2004 à 08:27
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
0
stasze Messages postés 12 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 16 juillet 2004
15 juil. 2004 à 11:49
Je n'ai plus d'erreur mais cela ne m'affiche que ma table Farc25.

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