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

  1. #61
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    avril 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2006
    Messages : 1 074
    Points : 1 405
    Points
    1 405
    Par défaut
    Bonjour, Pierre,
    il n'y a aucun jugement de valeurs dans mes propos. Je fais juste la distinction de logique, d'approche et les conséquences qu'elles s'entrainent sur une application Access, entre deux métiers différents appelés à créer des bases de données. Si tu as vu quelques jugements de valeur dans mes posts, je n'y peux rien.
    Citation Envoyé par Pierre Fauconnier
    Peut-être la convivialité et la facilité passent-elles par des boutons inactifs ou invisibles pour masquer les actions non souhaitées, mais y-a-t-il vraiment perte de l'une ou de l'autre avec un message d'erreur comme illustré plus haut? A cela, ilank semble répondre OUI et moi je réponds NON.
    Ce n'est abosulement pas ce que je pense, j'ai simplement affirmé que le soucis de griser un bouton était typique du développeur, et qu'à mon avis on trouvera pas ce même soucis chez un dba; qui lui placera les contraintes avant tout sur les données et non pas principalement dans le code. Je n'ai rien dit de plus.
    A aucun moment, je n'ai prétendu qu'il faut être l'un ou l'autre; mais qu'à partir du moment où l'on fait la distinction entre les deux on comprend mieux le contenu des posts de ce débat.

  2. #62
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 501
    Points : 32 239
    Points
    32 239
    Par défaut
    Bonjour à tous

    Je rejoint l'avis de Pierre Fauconnier

    L'intégrité référentielle ne devrait pas être une option mais une obligation en matière de base de données de production. Exception faite pour les tables temporaires, de paramétrage ou de traitement.

    Pourquoi ?

    Tout simplement que la seule chose qui a de valeur au sein d'une base de données c'est justement les données. Si le produit que vous avez développé à un coût, celui-ci n'est rien, comparé aux données qui y sont stockées et traitées. Le risque que tout un système soit paralysé, simplement parce qu'une erreur subite du code VBA a eu lieu et qu'un client se retrouve avec un numéro d'id 0 et que du coup on perde toutes ses données liées ne devrait pas avoir lieu.

    Le Job, ce n'est pas que faire des interfaces kikoo joli et à celui qui "pissera de la ligne de code au plus loin" mais garantir à l'utilisateur que ses données seront traitées exactement comme il le souhaite et en sécurité.

    De plus comme le rappel Pierre, le mécanisme étant directement intégré dans le moteur Jet, l'intégrité est valable quelque soit l'application qui attaque la base.
    Et quel intérêt de coder ce qui a fait ses preuves et est bien plus fiable qu'un code qui s'exécute en annexe ?

    Cette obligation me semble d'autant plus importante qu'il n'existe pas sous Access de trigger ni de procédure stockée.

    Les relations sous Access avec intégrité référentielle, c'est donc :

    - facilité de mise en place,
    - confort
    - accélération du temps de developpement
    - sécurité
    - cohérence, intégrité
    - flexibilité
    - portabilité

    Alors effectivement, difficile de trouver une justification à ceux qui ne les utilisent pas ...

  3. #63
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 219
    Points : 1 704
    Points
    1 704
    Par défaut
    bonjour a tous,
    et salut les experts.
    une occasion soit de régler un problème que je n'ai peut-être pas assez approfondi soit de faire ressortir une limite gênante de l’intégrité référentielle.
    Cela concerne l’utilisation des tables liées – elles peuvent être nombreuses dans des bases scindées.
    Pour ma part j’utilise dans plusieurs bases une table liée d’une autre base dans laquelle je dois parfois enregistrer un champ « clé primaire », provisoire, je ne maitrise pas cette info dans l’immédiat.
    A la mise a jour de la base, bien sur il faut identifier les champs à modifier, pas très grave car ils gardent la valeur de base, mais problème si l’on oublie.
    Donc si je n’ai pas loupé une possibilité de gérer, l’intérêt mais aussi la limite de l’intégrité référentielle que j'utilise bien sur chaque fois que possible.
    A vous les experts et merci de la solution.

  4. #64
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    13 551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 13 551
    Points : 20 538
    Points
    20 538
    Par défaut
    Je ne suis pas certain que j'ai compris ce que LE VIEUX dit mais on ne peut pas assurer l'intégrité référentielle entre 2 bases Access. On peut simplement établir des relations sans intégrité mais c'est déjà une excelente chose par rapport à pas de relation du tout.

    Pour avoir été pris à essayer de remonter une intégrité référentielle à partir des tables, du code et des requête, je peux vous assurer que les avoir au départ c'est VRAIMENT une bonne chose.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #65
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 219
    Points : 1 704
    Points
    1 704
    Par défaut
    Bonsoir,
    C’est vrai, marot_r en me relisant je constate que je n’étais pas très clair, j’ai fait vite est pas bien.
    Mais cela confirme ce que « je voulais » faire ressortir – soit que sur une table liée on ne pouvait pas faire de relation avec intégrité référentielle, ce que tu confirmes –
    Par contre mon texte n’étant pas clair, on peut interpréter que cela concerne les bases divisées, et ça c’est une connerie si les 2 tables sont dans la même base bien sûr. Mon problème se posait bien sur une table d’une base divisée par rapport à une relation voulue avec intégrité référentielle sur une table d’une autre base divisée ou pas.

    J’en étais a peu près persuadé, sinon j’aurais posté – mais cette discussion intéressante m’a donné l’occasion de vérifier auprès d'expert.

    Donc on s’en passera – et je suis bien d’accord avec toi et les autres sur son intérêt, et pour cause j’aurais bien aimé que cela marche aussi sur les tables liées à d’autres bases mais enfin cela parait évident de ne pas pouvoir lier des bases par nature indépendantes.
    avec mes excuses pour ceux que j'ai embrouillés.

  6. #66
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    avril 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2006
    Messages : 1 074
    Points : 1 405
    Points
    1 405
    Par défaut
    Bonjour à tous,

    Citation Envoyé par Tofalu
    L'intégrité référentielle ne devrait pas être une option mais une obligation en matière de base de données de production.
    Qui a prétendu le contraire ?
    Citation Envoyé par Tofalu
    Exception faite pour les tables temporaires, de paramétrage ou de traitement.
    Tiens,tiens. Il y a donc bien des scénarios pour lesquels l'intégrité référentielle n'est pas applicable.
    Tout simplement que la seule chose qui a de valeur au sein d'une base de données c'est justement les données.
    On est d'accord mais puisque on parle d'acccess, on fournit rarement une base seule mais également l'outil d'exploitation.
    Si le produit que vous avez développé à un coût, celui-ci n'est rien, comparé aux données qui y sont stockées et traitées.
    On pourrait être d'accord, toutefois je suis convaincu que tu n'as jamais livré une base vide de tous formulaires, et états.
    Le risque que tout un système soit paralysé, simplement parce qu'une erreur subite du code VBA a eu lieu
    ????
    et qu'un client se retrouve avec un numéro d'id 0 et que du coup on perde toutes ses données liées ne devrait pas avoir lieu.
    Personnellement, je suis bien moins inquiet par un id 0 d'un client, que par une multiple nomination d'un même client. D'ailleurs, n'est-ce pas sur ce site que l'on trouve des outils de calcul de correspondance phonétique. L'intégrité référentielle n'y change rien.

    Le Job, ce n'est pas que faire des interfaces kikoo joli et à celui qui "pissera de la ligne de code au plus loin" mais garantir à l'utilisateur que ses données seront traitées exactement comme il le souhaite et en sécurité.
    L'utilisateur ne servira pas deux fois d'un outil cracra tout pas beau.
    Livres-tu des bases accéssibles uniquement en ligne de commande sur écran 14 pouces texte vert sous fond noir ?
    Vois par toi-même, on peut dire que les codes couleurs appliqués ici pour les lignes de code n'a que peu d'intérêt, pour ma part je suis convaincu que cela participe au succès du site.

  7. #67
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    février 2006
    Messages
    21 018
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 21 018
    Points : 42 645
    Points
    42 645
    Par défaut
    Salut,

    Donc, si j'en crois tes dire, tu es certain que ton code va se dérouler complètement et convenablement à chaque fois.
    Tu ne commets donc aucune erreur et aucun oubli dans ton code !

    Chapeau bas.

    Des utilisateurs, j'en ai déjà vu de toutes les sortes et le simple fait de passer par l'intégrité référentielle fournie par Access est une sécurité et une grande facilité.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  8. #68
    Membre éprouvé
    Profil pro
    Inscrit en
    mai 2006
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2006
    Messages : 1 035
    Points : 982
    Points
    982
    Par défaut
    Bonjour,
    ne pas utiliser l'intégritée référentiel c'est ne pas avoir la sécurité qu'elle procure.
    Pour ma part il m'arrive de ne pas pouvoir l'appliquer et là j'utilise le VBA mais avec les risques que ça implique c'est à dire de supprimer des données que je ne voudrais pas.
    Aujourd hui ma base de donnée comporte plus de 400 Tables heuresement que je la connait ce qui m'évite ces problèmes.
    Mais que ce passerait il si ma base faisait 10000 table comme c'est le cas de grosses bases de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    L'utilisateur ne servira pas deux fois d'un outil cracra tout pas beau.
    Livres-tu des bases accéssibles uniquement en ligne de commande sur écran 14 pouces texte vert sous fond noir ? 
    Vois par toi-même, on peut dire que les codes couleurs appliqués ici pour les lignes de code n'a que peu d'intérêt, pour ma part je suis convaincu que cela participe au succès du site.
    et oui cela devrait etre capable de fonctionner comme cela et c'est le cas de ces grosses bases.
    La programmation est surtout là pour créer l'IHM et faciliter l'utilisation de la base de donnée.
    Bonne journée

  9. #69
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    14 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 14 596
    Points : 40 246
    Points
    40 246
    Billets dans le blog
    58
    Par défaut
    Citation Envoyé par ilank Voir le message
    .../...
    Livres-tu des bases accéssibles uniquement en ligne de commande sur écran 14 pouces texte vert sous fond noir ?
    .../...
    Il est exact que souvent, on livre la base avec l'interface qui va avec...

    Mais de plus en plus, les bases sont "attaquées" par différents canaux, et plus seulement par l'interface conçu initialement. Si je livre une base de gestion de contacts dans une entreprise, il y a fort à parier que cette base sera utilisée par d'autres applications que la mienne (c'est le principe du datawarehouse). Dans ces cas-là, seule l'intégrité référentielle entrera en jeu, et le code mis en remplacement de celle-ci dans l'application initiale sera bien entendu inopérant...

    Donc, même si on peut imaginer qu'un code remplace efficacement l'intégrité référentielle (ce dont je doute, où plutôt ce que je crois totalement irréalisable de façon pérenne), il faudra alors garantir l'intégrité en interdisant l'accès par des applis tiers, ce qui diminue considérablement la valeur des données de la base. Pour que les données soient partageables (et donc éviter la redondance des données dans de multiples bases de données et feuilles de calcul),il faudra l'intégrité référentielle pour les accès par d'autres portes d'entrée que le code initial.

    J'attends toujours de voir le code pondu pour assurer l'intégrité d'une petite base (mettons une vingtaine de tables, mais les bases avec lesquelles je travaille contiennent souvent plus de cent tables) et ce qui sera mis en place pour garantir l'intégrité lors de l'ajout d'une vingt-et-unième table...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #70
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : septembre 2003
    Messages : 5 685
    Points : 12 894
    Points
    12 894
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Bien sûr que si... Tu peux sans problème laisser la clé externe vide.
    Ben j'ai retesté et effectivement on peut laisser la clé externe vide.
    J'avais un souvenir que ce n'étais pas possible, peut-être que je confond avec autre logiciel
    => J'ai tout supprimé là où je disais des bêtises.

    Conclusion : l'intégrité c'est bien.

  11. #71
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    avril 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2006
    Messages : 1 074
    Points : 1 405
    Points
    1 405
    Par défaut
    Heureux-oli, j'ai aussi vu les catastrophes causées par une intégrité référentielle mal pensée.
    Comme par exemple, pour garantir la cohérence entre une table Produits et les tables dépendantes, un effacement en cascade. La suppression d'un produit, l'effacait de toutes les lignes de commandes, factures, bon de livraison, stock.
    L'intégrité permet bien de garantir la cohérence des données existantes, qu'aucune donnée dépendante n'est orpheline; mais elle ne garantit ni la véracité des données ni leur sens et encore moins les actions autorisées.

  12. #72
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    14 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 14 596
    Points : 40 246
    Points
    40 246
    Billets dans le blog
    58
    Par défaut
    Citation Envoyé par ilank Voir le message
    ...
    Comme par exemple, pour garantir la cohérence entre une table Produits et les tables dépendantes, un effacement en cascade. La suppression d'un produit, l'effacait de toutes les lignes de commandes, factures, bon de livraison, stock. ...
    Pour moi, cet argument ne tient pas... Si je supprime le fichier, je perds aussi mes données.

    Il est rare de cocher la case de suppression en cascade lors du placement de l'intégrité. On ne le fait qu'à bon escient en maintenance de tables, et avec des backups.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #73
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    février 2006
    Messages
    21 018
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 21 018
    Points : 42 645
    Points
    42 645
    Par défaut
    Citation Envoyé par ilank Voir le message
    Heureux-oli, j'ai aussi vu les catastrophes causées par une intégrité référentielle mal pensée.
    Si tu la penses mal dans l'outil Access, comment vas-tu faire pour bien la penser dans ton code ?
    Si tu sais penser d'un côté, tu sauras penser de l'autre.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  14. #74
    Membre chevronné

    Profil pro
    Inscrit en
    avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2006
    Messages : 1 399
    Points : 2 218
    Points
    2 218
    Par défaut
    Si tu sais penser d'un côté, tu sauras penser de l'autre.
    Je ne connaissais pas ce dicton, à méditer

    Récemment, on m'a installé l'électricité. Bon jusque là on s'en passait, pensant que c'était du lux ().

    Finalement,

    • ça nous libère du temps, plus besoin de maintenir le feu et de couper du bois
    • Plus confortable pour la douche matinale
    • On se sent plus en sécurité avec toutes ces lumières
    • Plus facile, un interrupteur et hop !
    • Plus portable avec tous ces appareils qui fonctionnent au 220V

    Par contre, faut faire attention : J'ai mis une fois les deux doigts dans la prise j'ai dansé jusqu'au matin.

    Il existe des progrès qui doivent être partagés par tous !

    Philippe

  15. #75
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    avril 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2006
    Messages : 1 074
    Points : 1 405
    Points
    1 405
    Par défaut
    Il est rare de cocher la case de suppression en cascade lors du placement de l'intégrité.
    Ah oui et pourquoi donc ? Elle ne fait pas partie de l'intégrité référentielle dont on cause ? Il est pourtant tentant et bien pratique de s'assurer de n'avoir aucun enregistrement orphelin dans une base. A moins que tu ne sois toi aussi pleinement conscient des catastrophes dues à une intégrité mal pensée ?!
    On ne le fait qu'à bon escient en maintenance de tables, et avec des backups.
    Oui, tu le confirmes. Tu agis en conséquence de la mise en oeuvre de l'intégrité et non pas en disant
    Une fois mise en place je n'ai plus à m'en soucier
    L'intégrité des données, leur cohérence est un souci permanent non temporaire.
    Si tu la penses mal dans l'outil Access, comment vas-tu faire pour bien la penser dans ton code ?
    Si tu sais penser d'un côté, tu sauras penser de l'autre.
    Mais c'est bien en la pensant dans les deux qu'il m'est arrivé de rencontrer des conflits.
    Maintenant, à priori on ne peut savoir qu'on a mal pensé que lorsqu'un problème se déclare; pas au moment-même où l'on pense.

  16. #76
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    14 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 14 596
    Points : 40 246
    Points
    40 246
    Billets dans le blog
    58
    Par défaut
    J'étais bien entendu "un peu trop général" en disant cela. Ce que je voulais souligner, c'est que lorsque la case est cochée, c'est parce que tu sais que tu vas supprimer les enregistrements dépendants, mais on ne place pas la suppression par défaut a priori lors du placement de l'intégrité référentielle.

    Et donc, on le fait à bon escient, en ayant pris les précautions nécessaires.

    Il y a bien entendu des cas où la placera éventuellement la suppression en cascade (factures et lignes de factures, ...) mais on ne la placera jamais sur une intégrité entre contacts et localités, par exemple.

    Citation Envoyé par ilank
    L'intégrité des données, leur cohérence est un souci permanent non temporaire.
    Justement, placer l'intégrité permet de ne pas devoir s'en soucier en permanence. Tu la places à la construction des tables, et tu ne t'en soucies qu'en cas de maintenance... Tu devras par contre t'en soucier en permanence si tu la gères par code...

    J'ai vraiment beaucoup de difficultés à suivre tes arguments...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  17. #77
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    avril 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2006
    Messages : 1 074
    Points : 1 405
    Points
    1 405
    Par défaut
    Ce que je voulais souligner, c'est que lorsque la case est cochée, c'est parce que tu sais que tu vas supprimer les enregistrements dépendants, mais on ne place pas la suppression par défaut a priori lors du placement de l'intégrité référentielle.
    Qui te parle de le faire "par défaut" ? J'ai uniquement parlé de cohérence des données existantes et d'enregistrements orphelins. Si je coche cette case, vu son effet descendant je vais devoir surtout m'assurer et ce dans le code quel utilisateur a le droit de lancer une telle procédue et des contraintes permettant de le faire.

    Justement, placer l'intégrité permet de ne pas devoir s'en soucier en permanence. Tu la places à la construction des tables, et tu ne t'en soucies qu'en cas de maintenance... Tu devras par contre t'en soucier en permanence si tu la gères par code...
    Ce n'est pas ce que je pense. C'est bien par soucis de devoir garantir de façon permanent la cohérence des données que je la mets place et dans la base et dans le code.

    Il y a bien entendu des cas où la placera éventuellement la suppression en cascade (factures et lignes de factures, ...)
    Mais c'est justement parce qu'elle est mise que je dois programmer avec. Quelle facture peut être supprimée, sachant que sa suppression s'applique aussi sur les lignes de facturation ? Supprimes-tu les factures d'un client en contentieux, qui vient de régler un acompte, à qui un encours d'être attribué ?
    L'exemple des factures est bien vu. Dans la vie, une facture est un ensemble de lignes de facture, et on ne crée pas de facture vide. Dans un fichier c'est le contraire. Avec une intégrité référentielle, laquelle de ces deux définitions garantit le mieux la cohérence des données du client ?

  18. #78
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    14 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 14 596
    Points : 40 246
    Points
    40 246
    Billets dans le blog
    58
    Par défaut
    Citation Envoyé par ilank Voir le message
    .../...
    C'est bien par soucis de devoir garantir de façon permanent la cohérence des données que je la mets place et dans la base et dans le code.
    .../...
    Ce que tu sembles ne pas vouloir comprendre, c'est que tu ne peux "assurer" l'intégrité par code (j'attends toujours le code et sa maintenance ) que si ta base n'est modifiable que via ton application ou ton code, ce qui, je le répète, n'est pas le cas dans 99% des cas professionnels! Alors que l'intégrité référentielle (la "vraie") garantit cela quel que soit l'accès à ta base

    Citation Envoyé par ilank Voir le message
    .../...
    Supprimes-tu les factures d'un client en contentieux, qui vient de régler un acompte, à qui un encours d'être attribué ?
    .../...
    Les règles comptables ne permettent pas de supprimer une facture, donc le problème ne se pose pas sur ce cas précis. Mais d'une façon générale, c'est pour cela que la case de suppression en cascade ne sera "jamais" cochée par défaut. Ce que ton code devra faire dans ce cas, ce n'est pas supprimer la facture, mais la marquer d'une façon ou d'une autre pour la désactiver. C'est pour cela que je dis que, sauf cas de maintenance où on suppose que l'intervenant sur la base sait ce qu'il fait, les suppressions en cascade ne seront pas autorisées.



    Citation Envoyé par ilank Voir le message
    Qui te parle de le faire "par défaut" ? J'ai uniquement parlé de cohérence des données existantes et d'enregistrements orphelins. Si je coche cette case, vu son effet descendant je vais devoir surtout m'assurer et ce dans le code quel utilisateur a le droit de lancer une telle procédue et des contraintes permettant de le faire.
    .../...
    voir ma remarque plus haut.

    Citation Envoyé par ilank Voir le message
    Mais c'est justement parce qu'elle est mise que je dois programmer avec.
    .../...
    C'est bien pour cela qu'il ne faut pas la mettre par défaut. Ainsi, tu ne dois pas programmer avec! Ou plutôt, c'est pour cela qu'elle ne sera mise qu'à bon escient (table "brouillard" de saisie temporaire d'une facture avant validation et transfert dans la table des factures et celle des lignes de factures, via une transaction qui garantira la bonne exécution de toutes les manipulations (transfert du brouillard vers les tables définitives et suppression dans les tables temporaires au sein d'une même transaction)

    Citation Envoyé par ilank Voir le message
    .../...
    L'exemple des factures est bien vu. Dans la vie, une facture est un ensemble de lignes de facture, et on ne crée pas de facture vide. Dans un fichier c'est le contraire. Avec une intégrité référentielle, laquelle de ces deux définitions garantit le mieux la cohérence des données du client ?
    Il peut parfaitement arriver de créer une facture sans lignes de factures, simplement parce que les lignes seront ajoutées par la suite. Exemple: Je dois établir une facture à fin avril, mais je n'ai pas la donnée me permettant de facturer, mais je dois aussi créer une première facture pour mai. Je vais donc créer une facture vide pour avril, de manière à réserver le numéro séquentiel de la facture, puis je créerai la facture de mai. Plus tard, je recevrai les infos pour la facture d'avril et je la complèterai. Ce cas est très fréquent dans la vie d'une entreprise, je peux te l'assurer.

    Au delà de ce cas "extrême", je n'ai jamais prétendu que l'intégrité palliait à tout, et ton code pourra très bien interdire la pratique décrite plus haut, mais à nouveau, cette protection ne sera de toute façon opérationnelle qu'à l'intérieur de ton application, et pas pour des manipulations externes à celles-ci.

    Jusqu'ici, je n'ai encore rencontré aucun argument en faveur d'une gestion de l'intégrité par code plutôt que via les outils liés au SGBD. Je n'ai pas dit, cependant, que l'intégrité parait à tous les coups, mais il me paraît évident qu'il vaut mieux l'intégrité que pas l'intégrité, cela ne dispensant pas d'un code qui, dans une application précise, permettra ou interdira une action sur des données de la base, en complément de l'intégrité qui, elle, palliera aux déficiences "éventuelles" du code, et garantira, je le répète à nouveau, l'intégrité des données en cas de manipulations externes au code créé. J'attends que tu nous expliques comment ton code palliera aux "attaques" externes de la base.

    Je me demande si tu envisages vraiment bien la "vraie" vie d'une base de données et les multiples manipulations qu'elle subit, via le code de son application "mère" ou via, et c'est là que l'intégrité montre toute sa puissance par rapport à l'inutilité de ton code, des attaques externes.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  19. #79
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    avril 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2006
    Messages : 1 074
    Points : 1 405
    Points
    1 405
    Par défaut
    Bonjour à tous,

    j'avais zappé ceci
    Citation Envoyé par Pierre Fauconnier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_Error(DataErr As Integer, Response As Integer)
        If DataErr = 3200 Then
            MsgBox "Vous ne pouvez pas supprimer cet enregistrement. Il est utilisé par d'autres données de l'application", _
                vbInformation, "Suppression d'un enregistrement"
            Response = acDataErrContinue
        End If
    End Sub
    Voilà ce que j'appelle programmer avec l'intégrité référentielle. Pour garantir la cohérence des données, tu gères l'accessiblité des actions sur les données.

    Citation Envoyé par Pierre Fauconnier
    Ce que tu sembles ne pas vouloir comprendre, c'est que tu ne peux "assurer" l'intégrité par code (j'attends toujours le code et sa maintenance ) que si ta base n'est modifiable que via ton application ou ton code, ce qui, je le répète, n'est pas le cas dans 99% des cas professionnels! Alors que l'intégrité référentielle (la "vraie") garantit cela quel que soit l'accès à ta base
    Citation Envoyé par Ilank
    en fait, la véritable question selon moi est :
    Utiliserez-vous les relations et l'intégrité référentielle si :
    1) Si vous savez que la base de données que vous concevez sera exploitée par une application développeée par un tiers ?
    2) Si en plus de la conception de la base, vous êtes le développeur de l'application, seul outil permettant d'exploiter et gérer les données ?
    Ce que toi, tu ne sembles pas comprendre Pierre, c'est que l'intégrité référentielle ne porte que sur les données contenues dans la base, et pas sur ce qui lui est envoyé, ni sur les manipulations des données. Or, les manipulations des données ne sont que de 2 ordres :
    - consultation : Impression écran, impression papier
    - écriture : création, édition/modification, suppression

    C'est bien par souci de garantir la consultation, que tu gères les actions d'écriture sur la base. Par exemple, pour garantir l'interdépendance entre plusieurs tables, tu emploies des tables temporaires, et tu associes le formulaire de saisie à la tabe temporaire et non directement aux fichiers d'enregistrement. Et je suis sûr que tu ne placeras pas dans le schéma de la base, les tables temporaires, elles font partie de l'appli donc du code.
    Voilà un exemple de ce que j'appelle programmer avec l'intégité référentielle.

  20. #80
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    14 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 14 596
    Points : 40 246
    Points
    40 246
    Billets dans le blog
    58
    Par défaut
    Salut!

    Citation Envoyé par ilank Voir le message
    .../...
    Voilà ce que j'appelle programmer avec l'intégrité référentielle.
    Je n'ai pas relu tous tes messages, mais il ne me semble pas que tu parlais de programmer avec l'intégrité, mais que tu parlais de programmer l'intégrité. La nuance est de taille, puisque si tu programmes avec, cela veut dire que tu la places... (courbe rentrante de notre ami ilank? )

    Citation Envoyé par ilank Voir le message
    Pour garantir la cohérence des données, tu gères l'accessiblité des actions sur les données.
    Pas du tout. Je ne fais que gérer l'erreur, c'est-à-dire modifier le message d'erreur abscons d'Access lié à l'impossibilité de suppression suite à l'intégrité en un message (que j'espère) plus compréhensible, mais je ne gère pas du tout l'accessibilité par code.

    Citation Envoyé par ilank Voir le message
    Ce que toi, tu ne sembles pas comprendre Pierre, c'est que l'intégrité référentielle ne porte que sur les données contenues dans la base
    Relis-moi, et tu verras que je dis cela dans plusieurs de mes messages. L'intégrité ne porte que sur les données de la base, mais garantit l'intégrité, quelle que soit l'application ou la technique qui manipule lesdites données, alors que ton code ne gère (avec) l'intégrité que dans ton application, en étant inexploitable par une autre application.

    Citation Envoyé par ilank Voir le message
    Ce que toi, tu ne sembles pas comprendre Pierre, c'est que l'intégrité référentielle ne porte que sur les données contenues dans la base
    et pas sur ce qui lui est envoyé, ni sur les manipulations des données.
    Je ne comprends pas ce que tu dis. Justement, l'intégrité référentielle porte sur ce qui est envoyé à la base et sur les manipulations de données. (voir plus haut)

    J'ai de plus en plus de difficultés à te suivre (Y en a d'autres qui suivent?)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. réflexion sur des types génériques
    Par ziad.shady dans le forum APIs
    Réponses: 1
    Dernier message: 06/06/2008, 13h25
  2. [A97] Perte des relations dans la fenêtre Relations
    Par JeremieT dans le forum Access
    Réponses: 5
    Dernier message: 17/01/2007, 11h58
  3. Réponses: 10
    Dernier message: 15/10/2006, 18h23

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