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 :

Conversion type de données et Jointures


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Conversion type de données et Jointures
    Bonjour,

    J'utilise une base Access avec comme sources de données des fichiers Excel.
    Je dois faire une jointure sur deux tables. Dans la table A la variable est de type 0031 dans la table B il est écrit 31.
    Quand les deux variables sont de types texte la comparaison est fausse : logique - "0031" différents de "31"
    Le principal probléme c'est que le format de données d'un des fichiers ne peut être modifié est c'est celui qui est sous format texte.


    Auriez vous une idée de commencer régler ce problème. J'avais pensé à modifier 0031 en 31 mais comment le faire je l'ignore.

    Merci d'avance pour vos réponses.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    Forcer l'écriture de l'un des champs en le transformant avec la fonction Format([LeChamp],"0000").

    Cordialement,

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    madefemere merci d'avoir répondu à ma question.

    Je ne comprends pas la méthode que vous me suggérer ni ou est ce que je dois l'appliquer. Pourriez vous m'apporter un peu plus de précision svp ?

    Merci d'avance.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Est-ce que tu peux mettre à disposition ta base (ou les parties avec problème) compactée, zippée avec des données anonymisées pour qu'on parle bien de la même chose s'il te plait.

    Cordialement,

  5. #5
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    Salut madefemere et bienvenue Berda,

    Pour réaliser la jointure convenable il faut soit créer une nouvelle requête avec un nouveau champ formaté ou typé convenablement et l'utiliser comme table intermédiaire soit éditer le sql de la requête ; à la jointure ON [champ1]=[champ2] y ajouter le formatage, comme mentionné par madefemere, ou le convertir dans un type approprié :
    ON format([champ1]...)=[champ2] ou format([champ1]...)=format([champ2]...)
    ou utiliser val()


  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut mes fichiers
    Citation Envoyé par madefemere Voir le message
    Bonjour,

    Est-ce que tu peux mettre à disposition ta base (ou les parties avec problème) compactée, zippée avec des données anonymisées pour qu'on parle bien de la même chose s'il te plait.

    Cordialement,
    Bonjour,

    Merci pour vos réponses.

    J’ai mes deux fichiers Excel stocks.xls et matiere.xls
    Tous les champs dans stocks.xls ont les formats souhaités. Donc mat_code_matiere s'exprime en 123 ou 14 ou 1589 par exemple
    Tous les champs dans matiere.xls sont au format texte (donc quand je les importe dans Access ils sont tous au format texte) et in2_code_matiere s'exprime toujours sur 4 chiffres : 0123 ou 0014 ou 1589 par exemple.
    Quand j’importe les deux fichiers dans ma base Access je dois faire la requête :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT  Stocks.MAT_LIB_MATIERE, Stocks.[SUM(STO_QTE_REELLE)]
    FROM MATIERE INNER JOIN CInt(MATIERE.IN2_CODE_MATIERE) = Stocks.MAT_CODE_MATIERE
    WHERE ------
    ORDER BY Stocks.MAT_CODE_MATIERE DESC;

    Quand je fais la solution que vous me proposer CInt(MATIERE.IN2_CODE_MATIERE) = Stocks.MAT_CODE_MATIERE ça fonctionne quand je fais en affichage SQL.Celle-ci fait la jointure entre les deux tables au niveau des variables mat_lib_matiere et in2_code_matiere.Dès que je reviens en affichage "mode création" il y a plus de jointure entre les deux tables et il y a incohérence dans une expression lorsque j’exécute la requête.Donc cette solution ne me convient pas.

    Avez vous d'autres propositions svp ?

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par vodiem Voir le message
    Salut madefemere et bienvenue Berda,

    Pour réaliser la jointure convenable il faut soit créer une nouvelle requête avec un nouveau champ formaté ou typé convenablement et l'utiliser comme table intermédiaire soit éditer le sql de la requête ; à la jointure ON [champ1]=[champ2] y ajouter le formatage, comme mentionné par madefemere, ou le convertir dans un type approprié :
    ON format([champ1]...)=[champ2] ou format([champ1]...)=format([champ2]...)
    ou utiliser val()

    Je ne sais pas faire la requête intermédiaire mais j'ai essayé la méthode de conversion.

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par madefemere Voir le message
    Bonsoir,

    Forcer l'écriture de l'un des champs en le transformant avec la fonction Format([LeChamp],"0000").

    Cordialement,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CInt(REF_MATIERE.IN2_CODE_MATIERE AS INT) = NAE_stocks.MAT_CODE_MATIERE
    fonctionne pour que je puisse avoir mes résultats attendus mais dés que je me remets en affichage "mode création" sur Access ma jointure disparait et j'ai comme message :
    Microsoft Access ne peut pas representer l'expression de la jointure CInt(REF_MATIERE.IN2_CODE_MATIERE AS INT) = NAE_stocks.MAT_CODE_MATIERE en mode creation ....
    et je dois recommencer la conversion et la jointure et ça c'est pas commode puisque mes collègues qui s'y connaissent pas en BD vont l'utiliser et s'ils savent pas comment faire ils auront jamais les bons résultats.

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    Tu travailles avec des fichiers Excel en table attachée ?
    Fais-tu des mises à jour sur tes tables ?
    Si non, mon idée est de créer une nouvelle table T_Stocks avec la table mat_code_matiere et y modifier le champ MAT_CODE_MATIERE en texte avec un code du genre :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Format([MAT_CODE_MATIERE],"0000") AS CODEMATIERE, Stocks.........,.. Stocks. INTO T_Stocks
    FROM Stocks;

    Ensuite utiliser cette table T_Stocks à la place de la table attachée pour la liaison et comme source de ta requête.

    Cordialement,

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour madefemere,

    J'ai testé cette solution avant d'avoir vu ton post. Elle fonctionne mais j'enregistre des pertes de données du fichiers Excel quand j'enregistre certains champs sous d'autres formats que leur format d'origine. Pas toutes les données mais je perds une dizaine de ligne de ma table

    Les données je les importe dans des tables déjà existantes dans la base Access.

  11. #11
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    Et en créant une Requête R_Stocks avec un nouveau champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format([MAT_CODE_MATIERE],"0000") AS CODEMATIERE
    Est-ce que tu gardes toutes tes données,
    Et après utiliser cette requête en lieu et place de la table Stocks pour la liaison ? Cela donne quoi ?

    Cordialement,

Discussions similaires

  1. Conversion type de donnée
    Par ben1015 dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/12/2010, 14h19
  2. [AC-2007] Erreur conversion type de données
    Par Rapheux dans le forum IHM
    Réponses: 1
    Dernier message: 12/06/2010, 18h31
  3. erreur conversion type de données 3421
    Par sunwind dans le forum VBA Access
    Réponses: 1
    Dernier message: 05/05/2008, 16h27
  4. [Excel] Problème de conversion de type de données
    Par keiserjo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/07/2006, 12h26
  5. Réponses: 5
    Dernier message: 15/11/2005, 08h57

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