|
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
|
|
|
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
|
_________________
...
|
|
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
|
|
|
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
|
_________________
...
|
|
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
|
|
|
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
|
|
|
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 1Primo 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 : FOCLEUNIKLa 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èmeUne 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
|
|
|
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
|
_________________
...
|
|
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
|
|
|
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
|
_________________
...
|
|
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
|
|
|
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
|
_________________
...
|
|
Re: Suppression dans table et fichier |
|
Alicia
|
Merci, je vais essayer.
Contribution le : 12/04/2006 14:22
|
|
|
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
|
|
|
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
|
|
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.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|