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 :

Supprime toutes les lignes d'une table fichier


Sujet :

WinDev

  1. #21
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Pour en revenir à mon sujet : je viens de remarquer que meme si je cherche à supprimer manuellement plusieurs lignes l'une apres l'autre en les selectionnant puis en cliquant sur un bouton qui "TableSupprime", ca me fait la meme chose que dans ma boucle, cad que cela fonctionne bien la 1ere fois mais pas les suivantes.

  2. #22
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Excuse moi mais j'ai pas bien suisvi dans quel cas tu es.

    Si tu as une table fichier reliée a ta base oracle. Il faut mieux que tu utilise des ordres sql pour supprimer les enregs il me semble.

    Alors que tu pourras utiliser tablesupprime si tu es en acces natif sur Oracle ou en hyperfile.

    faire autrement me parait... osé ?
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  3. #23
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Effectivement, j'utilise le OLE DB fourni par le client Oracle.

    Tu penses qu'avec l'accès natif j'aurais beaucoup moins de problèmes ? Je pensais qu'il ne servait qu'à accèlerer le tout ...

  4. #24
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par mogwai162 Voir le message
    Un chouïa mauvaise fois là peut etre. Comme si ça pouvait etre comparé...
    Non non, même pas ! Tu connais Uniface ?

    Je ne parle pas des nombreuses fonctions à priori tres sympas de Windev pour faire de la communication, du multimédia ou je ne sais quoi, mais juste de la gestion de BD relationnelle. Avec 3 fonctions sous Uniface tu fais qd meme bcp de choses, du moins les trucs de base.

    our Les cas plus compliqué il ne faut pas hésiter à se servir du RAD en mixant les codes de plusieurs fenètres.
    J'etais parti la dessus, mais aucun type de fenetre du RAD ne fait ce que je veux (mettre à jour une table liée directement). A chaque fois ils mettent un bouton "+" pour saisir une nouvelle ligne dans une fenetre fiche séparée, et y'a pas de bouton supression pour la fiche principale. Pas trouvé dans les exemples non plus.

    De plus, meme avec les fenetres du RAD sans aucune modification j'ai par exemlpe un bug sur HNumEnr qui est toujours à zéro, alors quand tu débutes c'est pas facile de faire le tri entre ce que t'as pas compris et ce qui ne marche réellement pas.

  5. #25
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Non pas tout a fait. Disons que ça t'ouvre des possibilités supplèmentaires et donc ça te facilite ton travail. Va voir sur ce lien :

    http://www.pcsoft.fr/accesnatifs/ANOracle.htm
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  6. #26
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par mogwai162 Voir le message
    Non pas tout a fait. Disons que ça t'ouvre des possibilités supplèmentaires et donc ça te facilite ton travail. Va voir sur ce lien :http://www.pcsoft.fr/accesnatifs/ANOracle.htm
    Merci pour le lien, je l'avais deja lu mais j'aurais en fait aimé un comparatif avec l'accès standard par OLE DB. Car j'ai bel et bien lu que les fonctions H* ne devait pas poser de probleme via OLE DB sur Oracle. Apres, on m'a pt"tet raconté des bétises ...

    Je pense que je vais le prendre, faut que j'en parle à mon chef.

    Merci beaucoup !

  7. #27
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Voici une solution qui fonctionne. Il s'agit donc de faire la suppression directement dans le fichier et pas avec TableSupprime.
    C'est ce que Nicolas proposait, sauf que je n'utilise pas de requete car ca marche quand même avec les fonctions H*

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	HLitRecherchePremier(LIGCDE,ECD_NUM,ENTCDE.ECD_NUM)
    	TANTQUE HTrouve()
    		HSupprime(LIGCDE)
    		SI ErreurDétectée ALORS
    			Erreur("Impossible de supprimer la ligne " 
                            +LIGCDE.ECD_NUM+"-"+LIGCDE.LCD_LIGNE
                            +RC+HErreurInfo())
    			RETOUR
    		FIN
    		HLitRecherchePremier(LIGCDE,ECD_NUM,ENTCDE.ECD_NUM)
    	FIN
    L'inconvénient, c'est de ne pas se tromper lors de la recherche et de retrouver exactement ce qu'il y a dans la table.

    Merci à vous

  8. #28
    Membre averti Avatar de JPDMJC
    Profil pro
    Inscrit en
    Février 2005
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 337
    Points : 394
    Points
    394
    Par défaut
    Juste deux petites choses

    - si tu n'as pas besoin de lire ce que tu parcours, tu peux remplacer hLitRecherchePremier par hRecherchePremier.
    La différence ? hLitRecherchePremier (comme hLitRecherche, hLitSuivant) rapatrie les données du tuple et charge tout ça en mémoire, or si tu n'as en pas besoin mieux vaut utiliser hRecherchePremier (et s'il y a une erreur, tu peux toujours faire un hLitRecherche pour avoir les infos du tuple en question).

    - Tu commences avec un hLitRecherchePremier, mais ensuite dans ta boucle - si les critères de recherche sont les mêmes, tu peux utiliser hLitSuivant (ou hSuivant) pour passer au résultat suivant. Inutile de refaire la recherche.

    Question de performances, aussi bien de la base que du poste client

  9. #29
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Merci pour ces remarques pertinentes.

    Pour tout te dire, c'est un code que j'ai récupéré dans les exemples fournis avec Windev (j'ai juste changé les noms de table et champs)

  10. #30
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par Guardian Voir le message
    Si tu utilisais une table mémoire plutôt qu'une table fichier, puisque de toute façon ce n'est pas une BdD HF et que tu la remplis par une requete, ce serait beaucoup plus simple à gérer
    Bojnour les gens.

    Guardian, peux tu m'éclairer stp sur ce point ?

    Ca m'a l'air assez compliqué à gérer dans le principe. Passe encore de remplir la table mémoire avec une boucle sur ma requête, mais si ensuite l'utilisateur fait des modifications (valeurs des champs, suppressions de lignes, ajouts de ligne), comment répercuter les modifications dans la base ? Ca reste flou pour moi ...

    Pour info il n'est pas envisageable par exemple de supprimer toutes les lignes de la requête puis de les réécrire en totalité, si par exemple il y a une CIF avec une autre table.

    L.

  11. #31
    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
    Dans l'optique d'une BdD Oracle, le mieux est d'utiliser du code SQL.

    Si tu dois lire -> tu fais une requete et une table sur requete
    Si tu dois ajouter --> tu ajoutes avec une requete SQL
    Si tu dois supprimer --> tu devras, à mon avis, parcourir la table avec les sélections et effectuer autant de requetes qu'il y a de lignes sélectionnées-suppressions à effectuer

    Tout cela serait évidemment beaucoup plus simple avec une BdD HF

  12. #32
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Merci pour ta réponse.

    Pour les suppressions, ce n'est pas tout à fait l'ergonomie que je souhaite : l'utilisateur doit pouvoir supprimer les lignes qu'il veut de la table mémoire (tablesupprime en mémoire) et à la fin il valide par "OK" ou annule par "Cancel" (rien que du très classique).

    Du coup, comment synchroniser ensuite dans la BD tierce ? La seule solution que je vois consiste à garder en mémoire la clef des lignes supprimées et ensuite de lancer un "delete" à la validation.

    Et là, je ne pense pas qu'avec Hyperfile ca soit réellement plus simple car le TableSupprime supprime à la fois à l'écran et dans le fichier HyperFile, pas de "cancel" possible automatiquement non plus. Je trouve cette validation automatique (sans commit ni rollback) gênante.

    Pour ce qui est de la modification de données, meme ergonomie souhaitée. Mais là j'imagine que c'est un peu plus simple : il suffit de parcourir la table mémoire et de tester pour chaque ligne table..Modifié (?)

  13. #33
    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
    Citation Envoyé par Loko
    Et là, je ne pense pas qu'avec Hyperfile ca soit réellement plus simple car le TableSupprime supprime à la fois à l'écran et dans le fichier HyperFile, pas de "cancel" possible automatiquement non plus. Je trouve cette validation automatique (sans commit ni rollback) gênante.
    Pourquoi cet à priori négatif ?

    Comme dit précédemment, il est préférable de travailler sur le fichier et de réafficher la table, mais ceci est un autre débat.

    Mais surtout, on peut bien évidemment "canceller" une suppression si on désire disposer de cette possibilité :
    • d'une part avec HRaye()
    • d'autre part avec la Journalisation


    Citation Envoyé par Loko
    Pour les suppressions, ce n'est pas tout à fait l'ergonomie que je souhaite : l'utilisateur doit pouvoir supprimer les lignes qu'il veut de la table mémoire (tablesupprime en mémoire) et à la fin il valide par "OK" ou annule par "Cancel" (rien que du très classique).

    Du coup, comment synchroniser ensuite dans la BD tierce ? La seule solution que je vois consiste à garder en mémoire la clef des lignes supprimées et ensuite de lancer un "delete" à la validation.
    La suppression s'effectue lors de la validation par l'utilisateur
    Il n'y a pas de nécessité d'une étape intermédiaire.
    Il sélectionne les lignes et lorsqu'il valide la suppression, on lance l'opération.

    Citation Envoyé par Loko
    Pour ce qui est de la modification de données, meme ergonomie souhaitée. Mais là j'imagine que c'est un peu plus simple : il suffit de parcourir la table mémoire et de tester pour chaque ligne table..Modifié (?)
    Les modifications se font via une requete SQL (toujours parce qu'on est sur une BdD Oracle en HF c'est automatique) à chaque sortie de ligne tout simplement

  14. #34
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par Guardian Voir le message
    Pourquoi cet à priori négatif ?
    Disons que j'ai toujours eu l'habitude de demander proposer les boutons "valide" et "annuler" à mes utilisateurs, et quand on le fait pas ils ne manquent pas de nous les demander ! Donc le fait que la validation soit automatique est gênante.

    Mais surtout, on peut bien évidemment "canceller" une suppression si on désire disposer de cette possibilité :
    • d'une part avec HRaye()
    • d'autre part avec la Journalisation
    Dacodac. Je regarderai.

    La suppression s'effectue lors de la validation par l'utilisateur
    Il n'y a pas de nécessité d'une étape intermédiaire.
    Il sélectionne les lignes et lorsqu'il valide la suppression, on lance l'opération.
    Ca ne colle pas avec ce que je veux faire ;-)
    Il ne s'agit pas de valider la supression des lignes sélectionnées mais de valider l'ensemble des modifications faites dans l'écran. L'écran affiche plein d'infos de plusieurs tables liées (classiquement cde et lignes de cde) et l'utilisateur doit pouvoir supprimer des lignes puis modifier par exemple la date de livraison avant de choisir de valider le tout ou non. Si je fais TableSupprime direct il supprime de l'écran mais aussi de la base, donc nécessité d'utiliser une table mémoire même avec HyperFile (sauf à utiliser HRaye).

    Apres tout, pourquoi pas ? Mais je trouve plus simple d'avoir une fonction "commit" et une autre "rollback"

    Les modifications se font via une requete SQL (toujours parce qu'on est sur une BdD Oracle en HF c'est automatique) à chaque sortie de ligne tout simplement
    Non plus, pour la même raison qu'expliqué ci-avant, je ne peux pas écrire les modifs à chaque sortie de ligne si je veux pouvoir les annuler en sortant de ma fenêtre.

  15. #35
    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
    Je comprends bien.
    Mais tout ceci est parfaitement réalisable sans que l'aspect soit différent pour l'utilisateur.
    Le background devra peut-être être géré differemment, mais ça ne devrait pas être plus compliqué quand tu connaitrais ton outil et ses possibilités

  16. #36
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Re Bonjour

    J'essaie de me familiariser avec la gestion de table mémoire. Je m'interroge sur la meilleure façon de reporter les modifications de la table mémoire sur la base :

    - en parcourant la table mémoire ligne par ligne, comment savoir si telle ou telle ligne a été ajoutée ? Modifiée ? (car la propriété ..Modifiée s'applique à toute la table et non pas ligne par ligne je crois)

    - si une ligne a été supprimée de la table mémoire, comment la supprimer du fichier seulement après cilc d'un bouton de validation ?

  17. #37
    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
    Je me souviens que tu as des raisons d'envisager cette solution, mais je persiste à te conseiller de ne pas manipuler les enregistrements via les tables.

    Sauf dans le cas d'une Table fichier liée "directement".
    Dans ce cas, tous les traitements, modifications, ajouts, suppressions, sont directement répercutés dans le fichier.

    Mais dans le cas d'une table mémoire tu n'as aucun moyen de savoir ce qui a été modifié sauf par comparaison avec le fichier, ce qui risque d'être long.

    Alternative : mettre le code de modification dans le code de sortie de ligne, mais alors tu ne pourras plus valider l'ensemble des opérations.

  18. #38
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 188
    Points
    188
    Par défaut
    Merci, ca valide ma bonne compréhension du schmilblick (j'commence à penser comme un Windevien ;-) ).

    C'est vrai que dans tous les exemples fournis que j'ai vu les modifs de table se faisaient dans un popup séparé, mais je n'ai pas habitué mes utilisateurs à cela, et je les comprends quand ils veulent faire directement les ajout/modifs/suppression de ligne avec possibilité d'annuler le tout.

    A bientôt
    L.

  19. #39
    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
    Pour les annulations, pense aux transactions et à la journalisation

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/04/2010, 10h14
  2. Réponses: 3
    Dernier message: 28/04/2009, 00h42
  3. Supprimer toutes les contraintes d'une table
    Par pouss dans le forum SQL
    Réponses: 2
    Dernier message: 01/12/2008, 16h27
  4. Réponses: 2
    Dernier message: 26/09/2006, 09h08
  5. Réponses: 4
    Dernier message: 11/10/2005, 15h03

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