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

Bases de données Delphi Discussion :

Delphi et Excel ADO


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Par défaut Delphi et Excel ADO
    Bonjour à tous (tes)

    En essayant de récupérer des codes alphanumériques à partir d'un classeur Excel via ADO dans une appli Delphi, je ne trouve pas la même info que sur le classeur.
    Voici un exemple :

    Sur la feuille Excel : e :=3.18173E+12

    Et lors de la lecture dans mon appli Delphi, j'ai cette valeur : 3.1817300594e+012

    Et je voudrais bien convertir cette valeur en décimal, car, en fait, elle représente un code à barre.

    Merci bcp.

    Outils : Win10, Delphi 7, ADO, Excel 2007, Firebird 2.5

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 097
    Par défaut
    ADO ou OLE, il y a des différences de valeur (précison, langue local ou langue systeme, ...)

    Dans le fichier Excel, la valeur exprimée en exponent est inexploitable, est-ce que la donnée est complète si sur Excel, tu forces un format numérique sur 13 caractères
    Un numérique de 13 caractères en ADO ou OLE, pas sûr qu'il retourne un Int64 correctement donc je privilégierais une transformation de la colonne en texte pour importer ce catalogue de EAN13

    Sinon, parfois, il est plus simple depuis Excel d'exporter un CSV et d'importer ce dernier, c'est nettement plus rapide
    La conversion peut se faire par programmation via un SaveAs mais le changement de format de colonne est un peu plus délicat, si ce fichier Excel est importé toujours par tes soins, tu peux donc faire ça manuellement.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 660
    Billets dans le blog
    65
    Par défaut
    Bonjour
    Citation Envoyé par akli_agha Voir le message
    Sur la feuille Excel : e :=3.18173E+12
    Et je voudrais bien convertir cette valeur en décimal, car, en fait, elle représente un code à barre.
    J'ai déjà eu une expérience semblable avec un fichier venant de GS1, bien que ce ne fut pas sur le code barre GS1 lui même mais sur la référence interne entreprise (elle aussi en 13 chiffres)
    Il me fut impossible de récupéré le dit chiffre et j'ai été obligé de modifier la codeification de la référence interne chez GS1 (en fait ma référence interne contient désormais un groupe de lettre au début) ainsi Excel (qui pour moi est le coupable) interprète dorénavant la colonne comme étant texte.

    Il y a certainement une option quelque part qui forcerait Excel a interpréter correctement l'exponentielle sans perte de précision mais une chose est sûre cela ne vient pas de ADO, ni de ce que j'ai utilisé lors de cette expérience malheureuse à savoir : CDATA Firedac Excel xlsx (excellent malgré quelques petits désagréments à cause des mises en page : multilignes de certaines colonnes ou colorations de lignes paires/impaires)

    une solution à essayer une formule dans le tableau =CONCATENATE(cellule) ou =TEXT(cellule, "0") ... à vérifier

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 001
    Par défaut
    J'ignore si ça peut apporter un début de solution mais pour qu'Excel considère un chiffre comme du texte, il faut lui mettre un simple quote au début.
    0123456 => deviendra 123456
    '0123456 => restera 0123456

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 660
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par popo Voir le message
    J'ignore si ça peut apporter un début de solution mais pour qu'Excel considère un chiffre comme du texte, il faut lui mettre un simple quote au début.
    Dans mon cas, le fichier xlsx était une remontée de GS1 donc c'était déjà trop tard (d'où ma correction de tout le fichier, quelques milliers de codes quand même, avec un groupe de lettre au début)

    à l'époque je n'ai pas cherché plus loin et donc pas tester les deux formules citées, j'ai peur qu'il y ait perte de précision quand même mais faut voir !

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 493
    Par défaut
    salut

    en forçant simplement la cellule en format texte tout les donnée fournis reste en format texte
    par-contre si tu laisse la cellule en standard il converti implicitement en chiffre

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    2 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2 310
    Par défaut
    Citation Envoyé par akli_agha Voir le message

    Et je voudrais bien convertir cette valeur en décimal, car, en fait, elle représente un code à barre.
    S'il s'agit de codes-barres, il ne faut pas les traiter dans Delphi comme des "valeur en decimal" (que je suppose être un integer), mais comme un string (une chaîne de x caractères)

  8. #8
    Membre éclairé
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Par défaut
    Pbm résolu. Merci pour vos interventions.

    En fait, il fallait formater en texte mais pas dans le menu contextuel Format de cellule mais, plutôt, dans le groupe Données|Convertir ... ! Là, les cellules sont restées telles qu'elles et aucune conversion n'est faite.

    Je ne comprends pas cette différence !!

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

Discussions similaires

  1. connexion Delphi-ORACLE avec ADO
    Par hrezzaz dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/03/2006, 14h27
  2. [win32] delphi importation excel
    Par pier dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/09/2005, 15h27
  3. [DELPHI 2005] Paramètre ADO, SQL Server et chaîne vide (' ')
    Par danbern dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/08/2005, 15h21
  4. [MS SQL Server 2000 - Delphi 6 Ent. - ADO ]
    Par paca_mike dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/07/2005, 20h27
  5. [Delphi 2005/Oracle/ADO]Taille de champ incorrecte
    Par Frank dans le forum Bases de données
    Réponses: 20
    Dernier message: 15/04/2005, 14h12

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