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

 Delphi Discussion :

Erreur : "000XX is not a valid integer value" après un StrToInt


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Kephuro
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 61
    Par défaut Erreur : "000XX is not a valid integer value" après un StrToInt
    Bonjour !

    Je travaille actuellement à l'importation de lignes d'un fichier excel que je traite pour les adapter à la structure de ma base de données.

    Le fichier Excel n'a pas été super bien exporté et il y a une colonne "Index" qui en principe contient des entiers.

    Sauf que sous Excel ces entiers sont de la forme : '000XXX.

    Pour traiter les ligne je procède de la façon suivante :
    - Je copie intégralement le fichier Excel avec sa structure dans une table temporaire sous Access
    - Je prend la première ligne, j'effectue des traitements et j'enregistre le résultat dans une autre table.

    Pour récupérer cette valeur d'index, j'utilise un TADOQuery et j'utilise la méthode AsString de TField (du DataSet de TADOQuery) pour me débarrasser de la quote.
    Le but étant de stocker la valeur de l'index sous forme d'entier sous Access.

    Donc je suis parti sur un StrToInt et j'ai le fameux message d'erreur. J'imagine que celà vient des '0' en début de chaine.

    J'ai regardé du côté des routines de formatage de chaînes de caractères mais celà n'a pas été très concluant. J'ai peut-être mal cherché, il faut dire que c'est un domaine plutôt vaste !

    Je précise également que modifier le fichier excel n'est pas une solution, car ce fichier devra être importé régulièrement (avec des données différentes, bien entendu) et je ne veux pas que les utilisateurs soient contraints d'effectuer eux-mêmes ce genre de traitements.

    Est-ce que vous auriez une petite idée, ou un avis sur mon problème ?

    Je vous remercie d'avance pour l'aide que vous pourrez m'apporter

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 165
    Par défaut
    dsl je n'ai pas tout lu...

    mais peut etre pourrais tu utiliser un StrToIntdef pour securiser ton code.

    Il permet d'affecter une valeur par défaut si la conversion foire.

    A+


    ps: pour ton traitement j ai l impression que tu te compliques bcp la tache. Transforme donc ton fichier excel en fichier CSV et parse le comme un fichier text pour l integrer à ta bdd ensuite

  3. #3
    Membre confirmé Avatar de Kephuro
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 61
    Par défaut
    Je n'ai pas de soucis pour intégrer le fichier excel à la base, c'est juste pour retraiter les données derrières.

    Ca me prendrait trop de temps pour coder un truc qui convertit le fichier Excel en CSV, surtout qu'après les valeurs que vais récupérer seront toutes en format texte, et le problème resterait identique

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Peux tu nous montrer la partie de ton code où cela plante ? (pas que la ligne, un peu avant et après pour ce faire une idée)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre confirmé Avatar de Kephuro
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 61
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Peux tu nous montrer la partie de ton code où cela plante ? (pas que la ligne, un peu avant et après pour ce faire une idée)
    Bien sûr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    while not Query.Eof do  //Query intègre le fichier excel
      begin
      aFacture:=TFacture.create; //Les données du fichier Excel doivent être intégrée dans un objet de type Tfacture
      with aFacture do
      begin
        FConsommation:=Query.FieldByName('Conso').AsInteger;
        FDateReleve:=Query.FieldByName('Date Releve').AsDateTime;
        FRAE:=Query.FieldByName('RAE').AsString;
        indexPDL:=LesPDL.existe(@ExisteByPdl,Query.FieldByName('RAE').AsVariant);
        if indexPDL<>-1 then
        begin
          FIDArmoire:=TPdl(LesPDL.items[indexPDL]).idarmoire;
        end
        else
        begin
          FIDArmoire:='0';
        end;
     
        FIDMemoire:=Query.FieldByName('Ref Memoire').AsString;
        FMontantAboHT:=Query.FieldByName('AbonnHT Total').AsCurrency;
        FMontantConsoHT:=Query.FieldByName('Mt Conso HT').AsCurrency;
        FMontantTotalTTC:=Query.FieldByName('Total TTC').AsCurrency;
     
        try
          test:=Query.FieldByName('Nouvel Index').AsString; //Test contient une string sous format '00XXX'
        //(Exemple : test contient '00000'
        FIDNewIndex:=StrToInt(test); //Ligne qui génère l'exception
        //(Exemple : "EConvertError with message '00000' is not a valid integer value"
        except
          FNewIndex:='0';
        end;
     
        oldFrais:=Query.FieldByName('Frais Occ HT CSPE').AsCurrency;
        FTVATotale:=Query.FieldByName('TVA Totale').AsCurrency;
        FCSPE:=StrToCurr(FormatFloat('0.00', 0.0045*aFacture.Consommation));
        FFraisOccHT:=oldFrais-aFacture.CSPE;
      end;
    N'hésitez pas à me demander de préciser certaines choses, j'imagine que ce doit être assez imbuvable

    Citation Envoyé par Targan
    je n ai pas tout suivi.....si tout est en texte ensuite pk faire une conversion ?
    En fait je suis obligé d'importer en texte, parce que dans Excel il y a une quote devant certaines valeurs. Mais à terme la valeur de NewIndex doit être de type integer.

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Essai comme çà

    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FIDNewIndex:=StrToIntDef(Trim(test),-99999);
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 165
    Par défaut
    je n ai pas tout suivi.....si tout est en texte ensuite pk faire une conversion ?

    Pour un passage excel -> csv soit tu le fais directement avec excel a la mano, soit tu utilises des compos qui font ca tres facilement en 3 lignes de codes.

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

Discussions similaires

  1. 'variable' is not a valid integer value
    Par juin29 dans le forum Toad
    Réponses: 3
    Dernier message: 21/07/2009, 21h11
  2. [MySQL] Erreur "supplied argument is not a valid"
    Par ptitelolo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/05/2008, 08h21
  3. [MySQL] Erreur "supplied argument is not a valid MySQL result resource"
    Par lilemy dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 29/06/2007, 14h47
  4. Erreur supplied argument is not a valid MySQL resource
    Par abidi_niz dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 06/09/2006, 13h26
  5. erreur: pg_query() 5 is not a valid PostgreSQL link resource
    Par david_chardonnet dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 10/06/2005, 13h50

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