DataGrid ne se remplis pas

Résolu
Light666 - Modifié par jordane45 le 9/06/2014 à 00:05
 light666 - 9 juin 2014 à 14:18
Bonjour,

J'éssaie en vain de remplier un dataGrid a partire d'un recordset :
j'ai un comboBox dans le quel j'ai mis des données extraient d'une table

Le dataGrid n'affiche rien. Merci d'avance pour votre aide.

PS:J'ai chercher sur le net j'ai ajouter des trucs mais toujours la même chose.

Mon CODE :
'Déclarations
Dim con As New ADODB.Connection
Dim rst As New ADODB.Recordset
'Sur le load de la form j'ai ouvert ma DataBase

Private Sub Combo1_Click()

txtREF = Replace(Combo1.Text, "'", "''") & "';"


rst1.CursorLocation = adUseClient
rst1.Open "SELECT Code_Ref,PrixSansR,PrixRemise from refer where designation ='" & txtREF, con


If rst1.EOF Then
 Set DataGrid1.DataSource = rst1
 DataGrid1.Refresh
End If

rst1.Close

End Sub


Edit : Ajout des balises de code.
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
.

5 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
9 juin 2014 à 00:06
Bonjour,

1 - J'ai ajouté la coloration syntaxique à ton code.
Merci d'y penser lors de tes prochains messages.

2 - Ta requête semble comporter une petite erreur. Une quote manquante à la fin.

rst1.Open "SELECT Code_Ref,PrixSansR,PrixRemise from refer where designation ='" & txtREF&"'", con



0
Bonsoir jordane45;
Merci pour ta réponse.

Balises de code : j'y penserai ;)

En ce qui concerne l'erreur, je pense que au niveau de txtREF (plus haut) j'ai déjà mis la quote c'est pas la peine de la mettre encore sur la rst1...
Mais bon je vais essayer comme ça et je vais voir si ça remplis bien mon DataGrid.

Merci
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
9 juin 2014 à 03:02
Je viens de voir que tu faisais un replace d'une quote en "''" ..pourquoi faire ?

Si tu as des apostrophes dans ta chaine de caractère il vaut mieux utiliser les caractères d'échapement dans ta requête sql.

txtREF = Replace(Combo1.Text, "'", "\'") 



Puis peux tu tester ce que vaut ta requête ?

req = "SELECT Code_Ref,PrixSansR,PrixRemise from refer where designation ='" & txtREF&"';"
msgbox req
rst1.Open req, con


je ne comprend pas non plus pourquoi tu utiliser le End Of File..
If rst1.EOF Then


Tu peux normalement directement l'affecter...
voir tester le nombre de lignes retournées par ta requête avant si besoin...
 msgbox "NbROWS = " & rst1.RecordCount
If rst1.RecordCount >0 then
 Set DataGrid1.DataSource = rst1
End If

0
Bonjour,

Oui effectivement j'ai des apostrophes dans ma chaine, et j'ai trouver ça sur un forum :

txtREF = Replace(Combo1.Text, "'", "''") & "';"

Pour les tests :

J'ai utiliser ça :

Private Sub Combo1_Click()

txtREF = Replace(Combo1.Text, "'", "\'")

req = "SELECT Code_Ref,designation,PrixSansR,PrixRemise from refer where designation ='" & txtREF & "';"

MsgBox req

rst1.Open req, con

MsgBox "NbROWS = " & rst1.RecordCount

If rst1.RecordCount > 0 Then
Set DataGrid1.DataSource = rst1
End If

rst1.Close

End Sub

alors ça ma générer des erreurs sur plusieurs valeurs de "Designation" : Erreur de syntaxe (opérateur absent) dans l'expression ......

Puis j'ai remis :
txtREF = Replace(Combo1.Text, "'", "''") & "';"

Je n'ai plus d'erreurs, et les MsgBox ont renvoyées des valeurs :

exemple: contenue de la Première MsgBox

SELECT Code_Ref,designation,PrixSansR,PrixRemise from refer where designation ='PALIER FIESTA\FUSION 2002';

Et la deuxième MsgBox juste après me renvoie :

NbROWS=1

Mais la DataGrid ne se remplis pas pour autant.

Pour revenir à :

If rst1.EOF Then

j'ai trouver ça sur un forum aussi.

Merci beaucoup pour l'assistance que vous m'offrez.
0

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

Posez votre question
RÉSOLUE

J'ai enfin trouver la solution,

Le problème été au niveau de :

rst1.Close

j'ai enlever la fermeture du recordset à la fin et j'ai mis au début un contrôle d'erreur pour fermer le recordset si il est ouvert.

Private Sub Combo1_Click()

On Error resume next
rst1.close

txtREF = Replace(Combo1.Text, "'", "''") & "';"

req = "SELECT Code_Ref,designation,PrixSansR,PrixRemise from refer where designation ='" & txtREF


rst1.Open req, con


If rst1.RecordCount > 0 Then
Set DataGrid1.DataSource = rst1
End If


End Sub

Ma dataGride se rempli sans erreur.

Merci Beaucoup Jordane45 pour les idées et les astuces, et le temps que tu as consacrer pour m'aider.
0
Rejoignez-nous