ListBox et requête SQL

stasze Messages postés 12 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 16 juillet 2004 - 7 juin 2004 à 14:40
stasze Messages postés 12 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 16 juillet 2004 - 7 juin 2004 à 15:16
Bonjour à toutes et à tous. Je suis débutant en VB et j'ai commencé un petit programme pour mon travail.
J'ai fait une petite base de données sous Access97 et j'utilise les requêtes SQL.
J'ai ensuite créé une première Form du nom de "frmConfiguration". Dans celle-ci j'ai mis 2 TextBox (1 et 2), 2 ListBox (1 et 2) et 2 CommandButton (1 et 2).
Ce que j'arrive à faire:
- Lors de la saisi d'un texte dans un TextBox et que l'utilisateur click sur un CommandButton, le texte saisi s'inscrit dans la ListBox ainsi que dans l'une des tables de ma base de données.

Ce que je n'arrive pas à faire:
- Récupérer les données de ma table pour les afficher dans les ListBox, lorsque que l'on affiche de nouveau la Form.

Voici l'ensemble du code de ma "frmConfiguration".

Dim db As Database
Dim rs As Recordset
Dim sql As String
Dim i As Integer

Private Sub Command2_Click()
List2.AddItem (Text2.Text)

Text2.SetFocus
sql = "SELECT * FROM Gendarmes"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
rs.AddNew
rs.Fields("Gendarmes") = Text2.Text
rs.Update
rs.Close

End Sub

Private Sub Form_Load()
Set db = OpenDatabase("C:\MCI\MCI2.mdb")
sql = "SELECT * FROM Gendarmes"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
List2.Clear
For i = 1 To rs.RecordCount
List2.AddItem (rs.Fields("Gendarmes"))
rs.MoveNext
Next
rs.Close

sql = "SELECT * FROM Catégories"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
List1.Clear
For i = 1 To rs.RecordCount
List1.AddItem (rs.Fields("Catégories"))
rs.MoveNext
Next
rs.Close

End Sub

Private Sub Command1_Click()
List1.AddItem (Text1.Text)

Text1.SetFocus
sql = "SELECT * FROM Catégories"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
rs.AddNew
rs.Fields("Catégories") = Text1.Text
rs.Update
rs.Close

End Sub

Lorsque je marque "For i = 1 To rs.RecordCount" cela ne m'affiche qu'un seul élément de ma table. Si à la place du 1, je mets un chiffre négatif, j'ai beaucoup plus d'enregistrement mais si mon chiffre négatif dépasse le nombre de mes enregistrement j'ai l'erreur suivante qui apparaît en phase de test : "Run-Time Error 3021: Aucun enregistrement en cours."
Est-ce que quelqu'un peut me venir en aide.
Merci d'avance.
Stasze :clown)

2 réponses

HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
7 juin 2004 à 14:56
Bonjour,

au lieu de mettre :
for i = 1 to rs.Recordcount

mets :

Dim nb As Integer
rs.MoveLast
nb = rs.RecordCount
rs.MoveFirst

For i = 1 to nb 

'ton code

Next i


PS : pour insérer, tu n'as pas besoin d'ouvrir un Recordset avec une requête de sélection.
Il te suffit d'exécuter une requête SQL INSERT :

requete = "INSERT INTO Gendarmes (Gendarmes) VALUES ('" & Text2.Text & "'"

db.Execute (requete)

Fanny
0
stasze Messages postés 12 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 16 juillet 2004
7 juin 2004 à 15:16
Merci beaucoup Fanny, cela marche du tonnerre. :big)
Stasze :clown)
0
Rejoignez-nous