Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1515 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Acc 2000] Requete ok mais recordset vide

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Acc 2000] Requete ok mais recordset vide

n°1952059
gocho
Posté le 21-12-2009 à 13:34:06  profilanswer
 

Bonjour bonjour,  
 
depuis qq heures maintenant, je m'arrache les cheveux sur un problème que je ne comprends pas.
J'ai une requete de sélection, "qryGet_blabla", plus simple c'est pas possible.
Ca prend l'ensemble des champs d'une table A.
Quand je l'execute seule, (en double cliquant dessus), pas de soucis elle me retourne bien un résultat.
 
Maintenant, je souhaiterais utiliser cette requete en vba, pour faire diverses opérations, notamment la filtrer
Je fais donc :  

Code :
  1. Set rec = oDb.OpenRecordset("qryGet_blabla", dbOpenDynaset, dbAppendOnly)
  2. rec.Filter = "Num_Contrat='" & Trim(txtNumContrat) & "'"
  3. Set rec2 = rec.OpenRecordset


 
Toutes les variables utilisées sont bien déclarées, pas de soucis pour ca (db et recordset).
txtNumContrat n'est pas null.
Je sais que le fait de créer 2 recordsets pour ca n'est pas optimisé, mais j'ai cherché à différencier au max pour voir si l'erreur venait pas de là.
 
Donc, le problème est :  
mon rec2 est vide, du coup la suite du traitement plante.
J'ai donc cherché pour voir si mon filtre était bien formé, apparemment oui. Donc je comprenais pas.
J'ai donc placé des espions sur les 2 recordsets à l'éxecution, et je me suis aperçu que rec était tout simplement vide (ce que j'ai vu aussi en passant sur le test rec.EOF)
 
Ma question est donc:  
pourquoi la requete en elle même fonctionne bien (et retourne une ligne), mais en l'ouvrant en vba, plus rien :-/
 
Quelqu'un aurait une idée?

mood
Publicité
Posté le 21-12-2009 à 13:34:06  profilanswer
 

n°1952115
olivthill
Posté le 21-12-2009 à 15:30:22  profilanswer
 

Cette façon de faire me parait bizarre.
 
Personnellement, j'utilise OpenrRecordSet() en indiquant dans le premier paramètre une vraie requête ("select ..." ou une variable contenant ce select), et non pas en indiquant le nom d'une requête stockée dans la base.
Par exemple :

Dim SQL_ligne As String
Dim bds As DATABASE, rst As Recordset
 
SQL_ligne = "SELECT Col1" & _
            " FROM table_toto " & _
            "WHERE Col2 = " & "'" & no_toto & "';"
' MsgBox (SQL_ligne) ' debug
Set bds = CurrentDb
Set rst = bds.OpenRecordset(SQL_ligne)
With rst
   If (.EOF) Then
      Call InsertNouveauToto
   Else
      Call UpdateToto
   End If
End With
rst.Close


 
Pour utiliser une requête stockée en base, il me semble qu'il faut procéder en utilisant QueryDefs(), Voici un exemple trouvé sur internet :

Set db = CurrentDb  
Set qdf = db.QueryDefs("MyQuery" )
 
'several syntaxes are possible  
qdf(0) = Me!MyControl  
qdf.Parameters(1) = 123  
qdf![forms!frmParameters!txtNewDate] = #2/2/98#  
 
Set rst = qdf.OpenRecordset()  

n°1952161
gocho
Posté le 21-12-2009 à 17:59:22  profilanswer
 

ah, pourtant ca fonctionne plutot pas mal d'habitude.
C'est la seule qui ne veut pas fonctionner, pour une raison que j'ignore :-/
Mais effectivement, je suis passé avec les querydefs et ca marche.
 
Maintenant, si quelqu'un à une réponse sur le pourquoi du comment, j'suis preneur :)

n°1952179
breizhbugs
Posté le 21-12-2009 à 18:50:30  profilanswer
 

Peut être que le symbole de commentaire " ' " fout la merde;
olivthill l'utilise différemment de toi en tout cas.
-> rec.Filter = "Num_Contrat=" & "'" & Trim(txtNumContrat) & "'"
?

n°1952227
gocho
Posté le 21-12-2009 à 21:34:40  profilanswer
 

ben normalement, ca devrait rien changer ?  
il sera toujours collé au =, et juste avant la valeur non?
ou alors je vois pas un truc lol

n°1952265
breizhbugs
Posté le 22-12-2009 à 01:24:22  profilanswer
 

Bon d'apres http://bytes.com/topic/access/answ [...] -recordset il faudrait que tu ouvre un autre recordset pour voir les resultats!
Edit: ben tu as l'air de le faire pourtant!


Message édité par breizhbugs le 22-12-2009 à 01:33:21
n°1952290
gocho
Posté le 22-12-2009 à 09:57:33  profilanswer
 

oui, c'est ce que j'ai fait.
Il me semble qu'en reutilisant le meme, ca devrait fonctionner aussi, mais dans le doute j'ai preferé séparer les deux.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Acc 2000] Requete ok mais recordset vide

 

Sujets relatifs
[Access] Requete "imbriquée"[DB2] extraction de database reste vide sur DB V7
[Resolu] Requête SQL utra-looooongue...INSERT avec sous requete
probleme affichage suite a une requeteEntrer des données dans un tableau initialement vide
Requête double en MySQLProblème requête ACCESS
clé étrangère vide 
Plus de sujets relatifs à : [Acc 2000] Requete ok mais recordset vide


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR