l'import ne marche pas !
Utilisateur WDF
Inscrit:
28/05/2007 18:18
Post(s): 90
Bonjour, j'ai fait ce code d'import :

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, @+

Contribution le : 14/09/2007 22:17

Edité par drcharly93 sur 18/9/2007 14:30:18
Créer un fichier PDF de la contribution Imprimer


Re: l'import ne marche pas !
Developpeur WDF
Inscrit:
18/06/2006 13:54
Post(s): 106
Hmm... pas très explicite.
"..ceci ne fonctionne pas "

Tu as un message d'erreur ou rien n'est supprimé sans message comme si c'etait deroulé normalement.

Ajoute deja ces valeurs dans le debogueur (drag and drop) et vois si elles sont renseignées comme tu l'attends.
{NomEta + ".Nom",indRubrique}
{NomEta + ".Rs",indRubrique}
{NomEta + ".A_voir",indRubrique}
{NomEta + ".Date_int",indRubrique}
{NomEta + ".Classes",indRubrique}
{NomEta + ".Difficultes",indRubrique}
{NomEta + ".Pai",indRubrique}
{NomEta + ".Suivi",indRubrique}
{NomEta + ".Suites",indRubrique}
{NomEta + ".Notes",indRubrique}
{NomEta + ".archiver",indRubrique}

"SI pas hajoute" ne renvoie pas de message, on ne sait pas si les donnees sont bien ajoutées finalement.

"SI HErreurIntégrité() = Faux OU HErreurDoublon()"
Faut ptet mettre à mon avis:
"SI HErreurIntégrité()=Faux OU HErreurDoublon()=faux alors"

Ca "SI selecteur = "" ALORS
Info("Veuillez sélectionner un fichier à importer.")", ca sera jamais executé car tu fais un RETOUR dans ta première verif.


Modifie ca SI PAS HAjoute(NomEta) ALORS//Puis on ajoute
//Ici on traite les erreurs
FIN en ca
SI PAS HAjoute(NomEta) ALORS
 trace(HErreurInfo ())
FIN

et la :
SI HErreurIntégrité()=Faux OU HErreurDoublon()=faux ALORS
Info("L'importation s'est déroulée avec succès !")
SINON
 trace(HErreurInfo ())
FIN

tu aura plus d'infos deja.

Contribution le : 17/09/2007 21:46

Edité par drcharly93 sur 18/9/2007 14:33:01
Créer un fichier PDF de la contribution Imprimer


Re: l'import ne marche pas !
Utilisateur WDF
Inscrit:
28/05/2007 18:18
Post(s): 90
Bonjour,
ce sont des petites erreurs, mais ce n'est pas ça le "gros" du problème.
En faite, les HLitRecherche sont censé chercher si l'enregistrement en cours du fichier excel existe déjà selon 2 critères : Nom et Date_int
Si il existe, on n'importe pas sinon, on importe.
Donc, ce code tri les doublons pour faire l'import depuis un fichier Xls.
Mais, il ne marche pas et que une partie des clients sont importés ! pas ceux que je veux.

Contribution le : 18/09/2007 17:58
Créer un fichier PDF de la contribution Imprimer


