Comment afficher le resultat d'un recordSet

Comment afficher le resultat d'un recordSet - VB/VBA/VBS - Programmation

Marsh Posté le 14-04-2010 à 17:28:01    

Bonjour je doit faire un petit programme en vba en utlisant des tables de ma base de donnée Access. Je voudrait savoir comment afficher le resultat d'un RecordSet mais il y a un erreur qui me dit Aucun enregistrement en cour !!!
 
voila mon code:
 
 
Dim base As DAO.Database
Dim espèce As String
Dim resultat As DAO.Recordset
Dim res As String
Set base = CurrentDb()
Set resultat = base.OpenRecordset("SELECT [tab especes complète].[nomVernaculaire] FROM [tab especes complète] WHERE ((([tab especes complète].code)=espèce));" )
 
resultat.MoveFirst
While Not resultat.EOF
With resultat
res = !nomVernaculaire
MsgBox res
End With
resultat.MoveNext
 
Wend
 
resultat.Close

Reply

Marsh Posté le 14-04-2010 à 17:28:01   

Reply

Marsh Posté le 15-04-2010 à 09:07:52    


 :non:  
 
Il faut passer par une requete. (et proscrire les noms de variables accentués!!!)
 
 

Code :
  1. Sub test()
  2. Dim objReq As QueryDef
  3. Dim objRs As Recordset
  4.     ' On envoie la requete temporaire
  5.     Set objReq = CurrentDb.CreateQueryDef("", "SELECT [tab especes complète].[nomVernaculaire] FROM [tab especes complète] WHERE ((([tab especes complète].code)=espèce));" )
  6.    
  7.     ' Le résultat est affecté au recordset
  8.     Set objRs = objReq.OpenRecordset
  9.    
  10.     ' On parcourt le recordset
  11.     Do While Not objRs.EOF
  12.         ' .....
  13.         objRs.MoveNext
  14.     Loop
  15. End Sub

Reply

Marsh Posté le 15-04-2010 à 09:44:13    

Théoriquement, la solution initiale devrait marcher aussi bien que la seconde solution.
 
Je crois que le problème, dans les deux solutions vient de l'absence des guillemets obligatoires autour du mot "espèce". Je devine qu'ils n'ont pas été mis, car sinon VBA considèrerait que la chaine de la requête se termine avec le premier guillemet devant "espèce". Mais on contourne facilement ce problème, en utilisant des apostrophes, car c'est une syntaxe qui est acceptée quand on écrit une requête dans du VBA. Cela donnerait donc :

Set resultat = base.OpenRecordset("SELECT [tab especes complète].[nomVernaculaire] FROM [tab especes complète] WHERE ((([tab especes complète].code)='espèce'));" )  

ou

Set objReq = CurrentDb.CreateQueryDef("", "SELECT [tab especes complète].[nomVernaculaire] FROM [tab especes complète] WHERE ((([tab especes complète].code)='espèce'));" )

N.B. Il faut aussi éviter le plus possible d'utiliser des lettres accentuées et des espaces pour les noms des champs et des variables, mais la table semble déjà créée, donc c'est un peu tard maintenant.


Message édité par olivthill le 15-04-2010 à 09:44:50
Reply

Marsh Posté le 15-04-2010 à 09:49:42    

pour les espaces et les accents je ne prefere pas les modifié
et sinon j'ai corriger mon code mais le probleme est que l'enregistrement n'est pas reconnu
 
 

Code :
  1. Set resultat = base.OpenRecordset("SELECT [nomVernaculaire] FROM [tab especes complète]  WHERE code ='& chr(34) & espece & chr(34)';" )
  2.            
  3.   With resultat
  4.         If .RecordCount > 0 Then
  5.             .MoveFirst
  6.             While Not .EOF
  7.                 'res = !nomVernaculaire  pas sûr que autorisé
  8.                 res = .Fields("nomVernaculaire" )  ' est plus standard
  9.                 MsgBox res
  10.                 .MoveNext
  11.             Wend
  12.         Else
  13.             MsgBox "Pas d'enregistrement trouvé"
  14.         End If
  15.     End With

Reply

Marsh Posté le 15-04-2010 à 10:02:49    

Citation :

WHERE code ='& chr(34) & espece & chr(34)';" )

Oh là. maintenant, il y a trop de choses. Je suis désolé, mais ca ne va pas du tout. Il faut utiliser ma syntaxe.

Reply

Marsh Posté le 15-04-2010 à 11:06:06    

j'ai trouvé la solution la voici :  
 
"SELECT [tab especes complète].[nomVernaculaire] FROM [tab especes complète] WHERE [tab especes complète].code='" & espece & "';"
 
merci a touses pour votre aide


Message édité par vbaddict le 15-04-2010 à 11:06:35
Reply

Marsh Posté le 16-04-2010 à 10:11:01    

Fais gaffe à l'injection SQL :

Option Explicit
 
Public Function Pure(S As String) As String
 Pure = Replace(S,"'","''" )
End Function
 
'[...]
"SELECT [tab especes complète].[nomVernaculaire] FROM [tab especes complète] WHERE [tab especes complète].code='" & Pure(espece) & "';"


---------------
VB.NET is good ... VB6 is better !
Reply

Marsh Posté le 11-09-2013 à 17:05:09    

PigeonV a écrit :

Fais gaffe à l'injection SQL :

Option Explicit
 
Public Function Pure(S As String) As String
 Pure = Replace(S,"'","''" )
End Function
 
'[...]
"SELECT [tab especes complète].[nomVernaculaire] FROM [tab especes complète] WHERE [tab especes complète].code='" & Pure(espece) & "';"



 
Merci beaucoup, votre code m'a permis de regler ce problème avec la fonction pure (pour un champ texte).
par contre je n'arrive pas à tester pour un champ date ?
auriez vous cela en magasin ;-)
Voici ce que j'ai adapté selon votre code:
qry = "SELECT [tableSalle].[HEURE] FROM [tableSalle] WHERE [tableSalle].UF='" & Pure(sallecherche) & "' and [tableSalle].DATE=" & datecherche & ";"
 
sans le critère date, cela marche très bien, mais l'ajout de l'item datecherche (dim as date) ne me rends rien dans la recherche (çà ne plante pas, mais ne trouve aucun enregistrement !)
merci si vous êtes encore là...

Reply

Marsh Posté le 11-09-2013 à 18:14:13    

Bonjour,
??? je ne vois pas ma réponse/demande sur l'item ?
à moins que je n'ai pas su où le mettre pour apparaitre dans ce topic...
je cherche...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed