Suppression dans table et fichier
Alicia
Bonjour,
J'avais demandé un conseil à la suite de mon précédent problème, mais comme personne n'a encore répondu j'ai pensé que personne n'avait vu.
Donc je réexplique, j'ai encore 2 soucis :
Je suis toujours avec ma table remplie à l'aide d'une recherche sur le nom saisi par l'utilisateur.
Je veux supprimer à la fois la ligne sélectionnée dans la table ET l'enregistrement associé à la ligne de la table.
J'ai essayé plusieurs choses du livre mais ça ne fonctionne pas.
Voilà où j'en suis :

SI HNbEnr(FOURNISSEUR)=0 ALORS RETOUR
// Suppression de la fiche en cours
SI OuiNon("Confirmez-vous la suppression de cette fiche") ALORS
HSupprime(FOURNISSEUR)
HLitSuivant(FOURNISSEUR,Societe)
SI HEnDehors(FOURNISSEUR) = Faux ALORS
FichierVersEcran()
SINON
HLitDernier(FOURNISSEUR,Societe)
SI HEnDehors(FOURNISSEUR) = Faux ALORS
FichierVersEcran()
SINON
RAZ()
FIN
FIN
FIN

voilà pour le 1er.
En ce qui concerne mon 2nd problème, c'est quand je veux ajouter les infos sur les enregistrements de mon fichier dans ma table, quand le nom de la société correspond au nom saisi.
J'ai essayé plusieurs choses, ça remplit bien mais pas exactement comme je voulais.
J'ai pour le moment :

HLitRecherchePremier(FOURNISSEUR,Societe,saisieFournisseur,hGénérique)
SI HTrouve() = Vrai ALORS
TANTQUE PAS HEnDehors(FOURNISSEUR)
TableAjoute(REQ_Fourn,FOURNISSEUR.Societe+TAB+FOURNISSEUR.NomFournisseur+TAB+FOURNISSEUR.Ville+TAB+FOURNISSEUR.Telephone)
HLitSuivant(FOURNISSEUR)
FIN
SINON
Info("Aucun fournisseur ne correspond")
FIN

Mais évidemment il me sort tout ce qu'il y a dans le fichier à partir du nom tapé, à cause du TANTQUE PAS HEnDehors
Alors j'ai essayé sans TANTQUE mais bien sûr ça ne m'ajoute qu'une ligne, or je peux avoir plusieurs lignes car plusieurs sociétés ont le même nom et des informations différentes.
J'ai essayé avec une condition sur Fournisseur.Societe=saisieFournisseur
mais ça ne trouve rien.
Désolée de vous poser des questions de débutant mais je ne trouve pas la solution dans le guide d'auto-formation.
Merci d'avance.

Contribution le : 11/04/2006 14:33
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
DSI WDF
Inscrit:
12/09/2004 11:07
De aude
Post(s): 279
Bonjour, voici un exemple pour supprimer une fiche et son enregistrement correspondant:
// clic sur btn_supprimer
// demande de confirmation
SI OuiNon(Non,"Voulez-vous vraiment supprimer l'enregistrement ?") ALORS
	// suppression
	HSupprime(Client)
	SI ErreurDétectée ALORS
		Erreur("Impossible de supprimer l'enregistrement."+RC+HErreurInfo())
		RETOUR
	FIN
	
	// On indique qu'un enregistrement a été modifié (le rafraichissement des données sera nécessaire)
	Mafenetre..Modifier = Vrai
	
	// lecture de l'enregistrement suivant
	HLitSuivant(Client,IDClient)
	
	// si l'enregistrement supprimé était le dermier enregistrement
	SI HEnDehors() ALORS
		// lecture du dernier enregistrement
		HLitDernier(Client,IDClient)
		// il n'y a plus d'enregistrement dans le fichier
		SI HEnDehors() ALORS
			// vide les champs
			RADEfface()
			// informe l'utilisateur que le fichier est vide
			Info("Le fichier est vide")
			// terminé
			RETOUR
		FIN
	FIN
	
	// transfert du buffer du fichier dans les champs
	FichierVersEcran()
FIN



Quant au second pb, qu'elle est la clé de parcours,
utilisé les fonctions liées aux tables
-TableSupprime()
-TableAjoute()
-TableOccurence()
Remplacer le HLitRecherche() par l'éxécution de la requete
et HLitPremier().
A la fin du TableAjoute() ajouter:
Si HEnDehors() alors
 Info("Aucun fournisseur ne correspond")
Fin

Espérant avoir aidé, bon dev!

Contribution le : 11/04/2006 15:10
_________________
...
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
Anonyme
Merci pour ta réponse mais ça ne marche toujours pas pour supprimer.
Pour le HLitSuivant(Client,IdClient) de ton exemple, est-ce qu'à la place de IdClient je dois forcément mettre la clé de mon fichier (car la recherche que je mets dans la table n'est pas faite sur la clé) ?
Par contre tu es sûre du RADEfface() car il me le met en vert, apparemment il ne le reconnaît pas ?

Contribution le : 11/04/2006 15:24
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
DSI WDF
Inscrit:
12/09/2004 11:07
De aude
Post(s): 279
Pour le RADEfface() remplace le par la fonction RAZ.
S'agit il d'une fiche à supprimer ou d'une ligne dans une table?
Pour la recherche, il doit y avoir une clé de parcours afin de bien se positionner dans le fichier et d'être sûr de supprimer le bon enregistrement.
Fais donc un tour dans les exemples fournis dans WinDev.
Bon courage.

Contribution le : 11/04/2006 15:39
_________________
...
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
Anonyme
Pour le "supprimer", en fait j'ai une table que je remplis à l'aide d'un fichier, en fonction d'une recherche.
Mais je dois ajouter, modifier et supprimer ce qu'il y a dans ma table (ce que je voulais faire au moyen de fiche mais apparemment c'est faux, lol), car la table doit être en affichage seulement et donc pas de modification possible directement dedans.
Donc je dois supprimer la fiche, la ligne dans la table et l'enregistrement du fichier.
Je ne sais plus quoi faire...
Et cette fonction OuiNon(Non,"supprimer ?") c'est censé afficher une demande de confirmation quand on clique sur Supprimer ? Car moi ça n'affiche rien.
J'ai regardé les exemples mais rien ne fonctionne.

Contribution le : 11/04/2006 15:54
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
Alicia
Pour remplir la table, j'avais fait une requête avant de faire le HlitPremier, mais ça ne marchait pas.
J'ai du faire une grosse faute mais j'avoue que je ne sais pas où :

RequeteFournisseur est une Source de Données
GA_RSelectFourn est une chaîne
GA_RSelectFourn = "SELECT *"+"FROM FOURNISSEUR"+" WHERE FOURNISSEUR.NomFournisseur = saisieFournisseur"
SI PAS HExécuteRequêteSQL(RequeteFournisseur,hRequêteDéfaut,GA_RSelectFourn) ALORS
Erreur("Erreur dans la requête" + RC + HErreurInfo())
SINON
HLitPremier()
SI HEnDehors() ALORS
Info("Vide")
SINON
TableAjoute(REQ_Fourn,FOURNISSEUR.Societe+TAB+FOURNISSEUR.NomFournisseur+TAB+FOURNISSEUR.Ville+TAB+FOURNISSEUR.Telephone)
FIN
Info("test")
FIN

un coup de main svp ?

Contribution le : 11/04/2006 16:16
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour Alicia,

Il est vrai que si l'on ne comprends pas bien le problème il est difficile de répondre.

Pour la question 1
Primo il est nécessaire de savoir si tu travaille avec des tables fichiers ou bien des tables mémoires.
Je vais donc m'efforcer de donner une solution qui fonctionne avec les deux type de table.
La seule contraite à cette technique est qu'il est nécessaire de faire figurer dans cette table la colonne contenant l'identifiant unique de l'enregistrement.
Cette colonne pourra être visible ou invisible selon l'esthetique attendue.

Ici on immagine que la clé unique du fichier fournisseur se nomme :
FOCLEUNIK
La table : REQ_Fourn
//Si il y a des enregistrements affichés dans la table
Si REQ_Fourn..Occurrence  = 0 Alors Retour
//Si une ligne de la table est sélectionnée
Si TableSelect
//On demande confirmation
SI OuiNon("Confirmez-vous la suppression de cette fiche") ALORS
 //On positionne le curseur fichier sur le bonne enregistrement en fonction de la clé unique dont la valeur est stockée dans REQ_Fourn.FOCLEUNIK
 Si HLitRecherche(FOURNISSEUR, FOCLEUNIK, REQ_Fourn.FOCLEUNIK) Alors
  HSupprime(FOURNISSEUR)
 Fin


Pour le second problème
Une technique simple permet de remplir une table mémoire avec le contenu d'une requête
Rs est une source de donnees
Sql est une chaine

//Création de la requête
Sql =
[
SELECT FOCLEUNIK AS FOCLEUNIK,
 FONOM AS Nom,
 ADR1 AS Adresse,
 ADR2 AS [Complément],
 CP AS [Code Postal],
 VILLE AS VILLE
 FROM FOURNISSEUR
]
//Ici on ajoute la condition
Sql += " WHERE FONOM = '" + saisieFournisseur + "'"
//Ici on peut ajouter un tri
Sql += " ORDER BY FONOM"

