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

Access Discussion :

Mystère de requêtes SQL dans un contexte Access-SQLServer


Sujet :

Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Mystère de requêtes SQL dans un contexte Access-SQLServer
    Salut,

    Je présente ici un mystère technique au sujet de SQL Server et Access que je voudrais bien comprendre, histoire de me rassurer. En simplifiant le contexte, disons que je requête une table Noms sur SQL Server à travers une table liée TbeNoms dans Access en appliquant éventuellement un filtre à travers un paramètre du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * From TbeNoms Where (Nom = Param Or Param Is Null)
    Tout se déroule bien mais maintenant, si je modifie la requête comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * From TbeNoms Where (Nom = Param Or Param Is Null) = TRUE
    Je reçois un erreur “ODBC – L’appel a échoué”

    Les deux requêtes sont pourtant parfaitement identiques et valides du point de vue strictement SQL. Que se passe-t-il exactement ? Si vous pouviez éclairer ma lanterne… Merci

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Les appels ODBC sont toujours un peu délicats au plan syntaxique, notamment les appels de fonctions.
    On ne maîtrise pas toujours très bien "l'endroit" où les expressions sont évaluées:
    (a) sur le client dans la moulinette ODBC ?
    (b) ou bien sur le serveur ?

    Je pense que la deuxième requête pose un problème de cet ordre et le "sous-système" qui implémente ODBC préfère jeter le gant.

    Citation Envoyé par Samuel Galan Voir le message
    Les deux requêtes sont pourtant parfaitement identiques et valides du point de vue strictement SQL.
    Je ne connais personne qui code le SQL comme dans ta deuxième requête.

    Ne serait-ce pas un faux problème ?

    Par ailleurs, tu peux aussi créer une requête SQL direct qui utilise la syntaxe native du SGBD cible, et sans interférence de la part d'ODBC.
    _

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Salut =JBO=,

    Je sais bien que personne ne code ainsi en SQL, pas même moi-même, mais on a hérité de quelques requêtes de ce genre.

    La question est que puisque nous nous adressons à SQL Server à travers des tables liées ODBC, je pensais que les requêtes étaient toujours exécutées du côté client, jamais du côté serveur et dans ce cas, les deux syntaxes devraient être correctes puisque les deux sont comprises par Access quand on attaque des tables Access.

    Apparemment, quelque chose est faux dans mon raisonnement

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par Samuel Galan Voir le message
    Apparemment, quelque chose est faux dans mon raisonnement
    Le raisonnement n'est pas en cause, mais c'est plutôt une hypothèse qui n'est pas forcément vérifiée:
    Citation Envoyé par Samuel Galan Voir le message
    La question est que puisque nous nous adressons à SQL Server à travers des tables liées ODBC, je pensais que les requêtes étaient toujours exécutées du côté client, jamais du côté serveur ...
    Et voilà !... l'analyseur tente de déléguer au serveur un maximum de travail, comme par exemple filtrer les lignes pour les champs dont la valeur est comparée à des constantes ou à la valeur d'un autre champ de la même table.
    Théoriquement, ODBC va faire passer ces conditions au serveur pour une utilisation côté serveur.

    A ce stade, il faut que le sous-système ODBC puisse "traduire" correctement la syntaxe SQL avant de l'envoyer au serveur, et c'est là qu'il échoue !

    Une idée peut-être...
    Utiliser un provider OLEDB à la place de l'ODBC.

    Maintenant, si il faut juste vérifier la syntaxe de 10 requêtes, je pense que tu auras plus vite fait de les contrôler et les modifier !

    Bon courage.
    _

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Salut =JOB=,

    Je confirme. Après avoir découvert que je pouvais obtenir un Log des appels ODBC, je peux maintenant affirmer que la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Select * From TbeNoms Where (Nom = Param Or Param Is Null) = TRUE
    est envoyée au serveur sous la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Select * From TbeNoms Where NOT ((Nom = Param Or Param Is Null) = 0)
    Or, SQL Server refuse ce type de syntaxe et signale une erreur sur = 0.

    SQL Server trouve donc ridicule la tournure Where (Condition) = 1 et la rejette, même si elle est correcte du point de vue SQL.

    Merci

  6. #6
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 229
    Points : 266
    Points
    266
    Par défaut
    En ce qui concerne les logs des appels ODBC, comment fais-tu pour les obtenir ?

    Merci

Discussions similaires

  1. exécution d'une requête SQL dans access
    Par skyarnangel dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/02/2009, 11h18
  2. Problême requête SQL dans access..Erreur 3079
    Par DavidGG dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/01/2008, 17h48
  3. Réponses: 13
    Dernier message: 28/09/2007, 11h55
  4. Requête SQL dans l'entête d'un ETAT ACCESS
    Par dchaillot dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 25/01/2006, 13h04
  5. Réponses: 2
    Dernier message: 06/06/2005, 15h13

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