manu_katz
Messages postés7Date d'inscriptionsamedi 9 octobre 2004StatutMembreDernière intervention29 novembre 2004
-
17 nov. 2004 à 15:50
manu_katz
Messages postés7Date d'inscriptionsamedi 9 octobre 2004StatutMembreDernière intervention29 novembre 2004
-
29 nov. 2004 à 02:06
Bonjour à tous,
Voici mon problème : je travaille sur une application Visual Basic 6.0 qui est connecté par ODBC avec une base ACCESS 2002. Or, certaines requêtes que je teste sous Access fonctionnent parfaitement et, quand je les utilise avec VB, ne renvoient aucun résultat (mais ne correspondent pas à un EOF()).
Prenons un exemple, je recherche les enregistrements compris entre telle date et telle date. La requête SQL sous access me donne bien des enregistrements. La même requête passé sous VB en utilisant la connexion ODBC me spécifie que je ne suis pas en EOF (donc, pas en fin de fichier, donc j'ai bien des résultats) mais me donne un .recordcount = -1 !
Ceci se produit également lorsque j'utilise le caractère générique * avec un LIKE dans ma requête (pour afficher tous les enregistrements contenant une certaine chaîne de caractères, par exemple).
J'avoue ne pas comprendre pourquoi les résultats sont différents entre les 2 méthodes (Access tout seul d'un côté et VB qui pilote une base Access d'autre part).
Certains ont-ils déjà constaté des symptômes similaires et, si oui, ont-ils trouvé la solution à ce problème ??
gandalflegris007
Messages postés211Date d'inscriptionlundi 31 mars 2003StatutMembreDernière intervention11 juin 2007 17 nov. 2004 à 15:58
salut Manu,
je ne vais pas t'être d'un ultime secours mais si ça peut t'aider à te décoincer :
j'ai déjà été confronté à des soucis sur des requêtes basées sur des paramètres date. Et bien souvent ça vient du format.
exemple :
Dim MaDate as date
select * from matable where ladate = #" & madate & "#;"
il y a des chances qu'il ne te sorte pas les bons résultats.
par contre
select * from matable where ladate = #" & format(madate,"m/d/yyyy" & "#;"
te donne des résultats corrects.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 17 nov. 2004 à 16:14
Salut,
Pour le caractere generique * avec like, essaie de le remplacer par %
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
manu_katz
Messages postés7Date d'inscriptionsamedi 9 octobre 2004StatutMembreDernière intervention29 novembre 2004 18 nov. 2004 à 00:02
Alors, je viens d'essayer tout ça et je vous livre mes conclusions :
Concernant le caractère générique, il faut effectivement utiliser % au lieu de *. C'est d'autant plus étrange que sous access, il reconnaît * comme caractère générique à utiliser avec LIKE et non % ! En tout cas, merci à toi pour cette aide, jrivet.
Concernant mes problèmes de date, j'ai essayé ta proposition, gandalflegris007, mais elle donne le même résultat que celle que j'utilise. Je continue mes recherches, il doit y avoir autre chose qui cloche. Quoiqu'il en soit, merci aussi pour ton aide.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 23 nov. 2004 à 09:27
salut,
je sais pas si ca va pouvoir t avancer mais pour tester si un recordset est vide tu peux essayer aussi :
If rs.BOF and Rs.EOF Then msgbox "Rs est vide"
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
manu_katz
Messages postés7Date d'inscriptionsamedi 9 octobre 2004StatutMembreDernière intervention29 novembre 2004 23 nov. 2004 à 10:06
Ben, le problème c'est que mon recordset n'est pas vide puisque je teste rs.EOF() pour savoir si je poursuit l'exécution. Or :
- quand je reçois moins de 100 réponses à ma requête, ma commande rs.EOF() me spécifie bien que j'ai des réponses et mon rs.RecordCount me ramène bien le bon nombre de réponses,
- quand je reçois 100 réponses ou plus à ma requête, ma commande rs.EOF() me spécifie bien que j'ai des réponses mais mon rs.RecordCount vaut -1.
J'ai bien trouvé une page sur internet qui semble prendre en compte ce problème (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/office97/html/connectionstrategies.asp, paragraphe Limiting Dynasets to 100 Records et suivant) mais je ne comprends pas trop ce que je dois faire. Il me semble qu'ils parlent d'utiliser 2 recordset au lieu d'un seul mais l'explication est peu claire. Ils parlent aussi de faire un rs.MoveLast avant toute chose pour prendre en compte tous les enregistrements mais je le fais déjà.
manu_katz
Messages postés7Date d'inscriptionsamedi 9 octobre 2004StatutMembreDernière intervention29 novembre 2004 28 nov. 2004 à 10:48
Personne d'autre que moi n'a constaté ce problème ??
Vous ne recevez jamais plus de 100 réponses à vos requêtes ou quoi ? :big)
A moins que ce soit lié à un mauvais paramétrage de ODBC mais, dans ce cas, je ne vois pas à quel endroit je peux préciser le nombre maxi de réponses à gérer...