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

WinDev Discussion :

Tables vers fichier


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Octobre 2010
    Messages : 29
    Points : 22
    Points
    22
    Par défaut Tables vers fichier
    Bonjour à Tous

    J'ai concu une formulaire-table qui me permet de recuperer (importer) des données a partir d'un fichier excel et les afficher dans la table.
    La table contient 30colonnes et plus de 100.000 lignes en quelques sortes.
    Mon probleme est le suivant
    1 - Je voudrais sauvegarder cette table dans nouveau fichier qui n'existe pas.
    2 - Le nom du fichier a creer doit absolument contenir la date du jour de creation (pour eviter de le confondre)

    Exemple FILEOF02182012 (Fichier du 18 fevrier 2012)
    le suivant serq obligqtoirment FILE02192012 (celui du 19) et ainsi de suite

    Quelqu'un pourrait-il me placer sur le chemin, comment s'y prendre ?
    Ou si vous avez un code similaire permettant de sauvegarder une table en fichier FIC je l'adapterais a mes biesoins.
    Merci d'avance

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 136
    Points : 241
    Points
    241
    Par défaut
    Je n'ai pas de code tout fait mais je peux te proposer 2 pistes de solutions.

    1. Les fonction HChange*

    Si ta table à sauvegarder à toujours la même structure (c'et-à-dire les mêmes colonnes), tu peux créer un fichier dans l'analyse Windev qui contient le format HF que tu souhaites en sortie. Le nom de la table sera dans l'analyse STRUCT_FILEOF_EXCEL (par exemple).

    Dans le code, une fois la table remplie, il faut utiliser les fonctions HChangeNom / HChangeRep (Peut-être HAlias aussi) pour définir l'emplacement et le nom du nouveau fichier puis un HCreation pour créer le fichier.
    Il suffit ensuite de remplir le fichier avec des HAjoute().


    2. Créer le fichier dynamiquement

    Windev permet de créer des fichier HF de façon dynamique.

    Pour cela, il faut utiliser les types de variables :
    - "Description de fichier" pour définir le nom et le type de fichier
    - "Description de rubrique" pour définir chaque rubrique

    Pour créer une table "TEST.FIC" contenant une rubrique "Code" numérique et une rubrique "Libelle" texte on aura le code suivant (non testé) :

    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
    df_TableDesc 	est une Description de Fichier
    dr_ItemDesc 	est une Description de Rubrique
     
    // Description du fichier "CLIENT"
    df_TableDesc ..Nom 		= "TEST"
    df_TableDesc ..Type 		= hFichierNormal
    df_TableDesc ..CryptageFic	= hCryptageStandard
     
    // Description des rubriques
    dr_ItemDesc ..Nom 		= "Code"
    dr_ItemDesc ..Type 		= hRubEntier2
    dr_ItemDesc ..TypeClé 		= hCléUnique
    HDécritRubrique ( df_TableDesc , dr_ItemDesc )
     
    dr_ItemDesc ..Nom 		= "Libelle"
    dr_ItemDesc ..Type 		= hRubTexte
    dr_ItemDesc ..Taille 		= 30
    HDécritRubrique ( df_TableDesc , dr_ItemDesc )
     
    // Valide la description du fichier
    HDécritFichier ( df_TableDesc )
     
    HChangeRep("TEST","C:\RepFic\")
    HCréation("TEST")

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Octobre 2010
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    Merci Erwan pour la piste.

    En effet avec un "marteau et un burin" j'avais appliqué la methode RUSSE (pas esthétique mais efficace).
    Bref voici un code que j'avais affecte a un bouton dans mon formulaire.
    Puisque la structure de la table ne change pas j'ai procede par cette affectation (un peu barbare)
    i est un entier=1

    TableSelect(TABLE_Table1,i)
    TANTQUE i<TableOccurrence(TABLE_Table1)
    HLitRecherchePremier(Address,IDZipcodes,TABLE_Table1[i][1])

    SI PAS HTrouve ALORS
    Address.zipcode=TABLE_Table1[i][1]
    Address.city=TABLE_Table1[i][2]
    Address.state=TABLE_Table1[i][3]
    Address.county=TABLE_Table1[i][4]
    Address.areacode=TABLE_Table1=TABLE_Table1[i][5]
    Address.citytype=TABLE_Table1[i][6]
    Address.City_alias_abbrev=TABLE_Table1[i][7]
    Address.City_Alias_name=TABLE_Table1[i][8]
    Address.latitude=TABLE_Table1[i][9]
    Address.longitude=TABLE_Table1[i][10]
    Address.timezone=TABLE_Table1[i][11]
    Address.Elevation=TABLE_Table1[i][12]
    Address.CountyFIPS=TABLE_Table1[i][13]
    Address.Daylightsaving=TABLE_Table1[i][14]
    Address.Prefered_last_linekey=TABLE_Table1[i][15]
    Address.classificationcode=TABLE_Table1[i][16]
    Address.multiCounty=TABLE_Table1[i][17]
    Address.stateFIPS=TABLE_Table1[i][18]
    Address.citystatekey=TABLE_Table1[i][19]
    Address.cityaliascode=TABLE_Table1[i][20]
    Address.PrimaryRecord=TABLE_Table1[i][21]
    Address.Citymixedcase=TABLE_Table1[i][22]
    Address.CityAliasMixedCase=TABLE_Table1[i][23]
    Address.stateANSI=TABLE_Table1[i][24]
    Address.Countyansicode=TABLE_Table1[i][25]
    Address.FacilityCode=TABLE_Table1[i][26]
    Address.CityDeliveryIndicator=TABLE_Table1[i][27]
    Address.CarrierRouteRatesortation=TABLE_Table1[i][28]
    Address.financenumber=TABLE_Table1[i][29]
    Address.UniqueZIPname=TABLE_Table1[i][30]

    HAjoute(Address)

    FIN

    i++
    TableSelect(TABLE_Table1,i)

    FIN
    Info("terminer")
    Finalement comme le fichier a la même structure donc j'ai effectivement creer un fichier dans windev "address", j'importe les donnees a partir d'un autre fichier excel et la j'arrive a les enregistrer dans le fichier windev.
    SEULEMENT voila que j'ai un autre PROBLEME
    Je n'arrive pas a dépasser la limite des 65535 alors ma table contient plus de 100.000.
    Un autre tuyaux ?
    Merci d'avance, si tu pense que je pourrais améliorer ce code je suis preneur et peut etre qu'il servira quelqu'un d'autre un jours.

  4. #4
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 532
    Points
    3 532
    Billets dans le blog
    1
    Par défaut
    Je suppose que ça viens de ta variable i qui ne peux pas dépasser 65535.

    Essaye de déclarer i de type "Entier long".
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  5. #5
    Membre éprouvé Avatar de wimbish
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 416
    Points : 1 073
    Points
    1 073
    Par défaut
    Bonjour,

    La limite de 65 536 lignes ressemble aussi à une limitation Excel version 2003 et inférieure.

    Regarde de ce coté.
    Christophe.

    Tous les chemins mènent à Rome http://doc.pcsoft.fr/fr-FR/

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    D'après ce que vous exposez et au stade où vous en êtes, je crois que vous pourriez tirer parti de :
    - variable de type structure, qui peut regrouper des éléments de types différents et être membre d'un tableau
    - MémoireVersFichier qui affecte les valeurs des membres d'une structure aux rubriques correspondantes d'un fichier (à compléter avec HAjoute)

    Il faut simplement nommer vos colonnes dans l'import du fichier Excel comme les rubriques de destination finales.

    Deux pas de plus et cela deviendrait très simple :
    1. C'est peut-être déjà le cas : vous pourriez importer vos données depuis Excel via une requête SQL et SQLconnecte (je suis en WD15 Express et ne peut tester).
    2. Ensuite, vous pourriez utiliser FichierVersTableau qui va affecter votre tableau de structures avec les valeurs des rubriques de la requête, pour autant que les noms correspondent.
      Le tableau sera dimensionné automatiquement.
      Je l'ai déjà utilisé dans mes tests et cela fonctionne bien.



    En gros, vous auriez :
    HExécuteRequêteSQL
    FichierVersTableau
    Une boucle avec MémoireVersFichier

    J'espère que cela vous aidera.
    Bon travail

    Hemgé

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Octobre 2010
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par wimbish Voir le message
    Bonjour,

    La limite de 65 536 lignes ressemble aussi à une limitation Excel version 2003 et inférieure.

    Regarde de ce coté.
    Salut Wimbish et merci MAIS je suis sous excel 2010, apres avoir teste avec 2007 rien a faire.
    Citation Envoyé par Golgota Voir le message

    Je suppose que ça viens de ta variable i qui ne peux pas dépasser 65535.

    Essaye de déclarer i de type "Entier long".
    Merci Golgota, j'ai essayé le types long (j'en ai utilisé des entiers sur 4 et 8 octets) ca ne marche pas dans mon cas.

    J'ai laissé un autre post sur le forum de pcsoft esperant tiré cette affaire de limitation au clair une bonne fois pour toute, car tantot c'est la faute a excel, ou comme j'ai lu par ci et la tantot c'est la faute a windev jusq'a la version 16 elle n'etait pas corrigé encore (et comme je n'ai pas la version 17)

    Je continue neanmoins merci hemgé, je creuse ta piste aussi et reviens plus tard.
    A bientot

  8. #8
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 532
    Points
    3 532
    Billets dans le blog
    1
    Par défaut
    bonjour,

    ça vous donne quoi ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    info(TableOccurrence(TABLE_Table1))
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  9. #9
    Membre éprouvé Avatar de wimbish
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 416
    Points : 1 073
    Points
    1 073
    Par défaut
    D'accord avec Golgotha, il faut tracé tes variables.
    de plus, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HLitRecherchePremier(Address,IDZipcodes,TABLE_Table1[i][1])
    SI PAS HTrouve ALORS
    Le code postal n'est pas unique (en tout cas en France) donc un certain nombre d'enregistrements ne sera pas ajouté.
    Christophe.

    Tous les chemins mènent à Rome http://doc.pcsoft.fr/fr-FR/

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Points : 487
    Points
    487
    Par défaut
    Bonjour,

    Les fichiers Excel avec extension xls sont limités à 65535 lignes.
    Pour contourner cette limitation, il faut utiliser l'extension xlsx
    Maintenant je ne comprend pas trop votre problème de limitation, si votre table contient 100000 lignes, c'est que vous avez réussi à importer les 100000 lignes.
    Il ne reste plus qu'à enregistrer le tout dans un fichier Hyperfile et ça rien de plus simple, il suffit de suivre une des 2 méthodes d'ErwanA

    Cordialement

    Madsl@nD

  11. #11
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Citation Envoyé par Golgotha Voir le message
    Je suppose que ça viens de ta variable i qui ne peux pas dépasser 65535.

    Essaye de déclarer i de type "Entier long".
    Ce n'est plus vrai depuis windev 7.

    La limitation des 65535 vient d'excel : il ne peut pas y avoir plus de 65535 lignes dans une feuille excel (jusqu'à 2003). Depuis 2007 (2010 ?), le nombre de lignes a été porté à 123 000 et quelques.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

Discussions similaires

  1. Exporter une <table> vers fichier CSV
    Par sebhm dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 17/04/2014, 15h33
  2. Erreur export de table vers fichier text ( code : 3441)
    Par piflechien73 dans le forum VBA Access
    Réponses: 8
    Dernier message: 18/04/2010, 20h05
  3. [WD15] Export table vers fichier .txt
    Par loloxp dans le forum WinDev
    Réponses: 9
    Dernier message: 09/04/2010, 12h21
  4. Dump Table vers fichier SQL: champs BLOB ?
    Par GoustiFruit dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/03/2010, 14h12
  5. exporter table vers fichier txt
    Par joe370 dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/05/2009, 12h08

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