Re: l'import ne marche pas !
Developpeur WDF
Inscrit:
18/06/2006 13:54
Post(s): 106
Ok, ...
Donc si Nom et Date_int sont identiques dans un enregistremnt on importe pas si j'ai bien compris.
Donc ca s'appelle une cle composé :p
Tu peux la rajouter a ton fichier ca sera plus simple pour importer ou non selon la recherche sur cette clé (regarde l'aide)

sinon...

Deja je pense qu'il ya une erreur ici :

...
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
...

Ca va pas ca.
Ta premiere recherche est nulle et n'entraine aucune action, tu es juste positionné sur l'enregistrement trouvé (ou pas)
Ensuite là ce qui est effectif, c'est que tu ajoutes toutes les données si la date_int n'est pas trouvée dans le fichier.

Ce qu'il faut que tu fasses, c'est juste filtrer les enregistrements qui respectent les deux conditions.

// On filtre le fichier sur les deux conditions voir si on a au moins un enregistrement est present
Hfiltre(NomEta, "Nom='"+xlsDonnée(nXls,t,1)+"' ET Date_int='"+xlsDonné(nXls,t,4)+"'")
// on lit le premier enregistremtnn (si il en existe un) qui correspond aux conditions...
hlitpremier(NomEta, hrespectefiltre)
// si hendehors alors cela veut dire qu'il n'y en a aucun, on peut donc ajouter
SI hendehors() alors
	{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
		trace(herreurinfo())
	FIN
	
	// ne pas oublier de desactiver le filtre
	hdesactivefiltre(NomEta)
FIN


Il faut bien sur que le nom et la date est le meme format que dans le xls (c'est a dire que la date par exemple soit bien au format definis dans l'analyse soit par defaut aaaammjj et pas genre aaaa/mm/jj, ca ne fontionnera pas)

Je te conseilel de regarder l'aide sur les filtres , c'est d'une tres grande aide pour tous tout le temps, en particulier les conditions dans les filtres.

Il ya moyen de faire cette requete en sql (gain en rapidité) mais je ne suis pas un pro et les filtres me suffisent bien.

Voila tiens moi au courant.

Cordialement

Contribution le : 19/09/2007 01:19
Créer un fichier PDF de la contribution Imprimer


Re: l'import ne marche pas !
Utilisateur WDF
Inscrit:
28/05/2007 18:18
Post(s): 90
Bonjour,
Ce code marche (presque) parfaitement !
Tous les enregistrements sont bien triés MAIS :
il faut que je redémarre le programme pour les voir !
Alors que j'ai bien mis un TableAffiche !!

Merci,
@+

Contribution le : 19/09/2007 13:58
Créer un fichier PDF de la contribution Imprimer


Re: l'import ne marche pas !
Developpeur WDF
Inscrit:
18/06/2006 13:54
Post(s): 106
Met un tablesupprimetout ptet avant de faire un tableaffiche, fais juste un TableAffiche(Fen_table.Table) simple voir ce que ca donne.

Ou relance le code d'alimentation de ta table avec un ExécuteTraitement.

le code sql pour selectionner tes enregistrements en passant :

"SELECT COUNT(Nom) FROM "+NomEta+" WHERE Nom='"+xlsDonnée(nXls,t,1)+"' AND Date_int='"+xlsDonné(nXls,t,4)+"'"


Si le resultat est a 0, eh bien aucun enregsitrement ne correspond et on peut ajouter.

A plus

Contribution le : 19/09/2007 15:37
Créer un fichier PDF de la contribution Imprimer


Re: l'import ne marche pas !
Utilisateur WDF
Inscrit:
28/05/2007 18:18
Post(s): 90
Bonjour,
le but n'est pas de supprimer les enregistrements déjà copiés !
Mais, meme en les supprimant, ça ne marche pas ( il faut redémarrer le programme )

Contribution le : 19/09/2007 17:45
Créer un fichier PDF de la contribution Imprimer


Re: l'import ne marche pas !
Developpeur WDF
Inscrit:
18/06/2006 13:54
Post(s): 106
Je me doute bien que le but n'est pas de supprimer les enregistrements deja copiés (...sans deconner ?).

Selon ta table, qu peut etre fichier ou memoire , tablesupprimetout à un comportement différent. Désolé je ne connais le type de ta table.

Bref... fais un stop apres tableaffiche, il n'y a que toi qui peut trouver d'où ca vient là.

Contribution le : 20/09/2007 12:31
Créer un fichier PDF de la contribution Imprimer


Re: l'import ne marche pas !
Utilisateur WDF
Inscrit:
28/05/2007 18:18
Post(s): 90
OK, en tout cas, merci beacoup pour ton aide !

Contribution le : 20/09/2007 13:11
Créer un fichier PDF de la contribution Imprimer


[RESOLU] Import sans doublons
Utilisateur WDF
Inscrit:
28/05/2007 18:18
Post(s): 90
Bonsoir,
Alors, après plusieurs tests, j'ai découvert ce qui n'allait pas et je l'ai corriger :
Au lieu de désactiver le filtre AVANT de fermer le fichier Xls, j'ai désactiver le filtre APRES.
Ce qui donne ceci ( le code en ENTIER, qui marche )

PROCEDURE ImporterDonnees(NomEta est une chaîne = "Donnee")
t est un entier
nXls est un entier
nbLigne 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)
nbLigne = xlsNbLigne(nXls)

HGèreIntégrité("*", "*", hCardinalité + hEnModification + hEnSuppression, Faux)
HGèreDoublon(NomEta,"*",Faux)

POUR t=2 A nbLigne
	
	// On filtre le fichier sur les deux conditions
	HFiltre(NomEta, "Nom='"+xlsDonnée(nXls,t,1)+"' ET Date_int='"+xlsDonnée(nXls,t,4)+"'")
	// on lit le premier enregistrement (s'il en existe un) qui correspond aux conditions...
	HLitPremier(NomEta, hRespecteFiltre)
	// Si HEnDehors alors cela veut dire qu'il n'y en a aucun, on peut donc ajouter
	SI HEnDehors() ALORS
		{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)
		
		// Puis on ajoute
		SI PAS HAjoute(NomEta) ALORS
			Trace(HErreurInfo())
		FIN
		

	FIN
	
FIN

// On ferme le fichier Xls
xlsFerme(nXls)
	
		// Puis on désactive le filtre
		HDésactiveFiltre(NomEta)
	
	// Et enfin, on vérifie les erreurs
	SI HErreurIntégrité() = Faux OU HErreurDoublon()=Faux ALORS
		Info("L'importation s'est déroulée avec succès !")
	SINON
		Erreur("Une erreur s'est produite, veuillez ré-essayer.")	
	FIN


Voila !

Merci beaucoup Kaer et,
@+

Contribution le : 20/09/2007 18:37
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2