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 :

Requêtes avec beaucoup de champs vides à éviter.


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut Requêtes avec beaucoup de champs vides à éviter.
    Bonjour à tous.

    J'ai un petit problème, je suis chargé de construire une requête qui est basée sur 2 tables, jusque là tout va bien, mais quand je l'exécute, j'obtiens le message d'erreur suivant:"Data Type mismatch in criteria expression" (Version anglaise désolé lol).

    On m'a dit que cela pouvait venir du fait que dans une table j'ai plusieurs lignes avec seulement 2 champs de remplis( dont l'un est utilisé)...

    Si quelqu'un pouvait m'en dire plus...Merci beaucoup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Organisations.companyName, Sum((CDbl([price])*CDbl([qtyNet])*CDbl(Mid(Products.currencyConversion,8,6)))) AS Achats, Sum(Products.cartons) AS cartons
    FROM Organisations INNER JOIN Products ON Organisations.UID = Products.supplier
    WHERE (((Products.dateOfPurchase)>=#1/1/2007#))
    GROUP BY Organisations.companyName, Products.ledger
    HAVING (((Products.ledger)="purchase"))
    ORDER BY Sum((CDbl([price])*CDbl([qtyNet]))) DESC;

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 333
    Points
    34 333
    Par défaut
    Bonjour,
    tu peux gérer le cas des champs vides avec la fonction Nz(). Regarde donc l'aide en ligne pour l'adapter à ta requête SQL.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Merci JpCheck maisL'aide en ligne ne me parle pas trop

    C'est le bordel, j'ai déja fait des requêtes avec un iif vide alors 0, mais juste pour des calculs.



    Dans la présente requête, tous les champs de la table Products sont vides, à l'exception de ledger (Utilisé) et un autre (non utilisé)...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 333
    Points
    34 333
    Par défaut
    Ok, peux-tu nous indiquer les types des champs que tu appelles dans ta requête stp ?
    sinon, essaie de faire tourner cette requete dans la GUI, histoire de voir à quel niveau du SQL ca te jette.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    alors, voila la composition des tables, elle a été mal conçue à l'origine, d'où les nombreux cdbl():

    TABLE PRODUCTS

    - UID : Autonumber
    - Namedescription : Number
    - contractAssignment : Text
    - ParentPurchase : Number
    - DateofPurchase : date/Time
    - Coldstore : Number
    - Ledger: Text
    - Type : Text
    - Qtygross : Text
    - QtyNet : text
    - CurrencyConversion : Text
    - Price : text
    - Supplier : Nimber
    - Cartons: Text

    TABLE ORGANISATIONS

    - UID : Autonumber
    - CompanyName: Text
    - code: Text

    J'ai donc plusieurs enregistrements de la table Products dans lesquels seuls les champs Ledger et type sont renseignés.

    Jpcheck, qu'appelles tu GUI?

    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 333
    Points
    34 333
    Par défaut
    Re,
    tu ne peux additionner des champs texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sum(Products.cartons) AS cartons
    sera à remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sum(CDbl(Products.cartons)) AS cartons
    Le GUI : Graphic User Interface, soit l'interface graphique Access (par opposition au VBE, univers de développement où tu écris ton code.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Re,

    J'ai essayé ta solution, mais j'ai toujours le même message d'erreur...

    Le plus étrange est que cette requête a été écrite sur un autre fichier access, contenant une base à la structure identique(seules les données sont différentes), et que cette requête fonctionne sur la 1ere base...

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 333
    Points
    34 333
    Par défaut
    ok, et as-tu pu essayer dans l'interface graphique alors ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    euh...je vais faire mon boulet, mais essayer quoi ?

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 333
    Points
    34 333
    Par défaut
    cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Organisations.companyName, Sum((CDbl([price])*CDbl([qtyNet])*CDbl(Mid(Products.currencyConversion,8,6)))) AS Achats, Sum(CDbl(Products.cartons)) AS cartons
    FROM Organisations INNER JOIN Products ON Organisations.UID = Products.supplier
    WHERE (((Products.dateOfPurchase)>=#1/1/2007#))
    GROUP BY Organisations.companyName, Products.ledger
    HAVING (((Products.ledger)="purchase"))
    ORDER BY Sum((CDbl([price])*CDbl([qtyNet]))) DESC;
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Ca ne marche pas mieux, toujours ce fichu message.

    Comment fais tu pour voir où ca bloque?

  12. #12
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 333
    Points
    34 333
    Par défaut
    le curseur se place à l'emplacement de l'erreur en principe.

    edit : et qu'il y a-t-il dans ton chmaps currencyconversion ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Merci de ta patience jpcheck, tu veux parler du mode Design view ? (dsl version anglaise)(mode création en français si je ne m'abuse)

    Si oui, lorsque j'exécute la requête et que le message apparaît, le curseur ne bouge pas...

    dans le champs currencyconversion, il y a des données comme : " GBP at 1,34850" ou "EUR AT 1,00000"

  14. #14
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 333
    Points
    34 333
    Par défaut
    le . et la , sont importants il me semble :
    et bien essaie avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Organisations.companyName, Sum((CDbl([price])*CDbl([qtyNet])*CDbl(Replace(Mid(Products.currencyConversion,8,6))),',','.')) AS Achats, Sum(CDbl(Products.cartons)) AS cartons
    FROM Organisations INNER JOIN Products ON Organisations.UID = Products.supplier
    WHERE (((Products.dateOfPurchase)>=#1/1/2007#))
    GROUP BY Organisations.companyName, Products.ledger
    HAVING (((Products.ledger)="purchase"))
    ORDER BY Sum((CDbl([price])*CDbl([qtyNet]))) DESC;
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    En effet, les problèmes de séparateurs décimaux m'ont posé un problème dans un premier temps, la base étant d'origine anglaise, le point était utilisé et non reconnu par ma machine (access anglais mais paramètres régionaux windows français). J'avais donc effectué un rechercher/remplacer pour mettre des virgules à la place des points.

    En essayant ton code, j'obtiens un autre message d'erreur:

    "Syntax error (comma, donc virgule) in query expression
    Sum((CDbl([price])*CDbl([qtyNet])*CDbl(Replace(Mid(Products.currencyConversion,8,6))),',','.'))"

    J'ai essayé en remplaçant les virgules du replace par des ; , et même message d'erreur sans la précision "comma".

  16. #16
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 333
    Points
    34 333
    Par défaut
    j'ai loupé les parenthèses en fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Organisations.companyName, Sum((CDbl([price])*CDbl([qtyNet])*CDbl(Replace(Mid(Products.currencyConversion,8,6),',','.')))) AS Achats, Sum(CDbl(Products.cartons)) AS cartons
    FROM Organisations INNER JOIN Products ON Organisations.UID = Products.supplier
    WHERE (((Products.dateOfPurchase)>=#1/1/2007#))
    GROUP BY Organisations.companyName, Products.ledger
    HAVING (((Products.ledger)="purchase"))
    ORDER BY Sum((CDbl([price])*CDbl([qtyNet]))) DESC;
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  17. #17
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    Bonjour,

    A tout hazard, j'ai déjà rencontré ce problème et je m'en suis sorti en modifiant le paramètre symbol décimal du Panneau de configuration de ma machine.

    Peux tu vérifier que ton Paramètre Option Régionale Onglet Nombre Symbole décimal est bien un "." et si ce n'est pas le cas fait un test.

    @+

    Daniel

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Bonjour tout le monde.

    Jpcheck, je viens d'essayer la solution avec les parenthèses, et toujours pareil...

    Daniel, j'ai déjà pensé à faire ça, mais toutes les autres applications seraient perturbées. A la base, les séparateurs décimaux de la base étaient des points (données saisies depuis un logiciel anglais, et enregistrée sur un serveur anglais). Pour pouvoir les traiter sur mon poste paramétré pour la france, j'avais effectué un rechercher/remplacer, point par virgule. Si je laisse des points, plus rien ne fonctionne.

    Voici une copie d'écran de ma table products, et des quelques enregistrements vides qui y sont présents au début:


  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Rebonjour

    Je viens de tester les champs séparément, et apparemment, le champ qty net poserait problème.

    Je m'explique,
    J'ai essayé de faire les somme des price (avec cdbl), pas de soucis, et quand je rajoute la même somme pour qtynet (avec cdbl), le fameux message "date type mismatch in criteria expression"...

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Je confirme , ca bloque au niveau de ce champ

    Même une requête toute simple ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Products.supplier, Sum(([price])*CDbl([qtynet])) AS Expr1
    FROM Products
    GROUP BY Products.supplier
    HAVING (((Products.supplier) Is Not Null));
    Ce qui est étrange, c'est que le problème ne se manifestait pas sur la même base de l'année actuelle

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Toutes versions] Requête avec jointure et champ vide
    Par Mercusio dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 13/06/2013, 09h36
  2. Requête sur table avec beaucoup de champs
    Par Lideln75 dans le forum Requêtes
    Réponses: 16
    Dernier message: 04/12/2008, 02h37
  3. Requête sélection avec comme critère: champ vide
    Par droxyme dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/10/2007, 10h24
  4. Insertion,update dans une BD à table avec beaucoup de champs
    Par randriano dans le forum C++Builder
    Réponses: 29
    Dernier message: 13/03/2007, 19h11
  5. Formulaires de saisie avec beaucoup de champs?
    Par fredtheman dans le forum Delphi
    Réponses: 6
    Dernier message: 05/09/2006, 20h10

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