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

Langage Delphi Discussion :

Problème lors de transposition de table


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 10
    Points
    10
    Par défaut Problème lors de transposition de table
    Bonjour, je dois retailler une zone d'un fichier pour l'allonger. Je procède donc par duplication des données dans une table en sortie retaillée mais j'ai un souci avec une zone date qui passe mal dans certains cas. A première vue elle contient bien une date mais le format coince quelque part. Le pire c'est que c'est infime genre une date sur 80.000 mais elle génère le plantage et il faut que je la retape manuellement pour que ça passe.
    Quelqu'un aurait-t-il une solution pour contourner le problème ? Merci d'avance pour votre aide
    Bonne fin de journée

    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
     try
     While not TableIn.Eof do
     begin
      TableOut.Append;
      For NbChamp := 0 to TableIn.Fields.Count - 1 do
      begin
       if Not (TableIn.Fields[NbChamp].DataType = ftAutoInc) then
       begin
        NomChamp := TableIn.Fields[NbChamp].FieldName;
        If TableOut.FindField(TableIn.Fields[NbChamp].FieldName) <> Nil then
         TableOut[NomChamp] := TableIn[NomChamp];
       end;
      end;
      try
       TableOut.Post;
      except
       on E:Exception do
       begin
        MessageBox(Application.Handle,
                   Pchar('Erreur lors de l''enregistrement dans la base ' + TableOut.TableName + #13 +
                   E.Message),
                   'Transposition',
                   MB_OK or MB_ICONHAND);
        Exit;
       end;
      end;
      TableIn.Next;
     end;

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Quel type de fichier ?
    TTable ? Paradox, le changement de taille ne nécessite pas normalement de recopie de la table, les fonctions comme dbiRestructure le font très bien
    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
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Là tu m'intéresses car c'est effectivement du paradox et je n'ai que 2 zones en char à agrandir !

    J'ai fait des recherches sur cette fonction de restructuration et je n'ai rien trouvé surtout que je suis nulle en anglais so help me please ! Thanks

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    En fait j'ai des dates farfelues qui ressortent lors de la transposition de la table et Delphi n'aime pas trop ça !
    Il faudrait donc protéger ces zones date pour les faire passer en rusant quoi ...
    Je serais donc preneuse de toute solution allant dans ce sens
    Merci d'avance et bon week-end

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    J'en ai pas fait depuis longtemps du Paradox mais le SQL est supporté ! non ?

    En tout cas les exempels du Module de Base de Données semble le confirmé

    Par exemple, l’instruction suivante supprime deux colonnes d’une table Paradox :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE "employes.db" DROP NOM, DROP PRENOM
    il évoque aussi le ADD mais pour dbf

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE "employes.dbf" ADD NO_CONSTRUCT SMALLINT


    tente ceci depuis Module de Base de Données (ça fonctionne)

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE "C:\Dossier\2myParadoxEXE.DB" ADD NOUVELLECOL CHAR(255);
    UPDATE "C:\Dossier\2myParadoxEXE.DB" SET NOUVELLECOL = ANCIENNECOLTROPPETITE;
    ALTER TABLE "C:\Dossier\2myParadoxEXE.DB" DROP ANCIENNECOLTROPPETITE;

    puis test sur un TQuery, je crois que si DataBaseName est renseigné, il n'est plus nécessaire de mettre le chemin complet
    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

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Evangeline Voir le message
    En fait j'ai des dates farfelues qui ressortent lors de la transposition de la table et Delphi n'aime pas trop ça !
    avoir des dates farfelues dans un table devrait quand même t'interpeller ! cela semble anormal !

    plutôt que de faire un while not eof do etc... un batchmove aurait été efficace (et plus facile a coder)
    mais la solution de Shai est de toute façon bien meilleure que de se taper un programme pour faire le boulot , vive le SQL !

    petite remarque : il aurait bien de dire dans le titre de quel type de BDD il s'agissait , j'ai zappé une première fois ce post a cause de ça
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Les premières commandes passent bien, le programme crée la nouvelle colonne et y copie les données de l'ancienne, mais le alter table drop ou modifiy coincent, désolée !

  8. #8
    Fxg
    Fxg est actuellement connecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    Si c'est une utilisation unique pourquoi ne pas utiliser ce bon vieux module de base de données ?

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Parce qu'il faut faire la transpo sur toutes les bases de tous les utilisateurs de toute la France donc ça n'a rien d'unique malheureusement ...

    PS : en fait le drop fonctionne (je m'étais un peu plantée dans la syntaxe) mais pas moyen de renommer le champ comme avant !

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Oui pour revenir à la colonne d'origine c'est plus long
    tu veux alonger LACOL de 50 à 100 ça donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ALTER TABLE "C:\2myParadoxEXE.DB" ADD TMPCOL CHAR(255);
    UPDATE "C:\2myParadoxEXE.DB" SET TMPCOL = LACOL;
    ALTER TABLE "C:\2myParadoxEXE.DB" DROP LACOL;
    ALTER TABLE "C:\2myParadoxEXE.DB" ADD LACOL CHAR(100);
    UPDATE "C:\2myParadoxEXE.DB" SET LACOL = TMPCOL;
    ALTER TABLE "C:\2myParadoxEXE.DB" DROP TMPCOL;
    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

  11. #11
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    j'approuve shai a une exception près , un retaillage d'une colonne de 255 à 100 risque le lever une erreur de string truncation
    donc même procédure mais en gardant la même taille de colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ALTER TABLE "C:\2myParadoxEXE.DB" ADD TMPCOL CHAR(100);
    UPDATE "C:\2myParadoxEXE.DB" SET TMPCOL = LACOL;
    ALTER TABLE "C:\2myParadoxEXE.DB" DROP LACOL;
    ALTER TABLE "C:\2myParadoxEXE.DB" ADD LACOL CHAR(100);
    UPDATE "C:\2myParadoxEXE.DB" SET LACOL = TMPCOL;
    ALTER TABLE "C:\2myParadoxEXE.DB" DROP TMPCOL;
    heureusement qu'il faut agrandir la colonne et non pas la réduire
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #12
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Élémentaires mes chers ! Merci tout plein pour l'astuce

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

Discussions similaires

  1. Problème lors du remplissage des tables
    Par xinx1 dans le forum Modélisation
    Réponses: 2
    Dernier message: 18/04/2010, 14h21
  2. [10G] Problème lors de création de tables et champs
    Par keiserjo dans le forum Oracle
    Réponses: 7
    Dernier message: 28/09/2006, 12h14
  3. Problème lors de l'exportation d'une table
    Par romrai dans le forum Access
    Réponses: 4
    Dernier message: 04/07/2006, 14h35
  4. Réponses: 9
    Dernier message: 12/06/2006, 09h59
  5. Clé étrangère problème lors de la création de la table.
    Par snoopy69 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 18/08/2005, 08h15

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