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 :

Différence de résultats d'une requête entre OpenQuery et ADO


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 38
    Par défaut Différence de résultats d'une requête entre OpenQuery et ADO
    Salut à tous !

    Je crois que je vais devenir fou !!! Toute aide sera donc la bienvenue

    Voici quel est mon problème : j'ai une requête que j'exécute à partir de mon code vba en utilisant ADO et elle me retoure qu'une partie des résultats. Comme mes fonctions ADO sont dans une dll, je recode en vba en utilisant les méthodes Execute des objets Connection et Command car le pb pouvait venir du composant. Toujours le même problème. Je décide de faire un OpenQuery et la ca fonctionne !! ou si je copie-colle le sql de la requête dans l'éditeur et que j'exécute la requête, c'est bon également.

    J'en ai vraiment marre

    Merci pour votre aide !

  2. #2
    Membre chevronné
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Par défaut
    salut,

    le mieux c'est de poster ton code ADO ici non ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 38
    Par défaut
    Le code est assez simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim con As New ADODB.Connection
    Dim cmd As New ADODB.Command
     
    Set con = CurrentProject.Connection
    Call con.Execute(strSQL, , ADODB.adExecuteNoRecords)
    Set con = Nothing
     
    Set cmd.ActiveConnection = CurrentProject.Connection
    cmd.CommandText = strSQL
    cmd.Execute
    Set cmd = Nothing
     
    DoCmd.OpenQuery "nom_requete"
    Ma requête ajoute des enregistrements dans une table. Que strSQL contienne les instructions SQL ou le nom de la requête, je n'ai qu'une partie des lignes qui est insérée. Seul l'appel OpenQuery fonctionne correctement.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 38
    Par défaut
    Bonne nouvelle : j'ai trouvé d'où venait le problème ! je vous rassure je n'ai pas cherché pendant tout ce temps

    Cela vient de mon LIKE avec des caractères '*' dans mon expression.

    Par contre ce que je ne comprends pas c'est quand j'enregistre ma requête dans Access elle retourne bien les bons résultats si je la lance directement ou via du code vba avec un OpenQuery. En revanche, quand je l'appelle avec ADO, le caractère '*' n'est plus pris en compte (il faut que je le remplace par '%').

    D'où ma question : c'est quoi ce délire ?

    Je pensais qu'en enregistrant mes requêtes dans la base, je devais écrire le SQL pour la base cible et non pas en fonction de comment elles sont appelées (via ADO, DAO, etc). Donc la je dois mettre des '%' pour que mes appels à la requête avec ADO soient corrects et si j'ouvre Access pour tester ma requête je dois mettre des '*'.

    J'en profite également pour vous demander ce qui est le mieux sous Access lorsqu'on doit utiliser des tables d'une autre base : des tables liées ou des requêtes SQL direct ? niveau performance c'est identique ?

  5. #5
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonjour,
    C'est plutot étrange. Je vais devoir vérifier mon code.
    Sinon dans cet article microsoft article microsoft ils disent que "%" et "_" ne sont utilisables que dans ADO. Par contre je n'ai aucune mise en garde à propos de "*" et "?" dans ADO.
    Je vais faire des tests.
    A+

  6. #6
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    HellBill,
    J'utilise Access2000/Jet 4.0, et j'arrive à la même conclusion que toi.
    Avec ADO il faut utiliser les wildcards '%' et '_' avec LIKE.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 38
    Par défaut
    Merci pour l'article.

    Effectivement :
    The "%" and "_" wildcard characters in the previous table can be executed only through the Jet OLE DB provider and ADO. They will yield an empty result set if used through the Access SQL View user interface.
    C'est le genre de truc vraiment exaspérant. Suivant l'api utilisée les caractères sont interprêtés différemment.

    J'aime Access

  8. #8
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Non c'est compréhensible.

    DAO a été créé pour travailler avec Jet, le mteur d'Access. Il utilises donc le caractères %

    En revanche, ADO est orienté multi SGBD, il utilise donc le caractère plus générique %

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 38
    Par défaut
    Ok. J'avoue que c'est un peu confus pour moi entre Access et Jet. En fait quand on enregistre une requête dans Access, ca fait :
    Requete Access -> DAO -> Jet (?)

    Je pensais que la requête était directement prise en compte par Jet.

    En tout cas merci !

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

Discussions similaires

  1. [MySQL] [PDO] Compter résultat d'une requête ayant plusieurs variables en entrée
    Par willm_007 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/03/2015, 21h31
  2. [2008R2] Nombre de résultats d'une requête différent entre deux exécutions
    Par maxwell374 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/02/2015, 17h39
  3. [MySQL] Résultat insuffisant pour la différence deux dates avec une requête mysql
    Par onesat dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/08/2014, 13h14
  4. [AC-2007] Filtre entre 2 formulaires faisant varier le résultat d'une requête
    Par Lyysis dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/07/2013, 13h53
  5. [SQL] Différence d'exécution d'une requête entre phpmyadmin et php
    Par lodan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 31/08/2006, 15h56

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