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 :

Problème de sélection lors d'un import de fichier xls


Sujet :

WinDev

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut Problème de sélection lors d'un import de fichier xls
    Bonjour, j'ai fait ce code d'import :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    PROCEDURE ImporterDonnees(NomEta est une chaîne = "Donnee")
    i est un entier
    t est un entier
    nXls est un entier
    nbCol est un entier
    nbLig est un entier
    selecteur est une chaîne
     
    selecteur = fSélecteur("", "", "Sélectionnez un fichier à importer", "Fichier Excel"+TAB+"*.xls", "*.xls", fselOuvre+fselExiste)
    SI selecteur = "" ALORS RETOUR
     
    nXls = xlsOuvre(selecteur)
    nbCol = xlsNbColonne(nXls)
    nbLig = xlsNbLigne(nXls)
     
    HGèreIntégrité("*", "*", hCardinalité + hEnModification + hEnSuppression, Faux)
    HGèreDoublon(NomEta,"*",Faux)
     
    POUR t=2 A nbLig
    	//On commence par regarder si le nom existe	
    	HLitRecherche(NomEta,"Nom",xlsDonnée(nXls,t,1),hIdentique) 
    	HLitRecherche(NomEta,"Date_int",xlsDonnée(nXls,t,4),hIdentique)
    	// hIdentique : Pour eviter que Dupont et Dupontel soient détectés en doublon.
    	SI PAS HTrouve ALORS  // Si existe pas alors on initialise
     
    		{NomEta + ".Nom",indRubrique} = xlsDonnée(nXls,t,1)
    		{NomEta + ".Rs",indRubrique} = xlsDonnée(nXls,t,2)
    		{NomEta + ".A_voir",indRubrique} = xlsDonnée (nXls,t,3)
    		{NomEta + ".Date_int",indRubrique} = xlsDonnée (nXls,t,4)
    		{NomEta + ".Classes",indRubrique} = xlsDonnée(nXls,t,5)
    		{NomEta + ".Difficultes",indRubrique} = xlsDonnée(nXls,t,6)
    		{NomEta + ".Pai",indRubrique} = xlsDonnée(nXls,t,7)
    		{NomEta + ".Suivi",indRubrique} = xlsDonnée(nXls,t,8)
    		{NomEta + ".Suites",indRubrique} = xlsDonnée(nXls,t,9)
    		{NomEta + ".Notes",indRubrique} = xlsDonnée(nXls,t,10)
    		{NomEta + ".archiver",indRubrique} = xlsDonnée (nXls,t,11)
     
    		SI PAS HAjoute(NomEta) ALORS//Puis on ajoute
    			//Ici on traite les erreurs
    		FIN
    	FIN
    FIN
    xlsFerme(nXls)
    TableAffiche(Fen_table.Table,taCourantBandeau)
     
    SI selecteur = "" ALORS
    	Info("Veuillez sélectionner un fichier à importer.")
    SINON
    	SI HErreurIntégrité() = Faux OU HErreurDoublon() ALORS
    		Info("L'importation s'est déroulée avec succès !")
    	SINON
    		Erreur("Une erreur s'est produite, veuillez ré-essayer.")	
    	FIN
    FIN
    Qui est censé supprimer les doublons qui ont exactement le meme NOM et la meme DATE.
    Mais ceci ne fonctionne pas, merci de votre aide, @+

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Ce n'est donc pas l'importation qui ne fonctionne pas, mais le code de sélection des enregistrements
    Je change le titre du thread.

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut
    quoiqu'il en soit, ça ne marche pas ( et je ne comprend pas pourquoi )

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Probablement parce qu'il y a 2 HLitRecherche() consécutifs...

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut
    ça, je le sais mais, comment faire pour chercher les 2 critères ?

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Août 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 140
    Points : 312
    Points
    312
    Par défaut
    Créer une requête paramètrée utilisant tes fichiers en question... que tu utiliseras comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MaRequete.P_Nom = nomFichier
    MaRequete.P_Date = dateFichier
    HExecuteRequete(MaRequete)
    SI HLitPremier <> -1 ALORS
    ...traitement
    FIN
    Tu peux placer les paramètres différement..

  7. #7
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut
    Cela ne marchera pas car "NomEta" peut etre égal a "Donnee" ou a "Donnee2" ou a "Donnee3" et etc...
    Il me faut un code du meme genre que le mien, qui prenne en compte les 2 hlitrecherche !

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Août 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 140
    Points : 312
    Points
    312
    Par défaut
    Ah oui, je n'avais pas vu que ton fichier de données pouvait être modifié...

    A la manière de tes HLitRecherche successifs...
    Composer une requêtes SQL écrite dans une chaine que tu appeleras à l'aide de HExecuteRequeteSQL...


    Tu pourras alors modifier le fichier sur lequel tu exécutes ta requête suivant ton code ... et vérifier facilement les deux critères.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    HExecuteRequeteSQL(maSource, ...
    "SELECT " + NomEta + ".Id FROM " + NomEta ...
    + " WHERE " + NomEta + ".Nom = " + xlsDonnée(nXls,t,1) ...
    + " AND " + NomEta + ".Date_int = " + xlsDonnée(nXls,t,4) )
    Puis tu vérifies la valeur de maSource.Id pour continuer ton traîtement.

    Attention, si tes noms de fichiers requêtés contiennent des espaces.. tu dois les encadrer à l'aide de crochet [Mon Fichier1].


    Bizarre comment tout cela est stocké j'avoue.. peut être pour séparé les tables en fonction des clients.. ou pour des raisons de sauvegardes..

    Bonne continuation.. en espérant que cette piste pourra t'être utile.

  9. #9
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut
    Bonjour,
    En faite, l'utilisateur choisit le nombre d'établissement, ( entre 1 et 20 ) et il rentre le nom de ces établissements.
    Ensuite, les menus se créent et, au lieu de faire 20 fenetres table, 20 fenetres fiches, il n'y a qu'une table, qu'une fiche ... Voila pour l'explication !
    Maintenant, je teste ce que tu me dit mais, niveau requete, je suis pas hyper calé ...

  10. #10
    Membre averti

    Profil pro
    Inscrit en
    Août 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 140
    Points : 312
    Points
    312
    Par défaut
    Personnellement, je trouve ta solution un peu étonnante et limitée en terme d'évolution...

    J'aurai fais ça différement.. mais peut être n'as tu pas le choix :
    2 tables :
    Utilisateur et Etablissement.

    Dans la table Etablissement, tu lies les tables via l'Id de Utilisateur.

    En d'autre termes :

    Utilisateur : IdUtilisateur, Nom, Prenom, contact etc...
    Etablissement : IdEtablissement, Nom, Adresse, etc... et IdUtilisateur.


    De cette manière tu associes un utilisateur à un Etablissement.


    L'avantage de cela, est le fait que tu peux gérer efficacement la liste des établissements (éviter les doublons etc..) et que tu n'es pas limité à 20 établissements... tu centralises tes informations en une seule table.

    Tu te simplifies grandement le travail de requêtage aussi tant dans l'inscription des données.. que dans l'exploitation (en affichage ou impression d'état..) en utilisant les requetes de Webdev (via l'éditeur graphique ou non) et les possibilités de liaison des champs sur ces dernières.

    Reste à voir si une telle solution plus "propre" au niveau de la base de données, peut être facilement mise en oeuvre avec tes fichiers excel contenant les données, je pense que oui... mais ça nécessite de revoir le code d'import. C'est du temps à passer mais je pense qu'il se regagne dans toutes les utilisations qui suivent.

  11. #11
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut
    j'ai du mal a voir ce que tu veux dire, car, il me faudrait tout changer !
    ( quand l'utilisateur choisit lui-meme son établissement ) ensuite, il n'y a pas besoin de plus de 20 établissements. )
    Déjà, j'aimerais finir ce programme, comme ça avec l'import qui marche ( il a marché mais, sa bug maintenant ) et arriver a mettre en place un systeme d'archivage des données

  12. #12
    Membre averti

    Profil pro
    Inscrit en
    Août 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 140
    Points : 312
    Points
    312
    Par défaut
    Oui, c'est vrai que ça ferait changer beaucoup de chose, c'est pour ça que je le précisais. Surtout si tu es en fin de projet... il ne faut pas changer de solution à la fin...


    Concernant ton souci, il vient du fait que tu exécutes 2 HLitRecherche consécutif ce qui fait que tu perds le contexte du premier HLitRecherche.

    La solution de la requêtes SQL composée "à la main" te permet de regrouper les 2 HlitRecherche en 1 HExecuteRequeteSQL n'utilisant alors qu'un seul contexte..
    Voir remarque plus haut pour "comment faire".

  13. #13
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut
    Bonsoir,
    le code SQL : OK mais, je ne comprend pas comment vérifier ce code ...

  14. #14
    Membre averti

    Profil pro
    Inscrit en
    Août 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 140
    Points : 312
    Points
    312
    Par défaut
    Voici le code qui te permettra de comprendre comment exécuter ta commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    nIdCat est un entier = 16
    nIdSousCat est des entier = 50
    maRequeteComp est une Source de Données
    HExécuteRequêteSQL(maRequeteComp,hRequêteDéfaut,"SELECT * FROM " + nomTable +...
    " WHERE " + nomTable + ".IDCategorie = " + nIdCat +...
    " AND " + nomTable + ".IDSousCategorie = " + nIdSousCat +...
    " ORDER BY " + nomTable + ".IDDateAgenda")
    HLitPremier(maRequeteComp)
    SI HTrouve(maRequeteComp) ALORS
      Info(maRequeteComp.IdDateAgenda)
    FIN
    Puis tu peux dans ton cas, pour vérifier si aucun enregistrement en correspond à un élément déjà présent (Nom et Date identiques), soit utilisé HTrouve comme au dessus.. soit comme suit :... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SI maRequeteComp.Id <> -1 ALORS
      //Traitement....
    FIN

    EDIT : En discutant avec un collègue, mon avis est conforté.. ta solution est vraiment "moyenne"... pour exploiter les données stockées comme tu le fais actuellement.. tu vas y passer énormément de temps... Si tu es à la fin de ton dev.. changes pas.. mais si tu as encore plein d'état etc.. à gérer...
    Une solution avec 2 tables (voir une table supplémentaire pour la liaison..)..
    Dis toi pour remplir par exemple, une table avec par exemple.. tous les établissements d'un utilisateur dont l'Id est indiqué.. toi tu vas devoir te débrouiller avec des indirections (pour gérer toutes les tables..) alors qu'en vérité.. une simple requête (générée graphiquement), une liaison de ton champs à cette requête.. et dans le code : FichierVersEcran(Requete)...
    Et ça se remplit tout seul...
    Là tu vas pouvoir le faire aussi je pense.. mais franchement pour établir ta requête... tu vas en chier
    Même tes établissements ne sont pas tous stockés au même endroit (pas dans la même table) ce qui complique la recherche pour les doublons etc.. et tout simplement l'exploitation des données.
    Alors le seul conseil que je peux te donner, si tu estimes t'en sortir bien avec cette solution.. continue... sinon change pour quelques choses de mieux conçu... (bien entendu.. faut pas supprimer ce qui a été fait.. faire des sauvegardes etc.. mais ça c'est pas du dev.. c'est de la logique..)

  15. #15
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut
    Merci pour tes infos, je test ça en revenant !
    Mais, en faite, s'est casi la fin du dev car, la, je corrige juste les bugs trouvés :
    l'import ne marchait pas
    Et, je viens juste de rajouter la dernière fonction : l'archivage
    Mais, ça ne marche pas top, j'ai procédé comme ceci ( pour l'archivage )

    Tous les enregistrements d'un fichier Donnee sont copiés vers un fichier Archives
    de la, il y a une requete qui filtre tous ceux qui ont la case "archiver" cochée.
    Une table liée a cette requete affiche tous les enregistrements "archivés"
    Ensuite, je supprime du fichier "Donnee" les enregistrements avec la case "Archiver" cochée ( logiquement, car ils sont passés dans le fichier "Archives" )

    La, ça marche !
    Mais, pour dé-archiver un enregistrement, je ne peux pas utiliser de requete donc, je ne sais pas trop comment faire pour l'instant ...

Discussions similaires

  1. Problème de date lors de l'import
    Par didier.M dans le forum Développement
    Réponses: 3
    Dernier message: 03/02/2010, 10h10
  2. Problème IMP-00017 lors de l'import de données
    Par zimil dans le forum Import/Export
    Réponses: 4
    Dernier message: 17/11/2009, 14h47
  3. [10g] Problèmes de contraintes lors de l'import
    Par Arthurc dans le forum Import/Export
    Réponses: 3
    Dernier message: 05/12/2008, 10h39
  4. Problème lors de l'import de Fichier 3D avec Visual Studio 2005
    Par somaa dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 13/06/2008, 17h28
  5. Probléme de langue lors de l'import d'une B D
    Par jarraysami dans le forum Oracle
    Réponses: 1
    Dernier message: 26/11/2007, 11h08

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