IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

[VBA - ACCESS 2002] Problème RecordSet/Requête SQL


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut [VBA - ACCESS 2002] Problème RecordSet/Requête SQL
    Bonjour,
    Je vais essayer de vous exposer mon problème, moi je ne vois vraiment pas ce qui ne vas pas.

    Déjà, petite mise en situation :
    Je possède deux bases, dont la structure des tables est strictement identique.
    En fait, des données sont saisies dans une des bases, puis une fois vérifiées, ces données sont transférer dans l'autre base. Ceci pour être sûr que les données de la seconde base sont correctes.

    Jusque là, aucun problème

    Voici une partie de mon code pour le transfert d'une base à l'autre :

    MonRSJOURNEE correspond à la base de données courante.
    MonRSJOURNEEExterne et MaBDDExterne correspondent à ma deuxième base de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MonRSJOURNEEExterne = MaBDDExterne.OpenRecordset("SELECT * FROM JOURNEE WHERE AGENUME = " & MonRSJOURNEE.Fields("AGENUME").Value & " AND JOUDATE = " & MonRSJOURNEE.Fields("JOUDATE").Value & ";")
    Et là, mon RecordSet nommé MonRSJOURNEEExterne est vide, hors il devrait contenir UN enregistrement.


    Je change un peu ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MonRSJOURNEEExterne = MaBDDExterne.OpenRecordset("SELECT * FROM JOURNEE WHERE JOUDATE = " & MonRSJOURNEE.Fields("JOUDATE").Value & ";")
    => Je simplifie pour me pencher uniquement sur le champ JOUDATE. Résultat : idem


    Maintenant, si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MonRSJOURNEEExterne = MaBDDExterne.OpenRecordset("SELECT * FROM JOURNEE WHERE AGENUME = " & MonRSJOURNEE.Fields("AGENUME").Value & ";")
    Je me penche cette fois uniquement sur le champ AGENUME. Là, tout fonctionne bien


    Donc je me dis que le problème viens du champ JOUDATE... Mais...
    Si je rajoute ça ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If MonRSJOURNEEExterne.Fields("JOUDATE").Value = MonRSJOURNEE.Fields("JOUDATE").Value Then
        MsgBox "OK"
    Else
        MsgBox "NOK"
    End If
    Alors le message OK s'affiche, donc MonRSJOURNEEExterne.Fields("JOUDATE").Value = MonRSJOURNEE.Fields("JOUDATE").Value
    Alors si dans mon IF les deux valeurs sont identiques, pourquoi dans ma requête celà ne fonctionne pas ?

    Moi je ne vois vraiment pas du tout ce qui ne vas pas.

    J'éspère avoir été suffisament clair, mais si des incompréhensions subsistent, j'essayerais d'être plus explicite.

    Peut être que le problème viens d'une énormité tellement énorme que je ne la vois pas, mais je ne pense pas, ça fait plusieurs heures que je me prend la tête à tester dans tout les sens, et le problème subsite.


    Merci à ceux qui ont pris le temps de lire mon message, et merci d'avance à ceux qui je l'éspère vont m'aider à résoudre ce problème.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Oups, j'ai oublié de préciser ce cas là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MonRSJOURNEEExterne = MaBDDExterne.OpenRecordset("SELECT * FROM JOURNEE WHERE JOUDATE = 26/05/2006;")
    => Je précise directement une date, je sais que cette date est dans ma table, donc ça devrait fonctionner, mais vous l'aurez deviné, celà ne fonctionne pas.

    Le plus étrange, c'est que avec le champ AGENUME, celà fonctionne correctement, alors pourquoi ça ne veux pas avec le champ JOUDATE ?
    Pourtant, j'ai bien compris le fonctionnement des recordset, je les utilises beaucoup dans toute mon appli, et je n'ai aucun soucis nul part, sauf ici...

  3. #3
    Membre actif Avatar de Mariboo
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 254
    Points : 238
    Points
    238
    Par défaut
    AGENUM est de type numérique je suppose ...

    Essaye d'écrire ("JOUDATE") avec des quotes : ('"JOUDATE"')

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Merci,

    Je viens donc d'essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MonRSJOURNEEExterne = MaBDDExterne.OpenRecordset("SELECT * FROM JOURNEE WHERE JOUDATE = " & MonRSJOURNEE.Fields(" 'JOUDATE' ").Value & ";")
    => Sans espace entre " et ', là c'est pour la lisibilité du texte.
    J'obtiens alors le message suivant :
    Erreur d'exécution '3265', élément non trouvé dans cette collection.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Et effectivement, AGENUME est de type numérique, alors que JOUDATE est de type DATE.

  6. #6
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 46
    Points : 56
    Points
    56
    Par défaut
    les tests sur les valeurs dépendent du type

    test sur date ta valeur doit être entouré de # (attention dans du sql la valeur retournée est au format US mm/jj/aaaa)

    test sur valeur numérique pas besoin d'être entouré

    test sur valeur string entouré soit de ' soit de double "" (c'est pour pouvoir mettre un " dans un string sans qu'access croit que c'est un délimiteur de string).

  7. #7
    Membre actif Avatar de Mariboo
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 254
    Points : 238
    Points
    238
    Par défaut
    Heu oui pour date il faut # ...

    MonRSJOURNEE.Fields(" 'JOUDATE' ").
    et c'est pas comme ça qu'il faut l'écrire mais :

    MonRSJOURNEE.Fields(' "JOUDATE" ').

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MonRSJOURNEEExterne = MaBDDExterne.OpenRecordset("SELECT * FROM JOURNEE WHERE AGENUME = " & MonRSJOURNEE.Fields("AGENUME").Value & " AND JOUDATE = #" & MonRSJOURNEE.Fields("JOUDATE").Value & "#;")
    =>Impeccable, ça fonctionne !
    Merci à toi jujusoso
    Par contre, pour l'histoire du format mm/jj/aaaa, toutes mes dates sont au formats jj/mm/aaaa, et ça fonctionne quand même (m'enfin je ne m'en plains pas !).

    Sinon, Mariboo, j'avais essayé aussi MonRSJOURNEE.Fields(' "JOUDATE" '), mais là il me met une erreur, pas lors de l'exécution, mais lors de la création du code.


    J'ai un peu honte quand même, c'était tout simple, ce qui m'a embrouillé, c'est l'histoire du IF...


    Voilà, encore merci à vous 2

  9. #9
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 46
    Points : 56
    Points
    56
    Par défaut
    les dates marchent dans ton cas puisque tu n'as pas besoin de les trier mais si tu devais faire un tri croissant ou décroissant tu verais qu'access ferait n'importe quoi et qu'il faudrait passer par une bidouille pour bien y trier.

    enfin je dis ca mais je dis rien

    merkiss

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par jujusoso
    les dates marchent dans ton cas puisque tu n'as pas besoin de les trier mais si tu devais faire un tri croissant ou décroissant tu verais qu'access ferait n'importe quoi et qu'il faudrait passer par une bidouille pour bien y trier.
    OK, merci pour le renseignement, c'est toujours bon à savoir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Syntaxe requête SQL LIKE avec ACCESS
    Par Arnofish dans le forum Accès aux données
    Réponses: 3
    Dernier message: 22/12/2007, 11h57
  2. Problème avec requête SQL dans VBA
    Par Mimisio dans le forum VBA Access
    Réponses: 10
    Dernier message: 13/07/2007, 11h00
  3. [vba access] Pb d'execution requête SQL (requête simple)
    Par mike2302 dans le forum VBA Access
    Réponses: 9
    Dernier message: 28/06/2007, 14h58
  4. SQL dans VBA access 2002
    Par kryssy dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 28/06/2006, 21h25
  5. [VBA Access 2002][Débutant] Problème Recordset
    Par SamLeChiseuji dans le forum IHM
    Réponses: 11
    Dernier message: 08/06/2006, 08h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo