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

HyperFileSQL Discussion :

copie ensemble d'enregistrements de deux fichiers vers deux autres


Sujet :

HyperFileSQL

  1. #1
    Membre du Club
    Femme Profil pro
    windev
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Points : 49
    Points
    49
    Par défaut copie ensemble d'enregistrements de deux fichiers vers deux autres
    bonjour tout le monde
    j'ai besoin de votre aide pour réaliser une copie d'un ensemble d'enregistrements (saisis pendant une journée ) de deux fichiers liés T et Lignes vers T1 et Lignes1 (liés aussi) T et T1 ont les mm structures ,ainsi que Lignes et Lignes 1 . puis supprimer les lignes copiés des fichiers origines et ce en un seul bloc c à d tout ou rien . j'ai déjà utilisé les transactions mais ça me fait des problèmes ce n'est pas assez robuste (je perd souvent des lignes d'un coté ou de l'autre) j'utilise cette méthode pour archiver les donnees et alleger les fichiers T et Lignes supposé contenir les mouvm du journee en cours seulement . si vous avez d'autres idées ou questions je vous écoute. MERCI

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 389
    Points : 9 564
    Points
    9 564
    Par défaut
    Bonjour,

    Les transactions ne sont pas faites pour ce que tu souhaites.

    Ce qu'il te faut, c'est faire une procédure stockée sur ton serveur HF qui va se déclencher à une heure donnée. Si la copie ne devrait pas te poser de souci, attention à la suppression car il peu y avoir des erreurs liées aux contraintes d'intégrité.

    PS : Ce fil de discussion concerne plutôt le code Windev.

  3. #3
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    1 045
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 1 045
    Points : 2 503
    Points
    2 503
    Par défaut
    Bonsoir Bwafa,

    Si ça concerne votre application de caisse pour les café/resto :

    https://doc.pcsoft.fr/?3044261&name=...enreg_fonction

    https://doc.pcsoft.fr/fr-FR/?1000003...eenreg_exemple

    Pourquoi mettre en historique tous les jours ?
    Une fois par mois ne serait pas suffisant ?

  4. #4
    Membre du Club
    Femme Profil pro
    windev
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Points : 49
    Points
    49
    Par défaut
    Merci pour votre réponse
    je réexplique : cette procédure se fait à la demande de l'utilisateur en fin de journée (normalement) pour archiver les données de la journée dans T1 et Lignes1 et pas à une heure donnée. j'ai utilisé les transactions pour assurer l'unité du traitement : boucle copie T vers T1 puis Lignes vers Lignes1 puis suppression de Lignes puis suppression de T ; si au cours de la boucle une erreur est déclenchée la base revient à l'état initial.
    désolée, pouvez vous m'expliquez cette perte de données: (normalement suite à une transaction non aboutie )
    Nom : CaptNULL.png
Affichages : 154
Taille : 30,7 Ko

    je pense que je dois programmer la transaction moi même mais je na sais pas comment; peut être exporter les données vers Excel puis les importer ; êtes vous avec cette idée?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 285
    Points : 12 987
    Points
    12 987
    Par défaut
    Bonjour,
    Il est difficile de dire ce qui ne va pas dans le code, sans voir le code en question.
    Pour la gestion des transactions, il faut utiliser hTransactionDebut() en début de traitement, hTransactionFin() si tout c'est bien passé et hTransactionAnnule() en cas de problème pour tout annuler.

    Ainsi l'intégralité du traitement devient atomique.

    Évidemment tout doit être englobé dans une seule transaction, la copie des enregistrements des deux fichiers ainsi que la suppression dans les deux fichiers sources.

    Tatayo.

  6. #6
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    1 045
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 1 045
    Points : 2 503
    Points
    2 503
    Par défaut
    On peut voir le code ?

    Je fais ce type de traitement pour mettre en historique des factures.
    Je n'ai jamais rencontré le moindre problème.

  7. #7
    Membre du Club
    Femme Profil pro
    windev
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Points : 49
    Points
    49
    Par défaut
    @ TATAYO : oui je fait exactement ce que vous dites
    @ serendib: voici mon code complet:
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    SI HTransactionDébut(MaConnexion)=Vrai ALORS
    HSurErreur(TicketArchives,hErrDoublon,"")
    QUAND EXCEPTION DANS 
     
    	ListeTicketsReq.Pjournee=idJournEncours
    	HExécuteRequête(ListeTicketsReq,hModifieFichier)
     
    	SI HNbEnr(ListeTicketsReq)>0 ALORS
     
    		HLitPremier(ListeTicketsReq)	
    		TANTQUE PAS HEnDehors(ListeTicketsReq )
     
    			HLitRecherchePremier(Ticket,IDTicket,ListeTicketsReq.IDTicket)
     
    			HCopieEnreg(TicketArchives,Ticket)
    			SI HAjoute(TicketArchives) ALORS
    			nouvIDticket=TicketArchives.IDTicket
    			RequeteDesLignesTick.Pidticket=ListeTicketsReq.IDTicket
    			HExécuteRequête(RequeteDesLignesTick,hModifieFichier)
    			SI HNbEnr(RequeteDesLignesTick)>0 ALORS								
    				HLitPremier(RequeteDesLignesTick)
    						TANTQUE PAS HEnDehors(RequeteDesLignesTick)
    							HLitRecherchePremier(LigneTicket,IDLigneTicket,RequeteDesLignesTick.IDLigneTicket)
     
    							HCopieEnreg(LigneTicketArchives,LigneTicket)
    							SI 	HAjoute(LigneTicketArchives) ALORS
     
    								LigneTicketArchives.IDTicket=nouvIDticket
    								HModifie(LigneTicketArchives)
     
    								HLitSuivant(RequeteDesLignesTick)
    							SINON
    								ExceptionDéclenche(1,HErreurInfo())	
    							FIN
     
    						FIN
    			FIN
    			SupprimeLignesTicketReq.Pidticket=ListeTicketsReq.IDTicket
    			HExécuteRequête(SupprimeLignesTicketReq)
     
    				SINON
    					ExceptionDéclenche(1,HErreurInfo())	
    					FIN
     
    			HLitSuivant(ListeTicketsReq)
     
     
    		FIN
     
    		HSupprimeTout(ListeTicketsReq)
     
    	FIN	
    		Journées.Etatjourn="Cloturée"
    		Journées.dateCloture=DateSys()
    		Journées.HeureClot=HeureSys()
    		HModifie(Journées)
     
    	HTransactionFin(MaConnexion)
    	RENVOYER (1)
     
    FAIRE
    	Info(ExceptionInfo(errComplet) )
    	HSurErreur(TicketArchives,hErrDoublon)
    	HTransactionAnnule(MaConnexion)
    	RENVOYER (0)
    FIN
    SINON
    	SI HErreurDoublon() ALORS
     
    	FIN
    	Info(HErreurInfo(hErrComplet))
    	RENVOYER (0)
    FIN
    j'ai oublié de préciser je suis en version 20 pour ce projet mais je le migre tres prochainement vers la 28 ( déjà aquise)

  8. #8
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    1 045
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 1 045
    Points : 2 503
    Points
    2 503
    Par défaut
    Déjà tu peux t'affranchir des suppressions, puisque tu fais ça tous les jours.
    Tu copies les enregistrements du jour dans l'historique et à la fin
    si tout c'est bien passé, HCreation du fichier de la journée.

  9. #9
    Membre du Club
    Femme Profil pro
    windev
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Points : 49
    Points
    49
    Par défaut
    @ serendib avez vous des remarques concernant le code? pouvez vous me donner une idée comment vous procédez pour le traitement de vos factures? merci

  10. #10
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 389
    Points : 9 564
    Points
    9 564
    Par défaut
    Bonjour,

    Première chose : tes tests si hnbenr() > 0 sont inutiles. Si le fichier / le résultat de la requête est vide, il n'y aura pas d'erreur. Il ne se passera rien, c'est tout.
    Deuxième chose : tu fais des hlitrecherchepremier mais tu ne testes pas le résultat. En cas d'erreur de lecture, les données remontées seront fausses.
    Troisième chose : tu fais une requete (sur ticket) et tu refais une recherche sur ticket. C'est pénalisant en temps. Utilise plutôt le résultat de la requête.
    Quatrième chose : tu t'embêtes à remettre à jour les idFacture. Tu devrais utiliser utiliser la constante hCopieIdAuto dans le HcopieEnreg.
    Dernière chose : écris tes requêtes "à la main". C'est à mon avis plus facile à débugger. D'autant plus que celles-ci doivent être simples (genre SELECT * FROM Ticket).

  11. #11
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    1 045
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 1 045
    Points : 2 503
    Points
    2 503
    Par défaut
    Citation Envoyé par Bwafa Voir le message
    @ serendib avez vous des remarques concernant le code? pouvez vous me donner une idée comment vous procédez pour le traitement de vos factures? merci
    Dans mon cas c'est un peu plus complexe car, entre autre,
    c'est l'utilisateur qui défini la période de mise en historique.

    Mais pour vous le fichier étant une journée entière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    HTransactionDebut()
     
    HLitPremier(récap de caisse)
    TantQue pas h.Endehors()
       HCopieEnr() // du récap vers son pendant historique avec la constante hCopieIdAuto.
       HLitSuivant(récap de caisse)
    FIN
     
    //Idem pour les lignes de caisse.
     
    HTransactionFin()
    Puis Hcreation(des deux fichiers journaliers) pour repartir à zéro.

    Et voilà.

  12. #12
    Membre du Club
    Femme Profil pro
    windev
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Points : 49
    Points
    49
    Par défaut
    merci à vous tous
    alors pas d'autres idées pour programmer moi meme la transaction ?
    je rencontre souvent des transaction non abouties et non annulée , résultat: donnees perdues ( comme dans l'image envoyée) et il faut que je supprime le dossier _TRS pour débloquer les fichiers en transaction. (peut etre des test manquants au cours de ma procedure)
    @frenchsting
    Troisième chose : tu fais une requete (sur ticket) et tu refais une recherche sur ticket. C'est pénalisant en temps. Utilise plutôt le résultat de la requête.
    c'est parceque la requete ne contient pas tt les rubrique du fichier , je dois me placer sur la ligne à copier pour faire HCopieEnreg(TicketArchives,Ticket) , n'est ce pas ? ou bien j'ai pas bien compris votre remarque

  13. #13
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 389
    Points : 9 564
    Points
    9 564
    Par défaut
    Tu fais une requête SQL en texte que tu exécutes : SELECT * FROM Ticket. Le résultat est dans une source de connées (par ex : src_Req).
    Tu as le droit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HCopieEnreg(TicketArchives, src_Req)

  14. #14
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    1 045
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 1 045
    Points : 2 503
    Points
    2 503
    Par défaut
    Pourquoi faire simple alors qu'on peut faire compliqué.

    Combien de tickets dans une journée ?
    De toutes façons, il faut TOUS les prendre, non ?

  15. #15
    Membre du Club
    Femme Profil pro
    windev
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par serendib Voir le message

    Combien de tickets dans une journée ?
    ça dépend de l'activité , 100 ou 1000 on ne sais pas
    De toutes façons, il faut TOUS les prendre, non ?
    oui


    desolée j'ai pas vu votre message
    Si ça concerne votre application de caisse pour les café/resto :
    oui et d'autre activité pos. et concernant l'exemple de HCopieEnreg() , j'ai bien vu merci

    Pourquoi mettre en historique tous les jours ?
    Une fois par mois ne serait pas suffisant ?
    j'essaye d'alleger les fichiers de journee en cours , en tout cas l'utilisateur peut mettre en historique quand il le veux meme 2 fois par jour , une fois par semaine...

  16. #16
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    1 045
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 1 045
    Points : 2 503
    Points
    2 503
    Par défaut
    1000 Clients/Jours : c'est un supermarché ?

    Bref,

    Puisqu'il faut tout traiter je répète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    HTransactionDebut()
    HLitPremier(récap de caisse)
    TantQue pas h.Endehors()
       HCopieEnreg() // du récap vers son pendant historique avec la constante hCopieIdAuto.
       HLitSuivant(récap de caisse)
    FIN
     
    //Idem pour les lignes de caisse.
    HTransactionFin()
    Ca va prendre au pire une paire de minutes.
    Et je ne vois pas bien ce qui pourrait perturber le bon déroulement.

  17. #17
    Membre du Club
    Femme Profil pro
    windev
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Points : 49
    Points
    49
    Par défaut
    Merci pour votre temps consacré

    Citation Envoyé par serendib Voir le message
    1000 Clients/Jours : c'est un supermarché ?
    ça peut l'être
    Et je ne vois pas bien ce qui pourrait perturber le bon déroulement.
    coupure de courant , index corrompu qui donne deux fois id=0 (qui est clé unique ) pour le fichier historique ou autre chose que j'ignore
    et parfois je reçoit ce message

    Nom : Capture.PNG
Affichages : 123
Taille : 118,4 Ko
    de meme pour les autres fichiers concernés par la transaction

    il me faut supprimer le dossier _TRS et liberer manuellement l'enregistrement apres je perd des données qui ne se trouve plus ni dans la source ni dans la destination

  18. #18
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    1 045
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 1 045
    Points : 2 503
    Points
    2 503
    Par défaut
    Pour citer tatayo :
    hTransactionFin() si tout c'est bien passé

    suivi de Hcreation(des deux fichiers journaliers) pour repartir à zéro.

    sinon
    hTransactionAnnule() en cas de problème pour tout annuler.

    Mais si tu remplaces ton code alambiqué par le mien, je doute que tu rencontres tous ces problèmes.
    Donc faits au moins un test à partir de mon code.

Discussions similaires

  1. [WD25] Copie enregistrements d'un fichier vers un autre
    Par matiasko dans le forum WinDev
    Réponses: 30
    Dernier message: 04/06/2021, 10h18
  2. [XL-2016] Copie de lignes entières d'un fichier vers un autre
    Par SaulEman dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/02/2019, 15h25
  3. [AC-2010] Copie d'un enregistrement d'une table vers une autre.
    Par Jeanpierre71 dans le forum VBA Access
    Réponses: 5
    Dernier message: 14/11/2016, 17h13
  4. [AC-2007] [QRY SQL] Copie d'un enregistrement d'une table vers une autre en respectant les critères
    Par Barbaboulle dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 11/10/2009, 16h03
  5. copie d'un fichier vers un autre serveur
    Par jexl dans le forum ASP
    Réponses: 4
    Dernier message: 20/12/2004, 17h04

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