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

IHM Discussion :

Bonne pratique pour un sous formulaire [AC-2010]


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut Bonne pratique pour un sous formulaire
    Bonjour,

    Je me balade de forum en forum afin de trouver une réponse mais toutes mes tentatives se soldent par un échec je pense donc que mon problème n'est pas là où je pense.

    Je m'explique:
    J'ai un formulaire de saisie de devis sans source de données.
    Quand je sélectionne le client dans une liste déroulante cela me génère un numéro de devis dans un champ indépendant.
    Je sélectionne ensuite le numéro de la demande client dans une liste déroulante cette action active un sous-formulaire basé sur une table contenant les actions et les coûts pour ce devis.

    Pour créer un nouveau devis, je dois sélectionner le numéro de demande client dans une liste déroulante. Cette action active le code suivant en bas de post.

    Ce sous-formulaire à pour source:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T_Devis_Actions_Acteur.N°, T_Devis_Actions_Acteur.[Pré-Requis], T_Devis_Actions_Acteur.Ref_Devis, T_Devis_Actions_Acteur.Indice_Action, T_Devis_Actions_Acteur.Nom_Acteur, T_Devis_Actions_Acteur.Action, T_Devis_Actions_Acteur.Date_Souhaite, T_Devis_Actions_Acteur.Date_Planif, T_Devis_Actions_Acteur.Charge FROM T_Devis_Actions_Acteur;

    Il est lié par
    Champ père: N° (le champ dans lequel je fait apparaître le numéro de devis)
    Champ fils: Ref_Devis

    Je vois le formulaire se rafraîchir mais les données saisies dans la table n'apparaisse pas.

    Qu'ai-je fait pour que cela ne fonctionne pas.
    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
    Private Sub Modifiable11_AfterUpdate()
     
      Req = "SELECT T_DEVIS.N° FROM T_DEVIS WHERE T_DEVIS.N°=""" & Forms![STB_Saisie_Devis].N°.Value & """;"
      Set rst = CurrentDb.OpenRecordset(Req)
      If rst.RecordCount = 0 Then
        Set rst = CurrentDb.OpenRecordset("T_Devis", dbOpenDynaset)
        rst.AddNew
        rst("N°") = Forms![STB_Saisie_Devis].N°.Value
        rst("STB") = Forms![STB_Saisie_Devis].Modifiable11.Column(0)
        rst("Date_emission") = Date
        rst.Update
        rst.Close
        Set rst = Nothing
      Else
        rst.Close
        Set rst = Nothing
      End If
     
    '  Affichage du champs commentaire
      Me.Étiquette16.Visible = True
      Me.Texte15.Visible = True
     
    'Inscription des lignes standard dans la table T_Devis_Actions_Acteur
      Set rst = CurrentDb.OpenRecordset("T_Devis_Actions_Acteur", dbOpenDynaset)
      rst.AddNew
      rst("Ref_Devis") = Forms![STB_Saisie_Devis].N°.Value
      rst("Indice_Action") = 1
      Req = "Select Ref_Acteur FROM T_Annuaire WHERE T_Annuaire.Nom=""CSK-MANAGEMENT OFFICE"""
      Set rst1 = CurrentDb.OpenRecordset(Req)
      rst("Nom_Acteur") = rst1.Fields(0).Value
      rst1.Close
      Set rst1 = Nothing
      rst("Action") = "Devis + Macro planning + Coordination"
      rst.Update
     
      rst.AddNew
      rst("Ref_Devis") = Forms![STB_Saisie_Devis].N°.Value
      rst("Indice_Action") = 2
      rst("Action") = "Rédaction DMEP (v1 et v2)"
      rst.Update
     
      rst.AddNew
      rst("Ref_Devis") = Forms![STB_Saisie_Devis].N°.Value
      rst("Indice_Action") = 3
      rst("Action") = "Mise à jour Docs (DTArch/HLD/…)"
      rst.Update
     
      rst.AddNew
      rst("Ref_Devis") = Forms![STB_Saisie_Devis].N°.Value
      rst("Indice_Action") = 4
      Req = "Select Ref_Acteur FROM T_Annuaire WHERE T_Annuaire.Nom=""CSK-MANAGEMENT OFFICE"""
      Set rst1 = CurrentDb.OpenRecordset(Req)
      rst("Nom_Acteur") = rst1.Fields(0).Value
      rst1.Close
      Set rst1 = Nothing
      rst("Action") = "Passage CAB client"
      rst.Update
     
      rst.Close
      Set rst = Nothing
     
      Me.STB_Devis_Actions_Acteur_sf.Visible = True
      Me.STB_Devis_Actions_Acteur_sf.SetFocus
      Me.STB_Devis_Actions_Acteur_sf.Form.Requery
      Me.STB_Devis_Actions_Acteur_sf.Controls("[Indice_Action]").SetFocus
    End Sub

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 587
    Points
    24 587
    Par défaut
    Bonjour,
    Il y a une raison technique pour ne pas utiliser de source dans ton formulaire ?

    Quand tu indique "Je vois le formulaire se rafraîchir ..." tu parles du sous-formulaire ?

    Qu'indique le contenu de la source quand tu l'interroge en dehors du sous-form ?

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Re-bonjour loufab

    je vais essayer d'être plus clair.
    Il y a une raison technique pour ne pas utiliser de source dans ton formulaire ?
    Oui, le numéro du devis est créé par code VBA et est une clé primaire à une table.

    Quand tu indique "Je vois le formulaire se rafraîchir ..." tu parles du sous-formulaire ?
    Oui

    Qu'indique le contenu de la source quand tu l'interroge en dehors du sous-form ?
    J'ai exécuté la requête source hors formulaire. Cela me renvoyait la totalité de la table.
    J'ai modifié la requête sources comme suit:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Devis_Actions_Acteur.N°, T_Devis_Actions_Acteur.[Pré-Requis], T_Devis_Actions_Acteur.Ref_Devis, T_Devis_Actions_Acteur.Indice_Action, T_Devis_Actions_Acteur.Nom_Acteur, T_Devis_Actions_Acteur.Action, T_Devis_Actions_Acteur.Date_Souhaite, T_Devis_Actions_Acteur.Date_Planif, T_Devis_Actions_Acteur.Charge
    FROM T_Devis_Actions_Acteur
    WHERE (((T_Devis_Actions_Acteur.Ref_Devis)=[Formulaires]![STB_Saisie_Devis]![N°]));

    Cela m'a donné les 4 lignes attendues.
    J'ai positionné cette nouvelle requête en tant que source de mon sous formulaire et je n'ai rien qui remonte????

    As-tu une explication?

    Cordialement

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 587
    Points
    24 587
    Par défaut
    Oui, le numéro du devis est créé par code VBA et est une clé primaire à une table.
    Ce n'est pas une raison mais un choix. Je fais régulièrement ce type de chose (un N° unique calculé par VBA) et je n'ai jamais créer de formulaire autonome. Tu perds pas mal de propriétés et méthodes intéressantes... mais c'est ton choix.


    Si ça ne remonte pas ce qu'il faut c'est que [Formulaires]![STB_Saisie_Devis]![N°] ne contient pas la bonne valeur. Tu devrais la vérifier par code.

    Tu es dans une archi Form/ sous-form, pourquoi n'utilises-tu pas les propriétés Champ père/ champ fils. Peut-être parce que tu utilises un formulaire autonome ?

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Je viens de vérifier et je tiens à m'excuser mon formulaire principale repose sur la table T_Devis. Mais il ne contient que des champs indépendant.
    Le numéro du devis est saisie par code dans le champ indépendant N°. Suite à cette action la liste indépendante des demandes clients s'ouvre.

    Lorsque la demande est sélectionné le code fournit précédemment
    Il saisi les valeurs utiles dans la table T_Devis puis saisi les données dans la table T_Devis_Action.
    Enfin, il rafraichit le sous formulaire basé sur la table T_devis_Action.

    Faut-il prévoir un requery du principale avant de faire le requery du fils?


    Merci de ton aide

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 587
    Points
    24 587
    Par défaut
    Si T_DEVIS est la table mère et T_DEVIS_ACTION la table enfant il faut simplement valoriser les propriétés Champs père et Champs fils. ACCESS s'occupera de faire le requery seul.

    Attention ! un requery par code (me.requery) réinterroge la source mais remet le pointeur en début de Recordset. Donc tu n'affiches pas ta saisie.
    Un conseil : attention aux faux amis ! toujours regarder dans le F1 lors de l'utilisation d'une commande/méthode/propriété que l'on croit connaître.

    A quoi sert une source si c'est pour n'y mettre que des contrôles indépendant. Il me semble qu'il y a quelques incertitudes dans ce montage.
    Il vaut mieux clarifier tout cela avant de poursuivre.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Bonjour Loufab et merci

    Je suis d'accord sur ce que tu dis. Il y a longtemps que je n'avais pas travaillé sur des formulaires access.

    J'ai bien le champs père/fils de renseigné à ce niveau pas de soucis. Si je comprends bien le requery par VBA ne peux pas retrouvé les enregistrements que je viens d'effectuer.
    Je vais tenter une autre approche suite à tes remarques en espérant avoir compris.

    Je créé un formulaire principal Saisie_Devis sur lequel j'ai:
    Des champs liés à la table sources: T_DEVIS.N°; T_DEVIS.STB; T_DEVIS.Commentaire.
    Une liste déroulante indépendante contenant la liste des clients possibles.

    Quand je sélectionne un client:
    je génère par VBA un numéro chrono que j'affecte au champs T_Devis.N° du Formulaire
    J'affiche le champs N°; STB; Commentaire
    Je positionne mon focus sur le champs STB.

    Quand je sélectionne une STB pour ce client:
    Je crée les enregistrements standards dans la table T_Devis_Actions_Acteur
    J'affiche le sous-formulaire Saisie_Devis_sf basé sur la table T_Devis_Actions_Acteur: Le formulaire et le sous-formulaire sont liés par champs père-fils (Clé primaire T_DEVIS; clé étrangère T_Devis_Actions_Acteur)

    En procédant de cette façon cela devrait-il fonctionner?

    Je te remercie à nouveau pour ton aide.

    11:29 J'ai fait plusieurs essaie et je dois avouer qu'il doit y avoir quelque chose que je n'ai pas compris.
    J'ai appliqué ce que j'ai décrit. Les données sont bien inscrites dans la table T_DEVIS ainsi que dans la table T_Devis_Actions_Acteur.
    Mais impossible de les afficher à l'utilisateur dans le sous formulaire. J'ai tenter avec la fonction Me.STB_Devis_Actions_Acteur_sf.Form.Requery sans succés.

    Je me demandais si cela ne pouvez pas être lié à un soucis dans l'ordre d'exécution des actions.

    Cordialement

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 587
    Points
    24 587
    Par défaut
    Ton T_DEVIS.N°... il ne serait pas du type NumeroAuto par hasard ?

    Sinon poste ce que tu as fais avec un petit échantillon de données, je regarderais où ça pèche.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Non c'est un champ texte qui est remplit par une macro que génére un numéro unique au format texte.

    J'ai pu purger la plupart des tables afin de réduire les tailles. J'espère que cela pourra t'aider à m'aider.

    Si certaines choses te semble aberrante ou mal construite je prends toutes remarques humblement car c'est la première fois depuis des années que je travaille sur une tel base. Ces aberrations me permettront peut-être de comprendre pourquoi la suppression de 140000 ligne dans une table T_Incidents prend environ 2h

    Ca y est je t'ai placé les fichier en PJ encore merci pour ton temps.

    Cordialement
    Fichiers attachés Fichiers attachés

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 587
    Points
    24 587
    Par défaut
    140000 lignes 2 heures... je dirais le chemin d'attache qui est UNC d'une part et trop long d'autre part. (cf mon tuto sur l'optimisation.)
    Beaucoup trop de relations à intégrité référentielle inutiles (je vois déjà des gars derrière la porte prêt à bondir ).
    Celles sur les tables de référence (T_Priorité, T_Type_Incident...) principalement. Un ID sur une référence n'est pas censé bouger. On peut très facilement gérer le cas à dans l'interface.

    Il semble d'autre part que tu ais des champs ID mais que tu utilises les infos utilisateurs (ref_devis) pour établir tes relations dans l'ihm. Du coup tu ne bénéficies pas de la puissance du Rushmore JET.

    Pour le formulaire STB :
    C'est en cours.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  11. #11
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 587
    Points
    24 587
    Par défaut
    Dans le STB :

    1)
    Lorsque tu lance l'action sur la liste déroulante l'enregistrement n'est pas encore enregistré (petit crayon dans le sélecteur), il est en cours de création, il te faut mettre un :
    En tout début de ton code pour forcer l'enregistrement de la fiche.

    2)
    Enfin tu as touché aux propriétés des formulaires. Notamment Entrée de données que tu mets à Oui. Ce n'est pas bon ! Cette propriété prend le dessus sur toutes les autres, et tu ne peux faire que de l'ajout. Donc il ne t'affiche pas tes enregistrements dans ton sous-form.
    Un conseil : attention aux faux amis ! toujours regarder dans le F1 lors de l'utilisation d'une commande/méthode/propriété que l'on croit connaître.

    3)
    Il y a un mélange dans le nom des champs des tables : REF_DEVIS dans une et N° dans l'autre... une belle source de problème.

    4)
    Ton appel de formulaire est faux, ce n'est d'ailleurs pas un sous-formulaire mais bel et bien un formulaire. Donc pas d'histoire de Champs Père ou Fils possible.

    Bref ! Voici la bonne syntaxe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      DoCmd.OpenForm "STB_Devis_Actions_Acteur_sf", acFormDS, , "REF_DEVIS=""" & Me.N° & """"
    La clause Filter c'est lorsque tu veux pouvoir avoir accès à d'autres enregistrements que ceux choisi au début. Exemple : tu affiches les enreg de ce devis, et l'utilisateur choisi à un instant T de voir d'autre enreg. Il change le filtre/ l'annule...
    La clause Where c'est lorsque tu ne veux voir que ces enregistrements, c'est donc bien ce cas là qui est envisagé dans ton traitement. Que ce devis et pas un autre.

    5)
    Si tu utilises la clause filter ou where, tu ne dois pas utiliser de condition dans la requête source de ton formulaire. C'est soit l'un soit l'autre.

    6) En vrac.
    Nomme tes contrôles, sinon dans le code tu ne vas pas t'y retrouver.
    Il n'y a pas de gestion d'erreur.
    Tu semble utiliser la technique du T_dummy. Pourquoi ?

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Bonjour Loufab,

    Merci pour ton œil expert, je vais ingurgiter toutes tes informations réaliser les modifications liées.
    Je reviendrais ensuite vers toi si je déconne encore sur le formulaire STB
    En revanche, je ne comprends pas la remarque:
    Il semble d'autre part que tu ais des champs ID mais que tu utilises les infos utilisateurs (ref_devis) pour établir tes relations dans l'ihm. Du coup tu ne bénéficies pas de la puissance du Rushmore JET.
    Je croyais que la liaison entre formulaire et sous-formulaire devait se faire sur clé primaire et clé étrangère. Je vais me renseigner sur le Rushmore JET pour comprendre (pour dire vrai le nom me parle).

    Encore merci pour ton temps et ta disponibilité.

    Cordialement
    Bon WE

  13. #13
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 587
    Points
    24 587
    Par défaut
    Rushmore est dégrossi dans mon tuto sur l'optimisation. Sinon voir le MSDN. A noter que Rushmore est utilisé par SQL Server également.

    Pour qu'une BDD soit rapide il faut créer les liaisons d'après de ID au format Numérique Long (NuméroAuto d'un coté et Numérique Long de l'autre).
    En utilisant Ref_DEVIS au format Texte comme tu le fais (alors que tu as un ID qui pourrait faire l'affaire) tu ralentis toutes tes requêtes, et comme dans ACCESS tout est requête...

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Bonjour Loufab,

    Je progresse dans la transformation de ma base en suivant tes conseils.
    J'ai pu supprimer la plupart des intégrités relationnels avec les tables de références.
    J'ai par ailleurs, modifié ces dernières afin qu'elle ne stocke pas de doublon et qu'elle n'autorise pas les chaines vides ni la valeur null sur le champ "nom".
    Je vais maintenant entamer la transformation de la table T_Devis et T_Devis_Actions_Acteur afin d'insérer un numéro auto dans T_Devis et modifier la clé étrangère de la table T_Devis_Actions_Acteur.

    Je vous tiens informé des mes avancés.

    PS pour information, le fait d'avoir supprimer la plupart des intégrités relationnelles n'a pas vraiment amélioré les performances de l'update de ma table T_incident (des heures). J'ai ouverts un post à ce sujet encore une incompréhension de ma part certainement.

    Post Optimisation Update

    Encore merci pour votre patience.

  15. #15
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 587
    Points
    24 587
    Par défaut
    Le déplacement du fichier de données et l'utilisation d'un unité logique plutôt que d'un chemin UNC dans les attaches n'a pas solutionné le problème de lenteur ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Bonjour

    Non malheureusement.
    J'ai tenté quelques tests et dés que je filtre les données sur cette table T_incident en fonction d'une table temporaire d'import, les temps de réponse sont mauvais.
    J'ai pensé à plusieurs pistes:
    Création d'index lors de la génération de la table temporaire
    Ne pas filtrer les données en amont mais là j'ai peur du volume transférer.
    Un mélange des 2
    Une approche différente de la méthode de mise à jour (mais laquel)

    Question subsidiaire concernant le forum. Je souhaiterai pouvoir supprimer les fichiers que j'ai uploadé afin de ne pas me mélanger comme je l'ai fait avec la base contenant le formulaire de saisie des devis. Est-ce faisable?

  17. #17
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 587
    Points
    24 587
    Par défaut
    Pour le pb de forum, Tableau de bord, Divers, pièces jointes, sélection et Supprimer.

    Pour ton problème de lenteur, il y a forcément une cause car la suppression de 140000 enregistrements ne prend pas autant de temps.
    Maintenant dire d'où exactement... il n'y a qu'une investigation sur place qui pourrait l'indiquer. La seule chose qu'on puisse faire à distance c'est vérifier que cela ne vient pas de l'infrastructure (serveur/réseau/...)

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  18. #18
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 587
    Points
    24 587
    Par défaut
    T_incident en fonction d'une table temporaire d'import
    Comment est ton filtre ?

    in(select... ) ou Inner/left/right join ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Bonjour Loufab,

    Afin de s'affranchir de la parti réseau, j'ai copié mes bases en local dans un répertoire D:\base. J'ai relié ces 2 bases.
    J'ai relancé ma requête update, cela fait actuellement 30 min qu'elle tourne et elle n'a mis à jour que 3 enregistrements.

    Voici la requête que j'utilise la méthode fonctionne sur mes autres tables (beaucoup plus petites).
    Pour répondre à ta question je dirais inner.

    Je pense que mon pb viens de sa structure (la clause Where). Malheureusement je n'ai rien trouvé d'autre avec mes compétences.
    Qu'est qui ne va pas dans mon approche?
    Cela serait-il plus rapide si je n'avais pas de WHERE?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE t_temp INNER JOIN T_Incidents ON t_temp.REF_Incident = T_Incidents.REF_Incident SET T_Incidents.REF_Incident = [t_temp].REF_Incident, T_Incidents.Ref_SLA = [t_temp].[Ref_SLA], T_Incidents.Ref_Plage_Service = [t_temp].[Ref_Plage_Service], T_Incidents.Respect_SLA = [t_temp].[Respect_SLA], T_Incidents.Ref_Qualif = [t_temp].[Ref_Qualif], T_Incidents.Ref_Categorie = [t_temp].[Ref_Categorie], T_Incidents.Ref_Group_Resol = [t_temp].[Ref_Group_Resol], T_Incidents.Ref_Priorite = [t_temp].[Ref_Priorite], T_Incidents.Date_Creation = [t_temp].[Date_Creation], T_Incidents.Date_cloture = [t_temp].[Date_cloture], T_Incidents.Date_Dernier_changement = [t_temp].[Date_Dernier_changement], T_Incidents.Date_Acceptation = [t_temp].[Date_Acceptation], T_Incidents.Date_Resolution = [t_temp].[Date_Resolution], T_Incidents.Reouverture = [t_temp].[Reouverture], T_Incidents.Niveau_Resol = [t_temp].[Niveau_Resol], T_Incidents.Ref_Statut = [t_temp].[Ref_Statut]," & _
            " T_Incidents.Ref_Dernier_Action = [t_temp].[Ref_Dernier_Action], T_Incidents.Ref_Origine = [t_temp].[Ref_Origine], T_Incidents.Nb_Reouv = [t_temp].[Nb_Reouv], T_Incidents.Nb_Reassign = [t_temp].[Nb_Reassign], T_Incidents.Ref_Assigne_a = [t_temp].[Ref_Assigne_a], T_Incidents.Délai_traitement_HG = [t_temp].[Délai_traitement_HG], T_Incidents.Ponderation = [t_temp].[Ponderation], T_Incidents.Relance_Intervenant = [t_temp].[Relance_Intervenant], T_Incidents.Relance_Utilisateur = [t_temp].[Relance_Utilisateur], T_Incidents.Date_mail = [t_temp].[Date_mail], T_Incidents.No_Client = [t_temp].[No_Client], T_Incidents.CI = [t_temp].[CI], T_Incidents.Date_First_trans = [t_temp].[Date_First_trans], T_Incidents.Date_detection = [t_temp].[Date_detection], T_Incidents.Ref_Client = [t_temp].[Ref_Client], T_Incidents.Ref_Criticite = [t_temp].[Ref_Criticite], T_Incidents.Ref_Impact = [t_temp].[Ref_Impact], T_Incidents.Incid_Majeur = [t_temp].[Incid_Majeur], T_Incidents.Incid_prod = [t_temp].[Incid_prod]," & _
            " T_Incidents.Code_facture = [t_temp].[Code_facture], T_Incidents.Comment_Resol = [t_temp].[Comment_Resol], T_Incidents.Resume = [t_temp].[Resume], T_Incidents.Recapitulatif = [t_temp].[Recapitulatif]" & _
            " WHERE(((T_Incidents.REF_Incident) <> [t_temp].REF_Incident Or (T_Incidents.REF_Incident) Is Null)) Or (((T_Incidents.Ref_SLA) <> [t_temp].[Ref_SLA] Or (T_Incidents.Ref_SLA) Is Null)) Or (((T_Incidents.Ref_Plage_Service) <> [t_temp].[Ref_Plage_Service] Or (T_Incidents.Ref_Plage_Service) Is Null)) Or (((T_Incidents.Respect_SLA) <> [t_temp].[Respect_SLA] Or (T_Incidents.Respect_SLA) Is Null)) Or (((T_Incidents.Ref_Qualif) <> [t_temp].[Ref_Qualif] Or (T_Incidents.Ref_Qualif) Is Null)) Or (((T_Incidents.Ref_Categorie) <> [t_temp].[Ref_Categorie] Or (T_Incidents.Ref_Categorie) Is Null)) Or (((T_Incidents.Ref_Group_Resol) <> [t_temp].[Ref_Group_Resol] Or (T_Incidents.Ref_Group_Resol) Is Null)) Or (((T_Incidents.Ref_Priorite) <> [t_temp].[Ref_Priorite] Or (T_Incidents.Ref_Priorite) Is Null)) Or (((T_Incidents.Date_Creation) <> [t_temp].[Date_Creation] Or (T_Incidents.Date_Creation) Is Null)) OR (((T_Incidents.Date_cloture)<>[t_temp].[Date_cloture] Or (T_Incidents.Date_cloture) Is Null))" & _
            " OR (((T_Incidents.Date_Dernier_changement)<>[t_temp].[Date_Dernier_changement] Or (T_Incidents.Date_Dernier_changement) Is Null)) OR (((T_Incidents.Date_Acceptation)<>[t_temp].[Date_Acceptation] Or (T_Incidents.Date_Acceptation) Is Null)) OR (((T_Incidents.Date_Resolution)<>[t_temp].[Date_Resolution] Or (T_Incidents.Date_Resolution) Is Null)) OR (((T_Incidents.Reouverture)<>[t_temp].[Reouverture] Or (T_Incidents.Reouverture) Is Null)) OR (((T_Incidents.Niveau_Resol)<>[t_temp].[Niveau_Resol] Or (T_Incidents.Niveau_Resol) Is Null)) OR (((T_Incidents.Ref_Statut)<>[t_temp].[Ref_Statut] Or (T_Incidents.Ref_Statut) Is Null)) OR (((T_Incidents.Ref_Dernier_Action)<>[t_temp].[Ref_Dernier_Action] Or (T_Incidents.Ref_Dernier_Action) Is Null)) OR (((T_Incidents.Ref_Origine)<>[t_temp].[Ref_Origine] Or (T_Incidents.Ref_Origine) Is Null)) OR (((T_Incidents.Nb_Reouv)<>[t_temp].[Nb_Reouv] Or (T_Incidents.Nb_Reouv) Is Null)) OR (((T_Incidents.Nb_Reassign)<>[t_temp].[Nb_Reassign]" & _
            " Or (T_Incidents.Nb_Reassign) Is Null)) OR (((T_Incidents.Ref_Assigne_a)<>[t_temp].[Ref_Assigne_a] Or (T_Incidents.Ref_Assigne_a) Is Null)) OR (((T_Incidents.Délai_traitement_HG)<>[t_temp].[Délai_traitement_HG] Or (T_Incidents.Délai_traitement_HG) Is Null)) OR (((T_Incidents.Ponderation)<>[t_temp].[Ponderation] Or (T_Incidents.Ponderation) Is Null)) OR (((T_Incidents.Relance_Intervenant)<>[t_temp].[Relance_Intervenant] Or (T_Incidents.Relance_Intervenant) Is Null)) OR (((T_Incidents.Relance_Utilisateur)<>[t_temp].[Relance_Utilisateur] Or (T_Incidents.Relance_Utilisateur) Is Null)) OR (((T_Incidents.Date_mail)<>[t_temp].[Date_mail] Or (T_Incidents.Date_mail) Is Null)) OR (((T_Incidents.No_Client)<>[t_temp].[No_Client] Or (T_Incidents.No_Client) Is Null)) OR (((T_Incidents.CI)<>[t_temp].[CI] Or (T_Incidents.CI) Is Null)) OR (((T_Incidents.Date_First_trans)<>[t_temp].[Date_First_trans] Or (T_Incidents.Date_First_trans) Is Null)) OR (((T_Incidents.Date_detection)<>[t_temp].[Date_detection]" & _
            " Or (T_Incidents.Date_detection) Is Null))OR (((T_Incidents.Ref_Client)<>[t_temp].[Ref_Client] Or (T_Incidents.Ref_Client) Is Null)) OR (((T_Incidents.Ref_Criticite)<>[t_temp].[Ref_Criticite] Or (T_Incidents.Ref_Criticite) Is Null)) OR (((T_Incidents.Ref_Impact)<>[t_temp].[Ref_Impact] Or (T_Incidents.Ref_Impact) Is Null)) OR (((T_Incidents.Incid_Majeur)<>[t_temp].[Incid_Majeur] Or (T_Incidents.Incid_Majeur) Is Null)) OR (((T_Incidents.Incid_prod)<>[t_temp].[Incid_prod] Or (T_Incidents.Incid_prod) Is Null)) OR (((T_Incidents.Code_facture)<>[t_temp].[Code_facture] Or (T_Incidents.Code_facture) Is Null)) OR (((T_Incidents.Comment_Resol)<>[t_temp].[Comment_Resol] Or (T_Incidents.Comment_Resol) Is Null)) OR (((T_Incidents.Resume)<>[t_temp].[Resume] Or (T_Incidents.Resume) Is Null)) OR (((T_Incidents.Recapitulatif)<>[t_temp].[Recapitulatif] Or (T_Incidents.Recapitulatif) Is Null));"

  20. #20
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 587
    Points
    24 587
    Par défaut
    Bonjour,

    Je viens de prendre connaissance du machin... Il me semblait que tu faisais allusion à une requête de suppression, ici c'est de la mise à jour, donc je suis moins étonné du temps d'exécution.

    Cependant ;

    Je suis peut-être à coté de la plaque mais il me semble qu'il y a des contradictions dans cette requête (rédigée à la main).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INNER JOIN T_Incidents ON t_temp.REF_Incident = T_Incidents.REF_Incident
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((T_Incidents.REF_Incident) <> [t_temp].REF_Incident
    Comment peut-on être à la fois = par jointure et différent par le WHERE ? Pas très logique.

    De plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE ... (T_Incidents.REF_Incident) Is Null
    J'espère que tu as bien interdit le Null dans ta ref, une jointure avec du Null autorisé c'est pas bon sur les gros volumes !

    Que dit le générateur quand tu lui soumet ça ?

    J'entrevois le but de ce truc, mettre à jour les données qui diffère d'une table à l'autre.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Quelles bonnes pratiques pour un formulaire dynamique ?
    Par Nothus dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/07/2015, 13h02
  2. Bonne pratique pour developper sous liferay
    Par Angello1981 dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 18/03/2014, 13h23
  3. Réponses: 5
    Dernier message: 12/09/2006, 18h06
  4. Réponses: 28
    Dernier message: 17/07/2006, 16h30
  5. Tutoriel SEO : Introduction et bonnes pratiques pour l'optimisation de pages Web
    Par Community Management dans le forum Référencement
    Réponses: 0
    Dernier message: 06/07/2006, 00h03

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