//Exécution de la requête
SI Pas HExecuteRequeteSql(Rs,HRequeteDefaut,Sql) ALors
 Erreur(HErreurInfo())
 Retour
Fin

//On Vide la table par sécurité
TableSupprimeTout(REQ_Fourn)

//On rempli la table
ConstruitTableFichier(REQ_Fourn,Rs,taAvecIDAuto+taRemplirTable)

Contribution le : 11/04/2006 16:28
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
DSI WDF
Inscrit:
12/09/2004 11:07
De aude
Post(s): 279
Merci pour le coup de main !!

Contribution le : 11/04/2006 16:43
_________________
...
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
Alicia
Merci beaucoup pour votre aide !!
Petite note : il s'agit d'une table mémoire.

ça marche pour supprimer, maintenant. En fait ça n'avait rien à voir, il devait y avoir un problème avec le bouton car j'ai mis des Infos("") de partout pour voir dans quelles boucles il passait, et là je me suis aperçue qu'il ne m'affichait même pas l'info qui était au tout début.
En fait le clic sur le bouton ne faisait rien. Je n'ai pas compris pourquoi, j'ai vérifié s'il était bien actif et tout semblait correct. Malgré tout j'ai enlevé le bouton et je l'ai refait et maintenant ça fonctionne.
Par contre dernière question pour supprimer, comment je peux faire pour que la table soit modifiée instantanément ? J'ai essayé TableAffiche et Table..modifié = Vrai mais sans succès.
Je vais essayer la requête maintenant.
Merci encore.

Contribution le : 12/04/2006 08:59
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
DSI WDF
Inscrit:
12/09/2004 11:07
De aude
Post(s): 279
Bonjour Alicia,
Il faut effectué un rafraichissement de ta table en relancant le traitement.

Contribution le : 12/04/2006 09:13
_________________
...
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
Anonyme
Relancer le traitement, c'est-à-dire que je dois réeffectuer ma recherche et re-remplir la table, donc re-déclarer ma requête ?

Merci pour la requête en tout cas, ça marche.

Contribution le : 12/04/2006 09:30

Edité par sur 12/4/2006 10:03:13
Edité par sur 12/4/2006 10:16:25
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
DSI WDF
Inscrit:
12/09/2004 11:07
De aude
Post(s): 279
Effectivement, il faut réinitialiser ta req afin de prendre en compte les modifications.
Regarde du côté de la fonction ExecuteTraitement().
Il est conseillé de faire une PROCEDURE pour le code, comme cela il pourra être appelé autant de fois sans à avoir a le ressaisir
Bon courage!

Contribution le : 12/04/2006 13:23
_________________
...
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
Alicia
Merci, je vais essayer.

Contribution le : 12/04/2006 14:22
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
Alicia
J'ai testé ça dans mon bouton "supprimer"

//Si la table est vide on ne fait rien
SI REQ_Fourn..Occurrence=0 ALORS RETOUR
//Si une ligne de la table est sélectionnée
SI TableSelect(REQ_Fourn)
//On demande confirmation
SI OuiNon(Non,"Confirmez-vous la suppression de cette fiche ?") ALORS
//On positionne le curseur fichier sur le bon enregistrement en fonction de la clé unique
SI HLitRecherchePremier(FOURNISSEUR,IdFournisseur,REQ_Fourn.TIDF) ALORS
HSupprime(FOURNISSEUR)
Info("Fournisseur supprimé")
ExécuteTraitement(BTN_Rechercher,trtClic)
FIN
FIN
FIN

mais il me dit que REQ_Fourn.TIDF est inconnu alors qu'il s'agit d'une colonne de ma table dans la même fenêtre (d'ailleurs il le reconnaît il est en turquoise).
Est-ce que c'est bon le ExécuteTraitement ? car comme il me sort l'erreur avant je ne peux pas tester.
Quelqu'un pourrait-il me dire pourquoi ça ne fonctionne pas ?

Contribution le : 12/04/2006 15:28
Créer un fichier PDF de la contribution Imprimer


Re: Suppression dans table et fichier
ChefDeProjet WDF
Inscrit:
02/05/2006 21:28
Post(s): 160
tableselect() renvoie l'indice de la ligne donc tu ne peux écrire si tableselect() ce qui équivaut a tester vrai ou faux (0 ou 1)
de plus il est inutile de tester tableselect() puisque tu a forcément le bandeau de sélection de la table sur une ligne

si hlitrecherchepremier(...) alors: impossible

il faut faire
hlitrecherchepremier(fournisseur,idfournisseur,tidf)

si tidf est le nom de ta colonne tu n'as pas besoin de préciser le nom de la table et il contiendra bien la valeur de la ligne sélectionnée.

puis

si htrouve(fournisseur) alors
hsupprime()
...
fin

Contribution le : 02/05/2006 22:12
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