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 :

Extrait chaine sur tableau


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    loisir
    Inscrit en
    Juillet 2020
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : loisir
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 46
    Points : 17
    Points
    17
    Par défaut Extrait chaine sur tableau
    Bonjour,

    Je viens vous solliciter pour un blocage:

    Je souhaite qu'au moment de l'ajout d'un fichier pdf via hattachemémo,comparer si le fichier existe déja.Je pense que la fonction extraitchaine pourrait faire ça mais je ne sais pas bien le placer dans mon code.
    Je voudrais que la comparaison se fasse entre mon tableau et mon fichier de données au moment du clic sur bouton valider.Je dois faire un extrait chaine sur le tableau et sur le fichier de données?
    Mon tableau et mon code du bouton valider:

    Nom : Capture.PNG
Affichages : 450
Taille : 22,6 Ko

    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
    nAteSelect est un entier
    nFicheSelect est un entier
     
    SELON Dialogue("Etes vous sûr de vouloir ajouter ces fiches à l'atelier sélectionné?")
     
    	CAS 1 :
     
    		POUR nFicheSelect =1 À TableOccurrence(TABLE_Fiches)
    			TableSelectPlus(TABLE_Fiches,nFicheSelect)
     
    			SI ListeSelect(COMBO_Atelier_2)>0 ALORS
    				nAteSelect = COMBO_Atelier_2[ListeSelect(COMBO_Atelier_2)]..ValeurMémorisée	
     
    				SI nAteSelect > 0 ALORS
    					HLitRecherchePremier(Fichesécurité,IDAtelierFichesécurité,[nAteSelect,nFicheSelect])	
    					SI HTrouve(Fichesécurité) ALORS
     
    						ToastAffiche("Cette fiche sécurité existe déjà pour cet atelier",toastLong,cvMilieu,chCentre)
    						RETOUR
     
    						SINON
     
    						SI PAS HTrouve(Fichesécurité) ALORS
     
    						HRAZ(Fichesécurité)
     
    						Fichesécurité.Fichesécurité = TABLE_Fiches.COL_Nom_fiche
    						Fichesécurité.IDAtelier = nAteSelect
    						Fichesécurité.Fichechemin=TABLE_Fiches.COL_Chemin_fiche			
    						Fichesécurité.Date_de_création=DateHeureSys()
     
    						HAttacheMémo(Fichesécurité,FichesécuritéIMG,TABLE_Fiches.COL_Chemin_fiche,hMémoImg)
    						HAjoute(Fichesécurité)
     
    						FIN
     
    					FIN
     
    				FIN
     
    			FIN
     
    		FIN
    	CAS 2 : RETOUR	
    FIN	
    ToastAffiche(" Les fiches ont bien été ajoutées à "+ COMBO_Atelier_2[ListeSelect(COMBO_Atelier_2)]..ValeurAffichée,toastCourt,cvMilieu,chCentre)
    Cdt

  2. #2
    Membre éclairé
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2017
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 330
    Points : 795
    Points
    795
    Par défaut
    Il y a carrément plus simple je trouve. Quand tu ajoutes un fichier dans la base, stockes son hash sous forme de chaine en utilisant HashFichier puis BufferVersHexa. Tu auras un condensé du fichier sous forme d'une simple chaine.
    Avant d'ajouter un fichier, tu n'auras qu'à créer le hash de ce fichier, tu obtiendras une chaine, qu'il suffit de chercher dans le fichier FIC pour voir si elle existe, et si oui c'est que le fichier est déjà là...et tu as ton contrôle anti-doublons.

    Sinon si tu veux plutôt poursuivre dans ta solution il te faudra je pense utiliser HExtraitMemo (https://doc.pcsoft.fr/?3044072&name=...tmemo_fonction)

  3. #3
    Membre à l'essai
    Homme Profil pro
    loisir
    Inscrit en
    Juillet 2020
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : loisir
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 46
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par kunnskap Voir le message
    Il y a carrément plus simple je trouve. Quand tu ajoutes un fichier dans la base, stockes son hash sous forme de chaine en utilisant HashFichier puis BufferVersHexa. Tu auras un condensé du fichier sous forme d'une simple chaine.
    Avant d'ajouter un fichier, tu n'auras qu'à créer le hash de ce fichier, tu obtiendras une chaine, qu'il suffit de chercher dans le fichier FIC pour voir si elle existe, et si oui c'est que le fichier est déjà là...et tu as ton contrôle anti-doublons.

    Sinon si tu veux plutôt poursuivre dans ta solution il te faudra je pense utiliser HExtraitMemo (https://doc.pcsoft.fr/?3044072&name=...tmemo_fonction)
    Ok merci pour le tuyau.Je ne connaissais pas hashfichier.Du coup tu l'utiliserai comment suivant mon code?

  4. #4
    Membre éclairé
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2017
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 330
    Points : 795
    Points
    795
    Par défaut
    Si j'ai bien compris ce que tu fais, voilà un code adapté, avec des commentaires

    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
    55
    56
    57
    58
    59
    60
    61
    PROCÉDURE MaFenêtre()
     
    nAteSelect		est un entier
    nFicheSelect	est un entier
    bAjoutEffectue est un booléen = Faux
    SELON Dialogue("Etes vous sûr de vouloir ajouter ces fiches à l'atelier sélectionné?")
     
    	CAS 1 :
     
    		//Le choix de parcourir une table graphique est à utiliser avec précaution.
    		//Quand le code métier se trouve dans l'IHM cela complique l'évolution future de l'application et la factorisation des codes
    		POUR nFicheSelect =1 À TableOccurrence(TABLE_Fiches)
    			TableSelectPlus(TABLE_Fiches,nFicheSelect)
     
    			SI ListeSelect(COMBO_Atelier_2)>0 ALORS
    				nAteSelect = COMBO_Atelier_2[ListeSelect(COMBO_Atelier_2)]..ValeurMémorisée	
     
    				SI nAteSelect > 0 ALORS
    					HLitRecherchePremier(Fichesécurité,IDAtelierFichesécurité,[nAteSelect,nFicheSelect])	
    					SI _ficheExistante(cheminFichier) ALORS
     
    						ToastAffiche("Cette fiche sécurité existe déjà pour cet atelier",toastLong,cvMilieu,chCentre)
    						//RETOUR
    						//Pas de RETOUR dans le code, ça casse le flow du code. Une fonctione a un point d'entrée et un point de sortie
    						//Avec des RETOUR et/ou des GOTO dans le code, le debug et la factorisation des fonctions deviendront très difficiles à faire à l'avenir
    						//La maintenabilité du code en prend un sacré coup
     
    					SINON
     
    						//SI PAS HTrouve(Fichesécurité) ALORS
    						//Inutile de repréciser le SI PAS car tu étais dans la condition SINON du "SI HTrouve(Fichesécurité)"
    						//SI Htrouve renvoie Vrai tu afficheras un toast, sinon, tu passeras dans ce code d'ajout
    							HRAZ(Fichesécurité)
     
    							Fichesécurité.Fichesécurité		= TABLE_Fiches.COL_Nom_fiche
    							Fichesécurité.IDAtelier			= nAteSelect
    							Fichesécurité.Fichechemin		= TABLE_Fiches.COL_Chemin_fiche			
    							Fichesécurité.Date_de_création	= DateHeureSys()
     
    							HAttacheMémo(Fichesécurité,FichesécuritéIMG,TABLE_Fiches.COL_Chemin_fiche,hMémoImg)
    							SI HAjoute(Fichesécurité) ALORS
    								bAjoutEffectue=Vrai
    								//Mais c'est imparfait, ça te dira si au moins une fiche a été ajoutée mais ne dira rien si ça n'a pas été le cas pour certaines
    								//Il faut catcher les erreurs de HAjoute et HModifie
    							FIN
     
    						//FIN
     
    					FIN
     
    				FIN
     
    			FIN
     
    		FIN
    	CAS 2 : //RETOUR
    FIN	
     
    SI bAjoutEffectue ALORS
    	ToastAffiche(" Les fiches ont bien été ajoutées à "+ COMBO_Atelier_2[ListeSelect(COMBO_Atelier_2)]..ValeurAffichée,toastCourt,cvMilieu,chCentre)
    FIN

    Quand à la fonction _ficheExistante() elle prend en entrée le chemin d'un fichier, en calcule le hash, et cherche dans la base si ce hash existe et renvoie Vrai si c'est le cas. Tu dois coder cette vérification.

  5. #5
    Membre à l'essai
    Homme Profil pro
    loisir
    Inscrit en
    Juillet 2020
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : loisir
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 46
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par kunnskap Voir le message
    Si j'ai bien compris ce que tu fais, voilà un code adapté, avec des commentaires

    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
    55
    56
    57
    58
    59
    60
    61
    PROCÉDURE MaFenêtre()
     
    nAteSelect		est un entier
    nFicheSelect	est un entier
    bAjoutEffectue est un booléen = Faux
    SELON Dialogue("Etes vous sûr de vouloir ajouter ces fiches à l'atelier sélectionné?")
     
    	CAS 1 :
     
    		//Le choix de parcourir une table graphique est à utiliser avec précaution.
    		//Quand le code métier se trouve dans l'IHM cela complique l'évolution future de l'application et la factorisation des codes
    		POUR nFicheSelect =1 À TableOccurrence(TABLE_Fiches)
    			TableSelectPlus(TABLE_Fiches,nFicheSelect)
     
    			SI ListeSelect(COMBO_Atelier_2)>0 ALORS
    				nAteSelect = COMBO_Atelier_2[ListeSelect(COMBO_Atelier_2)]..ValeurMémorisée	
     
    				SI nAteSelect > 0 ALORS
    					HLitRecherchePremier(Fichesécurité,IDAtelierFichesécurité,[nAteSelect,nFicheSelect])	
    					SI _ficheExistante(cheminFichier) ALORS
     
    						ToastAffiche("Cette fiche sécurité existe déjà pour cet atelier",toastLong,cvMilieu,chCentre)
    						//RETOUR
    						//Pas de RETOUR dans le code, ça casse le flow du code. Une fonctione a un point d'entrée et un point de sortie
    						//Avec des RETOUR et/ou des GOTO dans le code, le debug et la factorisation des fonctions deviendront très difficiles à faire à l'avenir
    						//La maintenabilité du code en prend un sacré coup
     
    					SINON
     
    						//SI PAS HTrouve(Fichesécurité) ALORS
    						//Inutile de repréciser le SI PAS car tu étais dans la condition SINON du "SI HTrouve(Fichesécurité)"
    						//SI Htrouve renvoie Vrai tu afficheras un toast, sinon, tu passeras dans ce code d'ajout
    							HRAZ(Fichesécurité)
     
    							Fichesécurité.Fichesécurité		= TABLE_Fiches.COL_Nom_fiche
    							Fichesécurité.IDAtelier			= nAteSelect
    							Fichesécurité.Fichechemin		= TABLE_Fiches.COL_Chemin_fiche			
    							Fichesécurité.Date_de_création	= DateHeureSys()
     
    							HAttacheMémo(Fichesécurité,FichesécuritéIMG,TABLE_Fiches.COL_Chemin_fiche,hMémoImg)
    							SI HAjoute(Fichesécurité) ALORS
    								bAjoutEffectue=Vrai
    								//Mais c'est imparfait, ça te dira si au moins une fiche a été ajoutée mais ne dira rien si ça n'a pas été le cas pour certaines
    								//Il faut catcher les erreurs de HAjoute et HModifie
    							FIN
     
    						//FIN
     
    					FIN
     
    				FIN
     
    			FIN
     
    		FIN
    	CAS 2 : //RETOUR
    FIN	
     
    SI bAjoutEffectue ALORS
    	ToastAffiche(" Les fiches ont bien été ajoutées à "+ COMBO_Atelier_2[ListeSelect(COMBO_Atelier_2)]..ValeurAffichée,toastCourt,cvMilieu,chCentre)
    FIN

    Quand à la fonction _ficheExistante() elle prend en entrée le chemin d'un fichier, en calcule le hash, et cherche dans la base si ce hash existe et renvoie Vrai si c'est le cas. Tu dois coder cette vérification.

    ok merci

  6. #6
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 812
    Points : 5 271
    Points
    5 271
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Outre la remarque concernant l'accès aux combo moulte fois énnoncée,
    1-Ton HLitRecherchePremier me semble bizarre (remarque déjà faite)
    Tu fais une recherche sur une clé composée or, tu passe non pas la PK de la fiche mais son rang dans le champ table. Si ça fonctionne c'est un pur hasard car les 5 fiches sont les 5 premières dans ta table Fiche.
    Par ailleurs la recherche ne doit pas se faire sur la table FicheSécurité mais sur la table de liaison entre FicheSécurité et Atelier
    2-Il est inutile de stocker le chemin du fichier, il est stocké par la Fonction HAttacheMémo. Le fichier peut même être supprimé à l'issue de l'enregistrement.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/04/2013, 22h51
  2. Probleme avec malloc sur tableau de chaine
    Par grex1 dans le forum C
    Réponses: 2
    Dernier message: 12/09/2010, 22h36
  3. malloc sur tableau de chaine
    Par ishikawa dans le forum C
    Réponses: 13
    Dernier message: 27/04/2007, 14h24
  4. Problème de chaine sur une page HTML
    Par Kerod dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/11/2004, 16h23
  5. Réponses: 25
    Dernier message: 16/07/2003, 20h41

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