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

Schéma Discussion :

Maintenance de camions


Sujet :

Schéma

  1. #221
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Avez-vous essayé de demander un nouveau mot de passe ? Le serveur devrait vous envoyer un lien pour le réinitialiser à l'adresse email que vous m'aviez donné.

    Citation Envoyé par fsmrel Voir le message
    SQL Server : pas de problème, je travaille sur Temp. La cagasse c'est côté WEB.
      0  0

  2. #222
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Ave Ordigil,

    Aucune possibilité de changer de mot de passe ou quoi que ce soit n'est offerte…

    Sinon, je teste et je reteste et je rereteste le code SQL...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
      1  0

  3. #223
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    J'ai trouvé la réponse pour votre accès au site WEB…

    C'est que je n'ai pas encore effectué la mise à jour du serveur WEB avec l'encryption des mots de passe

    Avez-vous regardé mes 2 nouvelles tables dans "DZINDZIO_TRUCKS_MANAGEMENT" ???

    Les mots de passe ne sont pas simplement des "HASH" car les 'HASH' n'apportent aucune sécurité pour les mots de passe. Ce sont des 'HASH' encryptés. Si je n'ai pas fait d'erreurs évidemment.

    Il ne faut pas publier l'information de ces 2 tables car elles contiennent de l'info réel

    Je vais mettre à jour le site WEB plus tard aujourd'hui. La seule chose de changée est l'accès sécurisé au site. Je n'ai pas encore eu le temps de faire les formulaires donc encore accès directement aux tables, bien que les vues sont elles aussi incluses sur le site web.


    Citation Envoyé par fsmrel Voir le message
    Ave Ordigil,

    Aucune possibilité de changer de mot de passe ou quoi que ce soit n'est offerte…

    Sinon, je teste et je reteste et je rereteste le code SQL...
      0  0

  4. #224
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par ordigil Voir le message
    Avez-vous regardé mes 2 nouvelles tables dans "DZINDZIO_TRUCKS_MANAGEMENT" ???
    Voui !


    Citation Envoyé par ordigil Voir le message
    Il ne faut pas publier l'information de ces 2 tables car elles contiennent de l'info réel
    Il est évident que je ne publierai jamais quoi que ce soit à leur sujet !


    A part ça, je poursuis mes tests, et je trouve quelques anomalies et omissions de ma part...
    Bétonner n’est jamais simple.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
      1  0

  5. #225
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    J’ai corrigé des erreurs traînant dans le trigger COMPOSANT_RECOUVREMENT_TR dédié aux inserts dans la table COMPOSANT_AFFECTATION.

    Pour le jour où vous aurez besoin de clarifier des points particuliers ou prendre en compte de nouvelles règles, voici les tâches que l’on effectue avec le trigger :

    1) Remarque préliminaire : dans le codage de l’INSERT, n’affecter qu’un seul composant à la fois à un camion (INSERT mono-ligne). Pour pouvoir faire un INSERT multi-affectations il faudra enrichir le trigger d’un curseur permettant de traiter ligne par ligne.

    2) On vérifie que la table INSERTED n’est pas vide. Elle l’est si le camion ou le composant concernés sont inconnus.

    3) La table INSERTED n’est pas vide. On vérifie que la localisation (camion ou local) est connue, et on vérifie que le composant est connu lui aussi.

    4) Après ces préliminaires, on traite de la bilocation ; on vérifie que le composant ne sera pas au même instant sur deux camions (ou sur un camion et dans un local).

    5) On vérifie qu’un camion aura au plus un moteur, une transmissions, 2 différentiels. Les locaux ne sont pas concernés.

    Le trigger sera à enrichir en fonction des besoins qui se manifesteront (cas notamment des différentiels et de leur type, forward, rear).


    Code actuel de création du trigger :

    CREATE TRIGGER COMPOSANT_RECOUVREMENT_TR ON COMPOSANT_AFFECTATION INSTEAD OF INSERT
    AS
    BEGIN
    
    -------- pour debug : ---------SELECT ' ===COMPOSANT_RECOUVREMENT_TR, nouvelle entrée  ======================' ; 
    
    DECLARE @N AS INT ; 
    DECLARE @Engueulade AS VARCHAR(96) ;
    DECLARE @MaxAutorises  AS INT ;   ----------- nb maxi de composants sur un camion en fonction du type du composant
    DECLARE @Type  AS VARCHAR(16) ;   ----------- type du composant (moteur, transmission, différentiel)
    DECLARE @NbDoublons AS INT ;
    declare @nbTuples  as INT  ;
    declare @DateAchat as DATE ;
    declare @ComposantInstallationDate as DATE ; 
    declare @ComposantDesinstallationDate as DATE ;
    DECLARE @inserted TABLE
    (
            CamionId                        INT
          , CamionVIN                       VARCHAR(48) 
          , ComposantId                     INT
          , ComposantTypeId                 INT
          , ComposantTypeLibelle            VARCHAR(48)
          , ComposantQteMax                 INT	   
          , ComposantInstallationDate       DATE            DEFAULT '9999-12-31'
          , ComposantDesInstallationDate    DATE            DEFAULT '9999-12-31'
    );
    
    ------------------------------------------------------------------
    ---------------------------------------------------------------------------
    
    --------pour debug : ---------------SELECT '======== 1re partie (contrôles préliminaires) ========='  ;
        
     -------------------------------------------------------------------------------------------------
    -- 1ere partie : contrôles préliminaires 
    --
    -- Si INSERTED est vide, c'est que la localisation et/ou
    -- le composant n'existent pas dans la base de données.
    ------------------------------------------------------------------
    
    -------pour debug : -------SET @N = (SELECT COUNT(*) from INSERTED) ;
    
    IF (SELECT COUNT(*) from INSERTED) = 0
        BEGIN 
             SET @Engueulade = 'Affectation de composant(s) : composant et/ou localisation manquants'
             SELECT @Engueulade AS Engueulons
     --------        RAISERROR (@Engueulade,16,1)  -- state = 16 pour bloquer  
             RAISERROR (@Engueulade,0,1)  -- state = 0 pour les tests 
             RETURN
        END
    
    ---------------------------------------
    -- INSERTED n'est pas vide
    -- si les dates d'installation/désinstallation sont omises,
    -- on les force à '9999-12-31'
    ---------------------------------------
    
    ----------pour debug : -------SELECT '' as INSERTED,  * FROM INSERTED ;
    
    --------------------------------------------------------------------------------------------------------------
    -- La table INSERTED contient la ligne (voire > 1 si l'insert est ensembliste) comportant
    -- seulement les données propres à l'affectation d'un composant à un camion (ou à un local),
    -- c'est-à-dire les dates d'installation et de désinstallation (9999-12-31 si date non renseignée).
    -- On la recopie dans la table temporaire @inserted en l'enrichissant avec le numéro de série
    -- du camion, et impérativement le contenu de ComposantQteMax (table COMPOSANT_TYPE), qui permet de 
    -- connaître le nombre maximum de composants du type du composant (moteur, transmission, différentiel).
    --
    --- le chargement de la table @inserted est l'union d'un SELECT dédié aux camions et d'un
    --  SELECT dédié aux locaux, car le composant est affecté soit à un camion soit à un local. 
    ---  
    --------------------------------------------------------------------------------------------------------------
    
    INSERT INTO @inserted (CamionId, CamionVIN, ComposantId
                         , ComposantTypeId, ComposantTypeLibelle, ComposantQteMax
                         , ComposantInstallationDate, ComposantDesInstallationDate)   
        SELECT x.LocalisationId, t.CamionVIN, x.ComposantId, y.ComposantTypeId, z.ComposantTypeLibelle, z.ComposantQteMax
             , COALESCE(x.ComposantInstallationDate, '9999-12-31'), COALESCE(x.ComposantDesInstallationDate, '9999-12-31')     
        FROM   INSERTED AS x JOIN COMPOSANT AS y ON x.ComposantId = y.ComposantId
                             JOIN COMPOSANT_TYPE AS z ON y.ComposantTypeId = z.ComposantTypeId
                             JOIN CAMION AS t ON x.LocalisationId = t.CamionId
        UNION
        SELECT x.LocalisationId, '/', x.ComposantId, y.ComposantTypeId, z.ComposantTypeLibelle, z.ComposantQteMax
             , COALESCE(x.ComposantInstallationDate, '9999-12-31'), COALESCE(x.ComposantDesInstallationDate, '9999-12-31')     
        FROM   INSERTED AS x JOIN COMPOSANT AS y ON x.ComposantId = y.ComposantId
                             JOIN COMPOSANT_TYPE AS z ON y.ComposantTypeId = z.ComposantTypeId
                             JOIN LOCAL AS t ON x.LocalisationId = t.LocalisationId
    ;
    /*-----------pour debug---------------------------
                           SELECT '' AS '@inserted', * FROM @inserted ;
                           select '' as '@ComposantInstallationDate', ComposantInstallationDate from @inserted ;
                           select '' as '@ComposantDesinstallationDate', ComposantDesInstallationDate from @inserted ;
     */--------------------------------------
    -----------------------------------------------------------------------------------------------------------------
    -- Si l'INSERT fait référence à un camion ou à un local inconnus, alors l'attribut LocalisationId est marqué NULL,
    -- donc on rouspète et on sort.
    ------------------------------------------------------------------------------------------------------------------
    
    -------pour debug  -------SET @N = (SELECT COUNT(*) FROM INSERTED WHERE LocalisationId IS NULL) ;
    -------pour debug---------SELECT 'LocalisationId marqué NULL => @N = ' + cast( @N as varchar) ;
    
    IF (SELECT COUNT(*) FROM INSERTED WHERE LocalisationId IS NULL) > 0
        BEGIN
             SET @Engueulade = 'Affectation de composant(s) : localisation manquante (camion ou local)'
             SELECT @Engueulade AS Engueulons, * FROM INSERTED
     --------        RAISERROR (@Engueulade,16,1)  -- state = 16 pour bloquer  
             RAISERROR (@Engueulade,0,1)  -- state = 0 pour les tests 
             RETURN
        END
    
    -------------------------------------------------------------------------------------------
    -- Si l'INSERT fait référence à un composant inconnu, alors l'attribut ComposantId est marqué NULL,
    -- donc on rouspète et on sort.
    -------------------------------------------------------------------------------------------
    
    -------pour debug  -------SET @N = (SELECT COUNT(*) FROM INSERTED WHERE ComposantId IS NULL) ;
    -------pour debug  -------SELECT 'ComposantId marqué NULL => @N = ' + cast( @N as varchar) ;
    
    IF (SELECT COUNT(*) FROM INSERTED WHERE ComposantId IS NULL) > 0
        BEGIN 
             SET @Engueulade = 'Affectation de composant(s) : composant manquant'
             SELECT @Engueulade AS Engueulons, * FROM INSERTED
     --------        RAISERROR (@Engueulade,16,1)  -- state = 16 pour bloquer  
             RAISERROR (@Engueulade,0,1)  -- state = 0 pour les tests 
             RETURN
        END
    
    ---------------------------------------------------------------------------
    ---------------------------------------------------------------------------
    
    ---------pour debug : --------------SELECT '======== 2e partie (bilocation) ========='  ;
        
     -------------------------------------------------------------------------------------------------
    -- 2e partie : 
    --
    -- contrôle de la bilocation. Un composant (moteur, transmission, différentiel)
    -- ne peut pas être au même instant sur deux camions (ou sur un camion et dans un local), 
    -- sauf le jour où on désinstalle le composant pour l'installer sur un autre camion 
    -- (ou dans un local).
    --
    -- Noter que si la date d'installation est omise, on l'a forcée à '9999-12-31', 
    -- mais elle doit être interprétée comme antérieure à une date de désinstallation
    ----------------------------------------------------------------------------------------------------
    
    -----pour debug : --------------SELECT '' AS 'ComposantInstallationDate (from @inserted)', (select ComposantInstallationDate   FROM @inserted) ;
    -----pour debug : --------------SELECT '' AS 'ComposantDesinstallationDate (from @inserted)', (select ComposantDesinstallationDate   FROM @inserted) ;
    
    SET @nbTuples = 
        (
         SELECT  COUNT(*) 
         FROM    INSERTED AS x JOIN COMPOSANT_AFFECTATION AS y ON x.ComposantId = y.ComposantId
            AND  x.ComposantInstallationDate < y.ComposantDesInstallationDate
            AND (x.ComposantDesInstallationDate >= y.ComposantInstallationDate OR y.ComposantInstallationDate = '9999-12-31')
        )
    ;
    
    -------pour debug : --------------SELECT '' AS '@nbtuples (@@Rowcount)', @nbTuples ;
    
    IF @nbTuples > 0 
          BEGIN 
             SELECT 'Affectation de composant(s) : pas le même composant à deux endroits en même temps !' AS Engueulons, * FROM INSERTED
    --         RAISERROR ('Affectation de composant(s) : recouvrement de période !',16,1)  -- state = 16 pour bloquer  
             RAISERROR ('Affectation de composant(s) : pas le même composant à deux endroits en même temps !',0,1)  -- state = 0 pour les tests 
             RETURN
          END
    
    ---------------------------------------------------------------------------------------------------------------------
    -- 3e partie - Nb maximum de composants sur un camion, en fonction du type de composant
    --
    -- Un camion a au plus un moteur, une transmissions, 2 différentiels. Les locaux ne sont pas concernés.
    ----------------------------------------------------------------------------------------------------------------------
    
    --------pour debug : -----SELECT '======== 2e partie (nb max de composants sur un camion par type de composant) =========' ;
    --------pour debug : -----SET  @N = (SELECT COUNT(*) FROM @inserted) ;
    
    IF (SELECT COUNT(*) FROM @inserted) < 2   -- pour les copies de la table, inutile de contrôler (sinon plantum...)
        BEGIN
    ------- pour debug : ----select 'on contrôle le max de composants sur un camion en fonction du type de composant' ;
            SET @MaxAutorises = (SELECT ComposantQteMax FROM @inserted) ;
            SET @Type = (SELECT ComposantTypeLibelle FROM @inserted) ;     
        END
    
    SET @NbDoublons = 
        (
    	 SELECT  COUNT(*)
         FROM    @inserted AS x JOIN COMPOSANT_AFFECTATION AS y ON x.CamionId = y.LocalisationId
                                JOIN COMPOSANT AS z ON y.ComposantId = z.ComposantId AND x.ComposantTypeId = z.ComposantTypeId
         WHERE
                  x.ComposantInstallationDate < y.ComposantDesInstallationDate
            AND  (x.ComposantDesInstallationDate >= y.ComposantInstallationDate OR y.ComposantInstallationDate = '9999-12-31')
            AND NOT EXISTS (SELECT * FROM LOCAL as w where y.LocalisationId = w.LocalisationId)
        )
    ;
    
    --------------------SELECT '@MaxAutorises = ', @MaxAutorises, '@NbDoublons = ', @NbDoublons, '@Type = ' + @Type  ;
     
    if @NbDoublons > 0 AND @NbDoublons >= @MaxAutorises
          BEGIN
             SET @Engueulade = 'Un camion, ' + cast(@MaxAutorises as varchar(2))  + ' composant(s) (type = ' + @Type + ') au maximum !' ;     
             SELECT @Engueulade AS Engueulade, * FROM INSERTED
    --         RAISERROR (@Engueulade,16,1)  -- state = 16 pour bloquer 
             RAISERROR (@Engueulade,0,1)  -- state = 0 pour les tests
             RETURN
          END
    
    -- Tout va bien ! on effectue l'INSERT dans la table COMPOSANT_AFFECTATION.
    
    ------pour debug : ---SELECT '' as  '@ComposantInstallationDate', @ComposantInstallationDate ;
    ------pour debug : ---SELECT '' as  '@ComposantDesnstallationDate', @ComposantDesinstallationDate ;
    ------pour debug : ---SELECT '' as 'COALESCE(ComposantInstallationDate, ''9999-12-31'') (INSERTED)', COALESCE(ComposantInstallationDate, '9999-12-31') from INSERTED ; 
    ------pour debug : ---SELECT '' as 'COALESCE(ComposantDesInstallationDate, ''9999-12-31'') (INSERTED)', COALESCE(ComposantDesInstallationDate, '9999-12-31') from INSERTED ; 
    
    
     INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId)
                 SELECT ComposantId
                      , COALESCE(ComposantInstallationDate, '9999-12-31')
                      , COALESCE(ComposantDesInstallationDate, '9999-12-31')
                      , LocalisationId 
                 FROM   INSERTED
    ;
    -------pour debug : ----SELECT '' AS 'inside', * FROM COMPOSANT_AFFECTATION ;
    END
    GO
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
      2  0

  6. #226
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Désolé d'être tard. Nous avons un fuseau horaire différent et j'ai été très occupé aujourd'hui.
    Les petites anomalies et omissions font partie du processus normal de développement .
    Bon vous avez à nouveau accès au site "WEB". Il n'y a pas beaucoup de nouveau pour l'instant car j'ai travaillé sur la sécurisation des login et de l'administration des authorisations. Nous avons encore accès directement à toutes les tables car ça me permet de vérifier si tout fonctionne correctement sur SQL Server. Il y a des petites anomalies et des petites choses que je trouve étranges mais je vais attendre que vous mettiez "DZINDZIO_TRUCKS_MANAGEMENT" à jour avant de de vous en parler car vous avez peut-être déjà corrigé...



    Citation Envoyé par fsmrel Voir le message
    Voui !


    Il est évident que je ne publierai jamais quoi que ce soit à leur sujet !


    A part ça, je poursuis mes tests, et je trouve quelques anomalies et omissions de ma part...
    Bétonner n’est jamais simple.
      0  0

  7. #227
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Un jeu d’essai (à compléter) pour tester l’affectation des moteurs via le trigger COMPOSANT_RECOUVREMENT_TR :


    BEGIN TRANSACTION ;         ----------- ROLLBACK en fin de transaction --------------
    
    DELETE FROM COMPOSANT_AFFECTATION ; 
    
    --------------------------------------------------------------------------------
    -- Affectations successives d'un moteur à des camions ou à des locaux (garage, vente....)
    ---------------------------------------------------------------------------------
    select * from local ;
    
    select * from temp.dbo.moteur ;
    
    --/*
    
    ---------------------------------------------
    -- moteur s01 dans local loc01
    ---------------------------------------------
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2012-07-01', '9999-12-31'
            , (SELECT LocalisationId 
               FROM LOCAL WHERE LocalCode = 'loc01')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's01'
    ;
    SELECT '' as 'moteur s01 dans local loc01', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate
    --*/
    --/*
    ------------------------------------------------------------
    -- tentative d'affectation du moteur s01 au camion vin01 : 
    -- échec, car le moteur ne peut pas être en même temps
    -- dans un local et sur un camion en vadrouille. Il faudra
    -- commencer par sortir le moteur du local (le garage), 
    -- le "désinstaller" avant.
    ------------------------------------------------------------
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = 'vin01'), '9999-12-31' 
            , (SELECT CamionId 
               FROM CAMION WHERE CamionVIN = 'vin01')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's01'
    ;
    SELECT '' as 'tentative illégale loc01 to vin01', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate
    --*/
    
    --/*
    --------------------------------------------------------------------------
    -- sortir le moteur s01 du local  
    --------------------------------------------------------------------------
    UPDATE COMPOSANT_AFFECTATION
        SET ComposantDesInstallationDate = '2012-07-02' 
        WHERE LocalisationId = (SELECT LocalisationId FROM LOCAL WHERE LocalCode = 'loc01')
          AND ComposantInstallationDate = '2012-07-01'        
    --*/
    --/*
    ----------------------------------------------------------------------------------
    -- après sortie du local : installation du moteur s01 sur le camion vin01
    ----------------------------------------------------------------------------------
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2012-07-02', '9999-12-31' 
            , (SELECT CamionId 
               FROM CAMION WHERE CamionVIN = 'vin01')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's01'
    ;
    SELECT '' as 'instal légale s01 sur vin01', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate
    --*/
    --/*
    -----------------------------------------------------------------------------
    -- tentative de bilocation : le moteur ne peut pas être en même temps sur 
    -- les camions vin01 et vin02.
    -----------------------------------------------------------------------------
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2016-12-09', '9999-12-31'
            , (SELECT CamionId 
               FROM CAMION WHERE CamionVIN = 'vin02')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's01'
    ;
    
    SELECT '' as 'tentative illégale (bilocation) s01 sur vin02', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate
    ;
    --/*
    
    --/*
    ---------------------------------------------------------
    -- désinstallation du moteur s01 du camion vin01
    ---------------------------------------------------------
    
    UPDATE COMPOSANT_AFFECTATION
        SET ComposantDesInstallationDate = '2016-12-09'
        WHERE LocalisationId = (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin01')
          AND ComposantInstallationDate = '2012-07-02'   
    ;
    --*/
    
    --/*
    ----------------------------------------------------------------------------
    -- il n'y a plus de bilocation, vin02 prend le relais de vin01 
    -----------------------------------------------------------------------------
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2016-12-09', '9999-12-31'
            , (SELECT CamionId 
               FROM CAMION WHERE CamionVIN = 'vin02')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's01'
    ;
    SELECT '' as 'instal légale s01 sur vin02', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate
    ;
    --*/
    
    --/*
    ---------------------------------------------------------
    -- désinstallation du moteur s01 du camion vin02
    ---------------------------------------------------------
    
    UPDATE COMPOSANT_AFFECTATION
        SET ComposantDesInstallationDate = '2017-04-02'
        WHERE LocalisationId = (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin02')
          AND ComposantInstallationDate = '2016-12-09'   
    ;
    --*/
    
    --/*
    ----------------------------------------------------------------------------
    -- vin03 prend le relais de vin02 
    -----------------------------------------------------------------------------
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2017-04-02', '9999-12-31'
            , (SELECT CamionId 
               FROM CAMION WHERE CamionVIN = 'vin03')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's01'
    ;
    SELECT '' as 'instal légale s01 sur vin03', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate
    --*/
    
    --/*
    ---------------------------------------------------------
    -- désinstallation du moteur s01 du camion vin03
    ---------------------------------------------------------
    
    UPDATE COMPOSANT_AFFECTATION
        SET ComposantDesInstallationDate = '2017-12-07'
        WHERE LocalisationId = (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin03')
          AND ComposantInstallationDate = '2017-04-02'   
    ;
    --*/
    
    --/*
    ----------------------------------------------
    -- changement de local (moteur vendu)
    -----------------------------------------------
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId)  
        SELECT ComposantId, '2017-12-07', '9999-12-31'
            , (SELECT LocalisationId 
               FROM LOCAL WHERE LocalCode = 'loc02')
        FROM   MOTEUR 
        WHERE  MoteurNumeroSerie = 's01'
    ;
    SELECT '' as 'moteur s01 dans loc02 (vendu)', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate
    --*/
    ----------------------------------------------------------------------------
    -- revoilà le moteur qui a été racheté, on le colle dans le garage... 
    -----------------------------------------------------------------------------
    UPDATE COMPOSANT_AFFECTATION
        SET ComposantDesInstallationDate = '2018-01-02'
        WHERE LocalisationId = (SELECT LocalisationId FROM LOCAL WHERE LocalCode = 'loc02')
          AND ComposantInstallationDate = '2017-12-07'   
    ;
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2018-01-02', '9999-12-31'
            , (SELECT LocalisationId 
               FROM LOCAL WHERE LocalCode = 'loc01')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's01'
    ;
    SELECT '' as 'moteur s01 dans loc01 (racheté)', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate
    --*/
    
    --/*
    --------------------------------------------------------------------------
    -- sortir le moteur s01 du local  
    --------------------------------------------------------------------------
    UPDATE COMPOSANT_AFFECTATION
        SET ComposantDesInstallationDate = '2018-01-03' 
        WHERE LocalisationId = (SELECT LocalisationId FROM LOCAL WHERE LocalCode = 'loc01')
          AND ComposantInstallationDate = '2018-01-02'        
    --*/
    --/*
    ----------------------------------------------------------------------------
    -- revoilà vin01 pour prendre le relais 
    -----------------------------------------------------------------------------
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2018-01-03', '9999-12-31'
            , (SELECT CamionId 
               FROM CAMION WHERE CamionVIN = 'vin01')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's01'
    ;
    SELECT '' as 'moteur s01 à nouveau sur camion vin01', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate
    --*/
    -- ===========================================================================
    ---------------------------------------------------------------
    -- tests divers
    ----------------------------------------------------------------
    
    --/*
    -------------------------------------------------------------------------------
    -- recouvrement de période (dans le passé) : le moteur s02 
    -- ne peut pas être affecté à un camion qui en possède déjà un au moment
    -- de la tentative de montage.
    ------------------------------------------------------------------------------
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2012-07-01', '2013-01-02'
            , (SELECT CamionId 
               FROM CAMION WHERE CamionVIN = 'vin01')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's02'
    ;
    --*/
    SELECT '' as 'après tentative de bilocation', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate
    --/*
    -------------------------------------------------------------------------------------------------------
    -- Insert légal : un local n'est pas un camion et peut accueillir plusieurs moteurs en même temps
    -------------------------------------------------------------------------------------------------------
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2012-05-01', '9999-12-31'
            , (SELECT LocalisationId 
               FROM LOCAL WHERE LocalCode = 'loc01')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's02'
    ;
    --*/
    SELECT '' as 'Plus d''un camion dans un local donné : ok', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate
    --/*
    --------------------------------------------------------
    -- Tentatives d'infraction (recouvrement des périodes)
    --------------------------------------------------------
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2018-01-01', '2018-01-04'
            , (SELECT CamionId 
               FROM CAMION WHERE CamionVIN = 'vin03')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's01'
    ;
    --*/
    SELECT '' as 'tentative bilocation', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate
    --*/
    
    --/*
    ------------------------------------------------------------------
    -- Tentatives d'infraction (plus d'un moteur pour un camion)
    ------------------------------------------------------------------
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2015-07-18', '2015-07-20'
            , (SELECT CamionId 
               FROM CAMION WHERE CamionVIN = 'vin01')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's03'
    ;
    SELECT '' as '> 1 moteur par camion : illégal', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate ;
    
    --*/
    
    --/*
    --------------------------------------------------------------------------------------
    -- installation d'un moteur connu sur un camion inconnu
    ---------------------------------------------------------------------------------------
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2017-07-18', '2057-07-20'
            , (SELECT CamionId 
               FROM CAMION WHERE CamionVIN = 'azerty')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 's01'
    ;
    SELECT '' as 'camion inconnu', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate ;
    
    --/*
    
    --/*
    --------------------------------------------------------------------------------------
    -- installation d'un moteur inconnu sur un camion connu
    ---------------------------------------------------------------------------------------
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2015-07-18', '2015-07-20'
            , (SELECT CamionId 
               FROM CAMION WHERE CamionVIN = 'vin01')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = 'xyzt'
    ;
    SELECT '' as 'moteur inconnu', * FROM COMPOSANT_AFFECTATION
    order by ComposantInstallationDate ;
    
    --/*
    
    ---------------------------------------------------------------------
    -- Historique de l'affectation des moteurs :
    ---------------------------------------------------------------------
    
    SELECT MoteurNumeroSerie, CamionVIN as 'affectation à camion'
         , DateAchat = CASE CAST(ComposantDateAchat as VARCHAR) 
                            WHEN '9999-12-31' THEN 'date inconnue'  
                            ELSE CAST(ComposantDateAchat AS VARCHAR) 
                       END
        , Fabriquant, Modele
        , MaxHorsePower, MoteurMaxRPM, MoteurMaxTorque  
        , ComposantInstallationDate, ComposantDesInstallationDate  
    FROM CAMION AS x JOIN COMPOSANT_AFFECTATION AS y ON x.CamionId = y.LocalisationId
                              JOIN COMPOSANT AS z ON y.ComposantId = z.ComposantId
                              JOIN COMPOSANT_TYPE AS t ON z.ComposantTypeId = t.ComposantTypeId
                              JOIN MOTEUR AS u ON z.ComposantId = u.ComposantId  
    -------WHERE  CamionVIN = 'vin01' AND  LOWER(ComposantTypeLibelle) = 'moteur'
    WHERE  LOWER(ComposantTypeLibelle) = 'moteur'
    ORDER BY ComposantInstallationDate ;
    
    ---------------------------------------------------------------------
    -- Historique des moteurs : sur quels camions ou dans quels locaux
    ---------------------------------------------------------------------
    SELECT * FROM
    (SELECT 'camion' as 'Type localisation' 
           , MoteurNumeroSerie, CamionVIN AS 'camion (ou local) ayant tel moteur', CamionNumber
           , CamionDateAchat = CASE CAST(CamionDateAchat as VARCHAR) 
                                    WHEN '9999-12-31' THEN 'date inconnue'  
                                    ELSE CAST(ComposantDateAchat AS VARCHAR) 
                               END
           , ComposantInstallationDate, ComposantDesInstallationDate  
     FROM CAMION AS x JOIN COMPOSANT_AFFECTATION AS y ON x.CamionId = y.LocalisationId
                      JOIN COMPOSANT AS z ON y.ComposantId = z.ComposantId
                      JOIN COMPOSANT_TYPE AS t ON z.ComposantTypeId = t.ComposantTypeId
                      JOIN MOTEUR AS u ON z.ComposantId = u.ComposantId
     UNION
     SELECT 'local' as 'Type localisation' 
           , MoteurNumeroSerie, LocalCode,'sans objet'
           , 'sans objet'
           , ComposantInstallationDate, ComposantDesInstallationDate 
     FROM LOCAL AS x JOIN COMPOSANT_AFFECTATION AS y ON x.LocalisationId = y.LocalisationId
                     JOIN COMPOSANT AS z ON y.ComposantId = z.ComposantId
                     JOIN COMPOSANT_TYPE AS t ON z.ComposantTypeId = t.ComposantTypeId
                     JOIN MOTEUR AS u ON z.ComposantId = u.ComposantId
    
    ) as xx
    ----------WHERE MoteurNumeroSerie = 's02'
    ORDER BY ComposantInstallationDate ;
    
    ROLLBACK ;
    
    =>

    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
      2  0

  8. #228
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Wowwwww , vous êtes vraiment tenace dans le développement de cette base de données. Je vous admire. Je n'ai presque plus de crédit dans le développement de cette base de données hahaha Mais pour l'instant ce qui importe c'est de la rendre opérationnelle avant Noël Et en plus elle me servira toujours pour les prochaines bases de données que je développerai….. Je vous inviterai à y participer




    Citation Envoyé par fsmrel Voir le message
    J’ai corrigé des erreurs traînant dans le trigger COMPOSANT_RECOUVREMENT_TR dédié aux inserts dans la table COMPOSANT_AFFECTATION.

    …... FROM INSERTED
    ;
    -------pour debug : ----SELECT '' AS 'inside', * FROM COMPOSANT_AFFECTATION ;
    END
    GO[/pre]
      0  0

  9. #229
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Seulement quelques commentaires…..

    Pour les différentiels :

    Lorsqu'ils sont sur un tandem ou un tridem, c'est à dire lorsqu'un camion à 2 ou 3 essieux moteur (les essieux moteurs sont les essieux qui ont un différentiel).

    Il est impossible d'intervertir l'ordre des essieux qui ont des différentiels, c'est à dire qu'un essieu/différentiel 2ND ne peut pas se retrouver physiquement à la place du 3RD et que le 3RD ne peut pas se retrouver physiquement à la place du 2ND car se sont deux essieux/différentiels complètement différents comme la porte gauche et la porte droite, nous ne pouvons pas les interchanger.

    Il y a une seule exception dans cette règle, c'est si le propriétaire décide d'enlever un essieux arrière. Donc le camion qui avait un FRGAWR, un 2NDGAWR et un 3RDGAWR, deviendra un camion avec un FRGAWR et un REARGAWR. Dans cette situation, le propriétaire utilisera le même REARREARAXLE sur ce camion et il deviendra un REARAXLE. Par contre il est impossible d'utiliser le FORWARDREARAXLE pour en faire un REARAXLE car ils sont physiquement et mécaniquement différents. En fait, la table "DIFFERENTIEL" aurait dû être nommée "AXLE" et dans cette table "AXLE" nous avons des essieux "FRONTAXLE, des FORWARDREARAXLE, et des REARREARAXLE. Il y a des essieux qui ont des différentiels et des essieux qui n'en ont pas. Disons pour l'essieu avant qui se nomme FRONTAXLE "Essieu Directeur car son but est de diriger le véhicule", règle générale, un camion n'a pas de différentiel sur son FRONTAXLE mais il a quand même un FRGAWR. Mais il est tout à fait possible de lui mettre un essieu directeur avec un différentiel comme pour les petits camions "Pickup" 4X4, on lui met un essieu directeur avec un différentiel. Mais un FRONTAXLE dans 99,9% des cas ne se retrouvera jamais à l'arrière d'un véhicule, bien qu'il y ait quelques fois des exceptions mais vous n'en verrez probablement jamais personnellement.

    Commencez-vous à aimer les différentiels ???
    Regardez ce camion, il a un essieu directeur à l'avant et un essieu directeur à l'arrière. Par contre il est impossible de voir d'après la photo si l'essieu directeur arrière a un différentiel ou pas.

    Pièce jointe 416913


      0  0

  10. #230
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    C'est ça un de nos problèmes avec les contraintes, un camion peut avoir plus que 2 différentiels car il peut avoir autant de différentiels qu'il a d'essieux mais pas nécessairement.

    Exemple : Un camion peur avoir 2 essieux et un différentiel, ce même camion peux avoir 2 essieux et 2 différentiels. Ce même camion peut avoir 3 essieux et 1 différentiel. Ce même camion peut avoir 3 essieux et 2 différentiels. Ce même camion peux avoir 3 essieux et 3 différentiels. Et ainsi de suite…

    Au fait, j'ai oublié de mentionner qu'un même différentiel peut avoir 2 Ratios différents.
    Et j'ai aussi omis de mentionner qu'un camion peut avoir 2 transmissions et certains camion 3 transmissions.
    Magnifique camion Chinois 4X4…………….avec technologie européenne.
    Pièce jointe 416918

    En version 6X6
    Pièce jointe 416921

    En version 8X8
    Pièce jointe 416925




    Citation Envoyé par fsmrel
    ---------------------------------------------------------------------------------------------------------------------
    -- 3e partie - Nb maximum de composants sur un camion, en fonction du type de composant
    --
    -- Un camion a au plus un moteur, une transmissions, 2 différentiels. Les locaux ne sont pas concernés.
    ----------------------------------------------------------------------------------------------------------------------
      0  0

  11. #231
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut



    ------------------------------------------------
    -------   Script Achat Nouveau Camion   --------
    ------------------------------------------------
    
    USE [DZINDZIO_TRUCKS_MANAGEMENT]
    GO
    
    INSERT INTO LOCALISATION (LocalisationNote) VALUES ('')
    ; 
    
    INSERT INTO CAMION (CamionId, CamionVIN, CamionDateAchat, CamionManufacturer, CamionModel)
        SELECT MAX(LocalisationId), '1FUJGLDR2ALAR5712', '2017-01-01', 'Kenworth', 'W900L' FROM LOCALISATION
    ;
    
    INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele)
          SELECT ComposantTypeId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712'), 'Detroit', 'DD15 14.9L'  
          FROM   COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'moteur'
    ;
    
    INSERT INTO MOTEUR (ComposantId, MoteurNumeroSerie, MaxHorsePower)
        SELECT MAX(ComposantId), '763798hfjguri837', 470 
        FROM   COMPOSANT 
    ;
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
          SELECT ComposantId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712'), '9999-12-31' 
            , (SELECT CamionId 
               FROM   CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712')
        FROM   MOTEUR
        WHERE  MoteurNumeroSerie = '763798hfjguri837'
    ;
    
    INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele)
        SELECT ComposantTypeId, '2017-01-01', 'Meritor', 'RTLO-16918A'  
        FROM   COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'transmission' ;
    
    INSERT INTO TRANSMISSION (ComposantId, TransmissionNumeroSerie, TransmissionVitesses)
        SELECT MAX(ComposantId), 'MERITT938475UT', 18 
        FROM   COMPOSANT ;
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, '2017-01-01', '9999-12-31'
            , (SELECT CamionId 
               FROM   CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712')
        FROM   TRANSMISSION
        WHERE  TransmissionNumeroSerie = 'MERITT938475UT'
    ;
    
    ----- Pour le 1er différentiel -----
    
    INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele)
        SELECT ComposantTypeId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712'),  'EATON', 'FR375LC44000' 
        FROM   COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'différentiel' ;
    
    INSERT INTO DIFFERENTIEL (ComposantId, DifferentielNumeroSerie, DifferentielRatio, DifferentielLock)
        SELECT MAX(ComposantId), 'EA983246834TON832HH8', 3.75, 'Yes'
        FROM   COMPOSANT ;
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712'), '9999-12-31'
              , (SELECT CamionId 
                 FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712')
        FROM   DIFFERENTIEL
        WHERE  DifferentielNumeroSerie = 'EA983246834TON832HH8'
    ;
    
    ----- Pour le 2e différentiel -----
    
    INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele)
        SELECT ComposantTypeId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712'),  'EATON', 'RR375LC44000' 
        FROM   COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'différentiel' ;
    
    INSERT INTO DIFFERENTIEL (ComposantId, DifferentielNumeroSerie, DifferentielRatio, DifferentielLock)
        SELECT MAX(ComposantId), 'EA983246834TON832HH9', 3.75, 'No' 
        FROM   COMPOSANT ;
    
    INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) 
        SELECT ComposantId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712'), '9999-12-31'
              , (SELECT CamionId 
                 FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712')
        FROM   DIFFERENTIEL
        WHERE  DifferentielNumeroSerie = 'EA983246834TON832HH9'
    ;
      0  0

  12. #232
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut


    Cannot execute SQL statement: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Update or insert of view or function 'dbo.CAMION_LOCALISATION_ECRAN_V' failed because it contains a derived or constant field.
      0  0

  13. #233
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Pauvre Ordigil...

    SQL Server est sévère :
    Citation Envoyé par ordigil Voir le message
    Cannot execute SQL statement: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Update or insert of view or function 'dbo.CAMION_LOCALISATION_ECRAN_V' failed because it contains a derived or constant field.
    Mais la vue CAMION_LOCALISATION_ECRAN_V n’est pas faite pour la mise à jour, seulement pour la consultation, comme je l’ai précisé dans le post 148.

    Pour mettre à jour, il y est bien dit d’utiliser la vue CAMION_LOCALISATION_V.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
      1  0

  14. #234
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Je viens d’ajouter les colonnes 4THGAWR et REARGAWR de la table CAMION.

    CREATE TABLE :

    CREATE TABLE CAMION 
    (
            CamionId              INT             NOT NULL
          , CamionVIN             VARCHAR(24)     NOT NULL
          , CamionDateMfg         DATE            NOT NULL DEFAULT '9999-12-31'
          , CamionDateAchat       DATE            NOT NULL DEFAULT '9999-12-31'
          , CamionManufacturer    VARCHAR(15)     NOT NULL
          , CamionModel           VARCHAR(15)     NOT NULL
          , CamionWheelBase       INT             NOT NULL DEFAULT 0 
          , CamionColor           VARCHAR(15)     NOT NULL DEFAULT 'White'
          , CamionNumber          VARCHAR(6)      NOT NULL DEFAULT ''
          , CamionImmat           VARCHAR(9)      NOT NULL DEFAULT ''
          , USDOT                 VARCHAR(10)     NOT NULL DEFAULT '0'
          , ICCMC                 VARCHAR(10)     NOT NULL DEFAULT '0'
          , GVWR                  INT             NOT NULL DEFAULT 0
          , FRGAWR                INT             NOT NULL DEFAULT 0
          , [2NDGAWR]             INT             NOT NULL DEFAULT 0
          , [3RDGAWR]             INT             NOT NULL DEFAULT 0
          , [4THGAWR]             INT             NOT NULL DEFAULT 0
          , REARGAWR              INT             NOT NULL DEFAULT 0
          , CamionDateVente       DATE            NOT NULL DEFAULT '9999-12-31'
        , CONSTRAINT CAMION_PK PRIMARY KEY (CamionId)
        , CONSTRAINT CAMION_VIN_AK UNIQUE (CamionVIN)
        , CONSTRAINT CAMION_LOCALISATION_FK FOREIGN KEY (CamionId) 
              REFERENCES  LOCALISATION (LocalisationId)
        , CONSTRAINT  CAMION_DATE_MFT_CHK CHECK (CamionDateMfg > '')
    );
    

    Vue CAMION_LOCALISATION_V (à utiliser pour les mises à jour) :

    CREATE VIEW CAMION_LOCALISATION_V 
        (
           VIN, DateMfg, Manufacturer, Model, WheelBase, Color
         , USDOT, ICCMC, GVWR,FRGAWR, [2NDGAWR], [3RDGAWR], [4THGAWR], REARGAWR, DateAchat
         , Number, Immat, DateSold, Note
        )
    AS
        SELECT CamionVIN, CamionDateMfg, CamionManufacturer, CamionModel, CamionWheelBase, CamionColor
             , USDOT, ICCMC, GVWR, FRGAWR, [2NDGAWR], [3RDGAWR], [4THGAWR], REARGAWR, CamionDateAchat
             , CamionNumber, CamionImmat, CamionDateVente, LocalisationNote
        FROM   CAMION AS x JOIN LOCALISATION AS y ON x.CamionId = y.LocalisationId  
    ;
    GO
    

    Vue CAMION_LOCALISATION_ECRAN_V (en lecture seulement !)

    CREATE VIEW CAMION_LOCALISATION_ECRAN_V
        (VIN           
       , Number
       , Immat
       , Manufacturer
       , Model
       , Color
       , WheelBase
       , USDOT, ICCMC
       , GVWR, FRGAWR,[2NDGAWR], [3RDGAWR], [4THGAWR], REARGAWR
       , DateMfg
       , DateAchat
       , DateSold
       , Note
        )
    AS
           SELECT VIN
                , Number
                , Immat
                , Manufacturer
                , Model
                , Color
                , CASE(CAST(WheelBase AS VARCHAR)) WHEN '0' THEN '' ELSE CAST(WheelBase AS VARCHAR)  END AS WheelBase
                , USDOT
                , ICCMC
                , GVWR, FRGAWR,[2NDGAWR], [3RDGAWR], [4THGAWR], REARGAWR
                , CASE(CAST(DateMfg AS VARCHAR)) WHEN '9999-12-31' THEN 'valoriser !' ELSE CAST(DateMfg AS VARCHAR)  END AS DateMfg
                , CASE(CAST(DateAchat AS VARCHAR)) WHEN '9999-12-31' THEN 'valoriser !' ELSE CAST(DateAchat AS VARCHAR) END AS DateAchat
                , CASE(CAST(DateSold AS VARCHAR)) WHEN '9999-12-31' THEN '' ELSE CAST(DateSold AS VARCHAR) END AS DateSold
                , Note
          FROM CAMION_LOCALISATION_V  ;
    
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
      2  0

  15. #235
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    J'obtiens la même réponse avec la table Camion et avec la vue CAMION_LOCALISATION_V.....
    En principe vous devriez avoir accès è nouveau au site WEB

    Citation Envoyé par fsmrel Voir le message
    Pauvre Ordigil...

    SQL Server est sévère :


    Mais la vue CAMION_LOCALISATION_ECRAN_V n’est pas faite pour la mise à jour, seulement pour la consultation, comme je l’ai précisé dans le post 148.

    Pour mettre à jour, il y est bien dit d’utiliser la vue CAMION_LOCALISATION_V.
      0  0

  16. #236
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Et vous savez où on demande d'entrer un Note dans LOCALISATION, il ne faut pas forcer l'utilisateur à entrer une Note, car il n'y aura pas toujours une Note à entrer, on pourrait même une valeur par default "NOTA BENE". Il faut simplifier au maximum la création d'un nouveau camion. J'ai corrigé les petites erreurs qu'il y avait dans vos scripts d'ajout et j'ai tout mis dans un seul script.
      0  0

  17. #237
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Les valeurs par défaut à ''0'' ça c'est parfait. Les GAWR, c'est parfait car nous n'aurons probablement jamais autre chose que ça ici. Mais je vais quand même faire des expérimentations dans ''GILLES_VILAIN'' avec les différentiels. Pour la création d'un nouveau camion, il faut vraiment minimiser les données à entrer pour que se soit le plus simple et le plus rapide pour l'utilisateur. Ensuite il ira mettre è jour les éléments manquants. Même le modèle du camion et le numéro d'immatriculation, on pourrait mettre ''0'' par défaut. L'important pour la création d'un nouveau Camion c'est le VIN du camion et son Numéro d'unité. Donc on force l'utilisateur à entrer le CamionVIN, le CamionManufacturier et le CamionNumber. Et les autres toutes des valeurs par défaut. Pour la création d'un nouveau Camion, dans mon formulaire, sur le même formulaire, l'utilisateur créera le nouveau Camion avec son Moteur, sa transmission et ses différentiels, il faudra que tous se fasse dans un Click ''GO'' Le problème c'est que nous n'aurons pas toujours les numéros de série de la transmission et des différentiels lors de la création des nouveaux Camions, il faudra être capable d'entrer des Dummies Number et corriger plus tard, mais encore là. il se peut que nous n'ayons jamais les numéros de série des différentiels car ils ont tendances à disparaître. L'important c'est de créer le camion et ensuite entrer les autres éléments au fur et à mesure que nous les aurons. La j'ai un Moteur dont le numéro de série à complètement disparu à cause de la corrosion.

    [QUOTE=fsmrel;10513318]Je viens d’ajouter les colonnes 4THGAWR et REARGAWR de la table CAMION.

    CREATE TABLE :

    CREATE TABLE CAMION 
    (
            CamionId              INT             NOT NULL
          , CamionVIN             VARCHAR(24)     NOT NULL
          , CamionDateMfg         DATE            NOT NULL DEFAULT '9999-12-31'
          , CamionDateAchat       DATE            NOT NULL DEFAULT '9999-12-31'
          , CamionManufacturer    VARCHAR(15)     NOT NULL
          , CamionModel           VARCHAR(15)     NOT NULL
          , CamionWheelBase       INT             NOT NULL DEFAULT 0 
          , CamionColor           VARCHAR(15)     NOT NULL DEFAULT 'White'
          , CamionNumber          VARCHAR(6)      NOT NULL DEFAULT ''
          , CamionImmat           VARCHAR(9)      NOT NULL DEFAULT ''
          , USDOT                 VARCHAR(10)     NOT NULL DEFAULT '0'
          , ICCMC                 VARCHAR(10)     NOT NULL DEFAULT '0'
          , GVWR                  INT             NOT NULL DEFAULT 0
          , FRGAWR                INT             NOT NULL DEFAULT 0
          , [2NDGAWR]             INT             NOT NULL DEFAULT 0
          , [3RDGAWR]             INT             NOT NULL DEFAULT 0
          , [4THGAWR]             INT             NOT NULL DEFAULT 0
          , REARGAWR              INT             NOT NULL DEFAULT 0
          , CamionDateVente       DATE            NOT NULL DEFAULT '9999-12-31'
        , CONSTRAINT CAMION_PK PRIMARY KEY (CamionId)
        , CONSTRAINT CAMION_VIN_AK UNIQUE (CamionVIN)
        , CONSTRAINT CAMION_LOCALISATION_FK FOREIGN KEY (CamionId) 
              REFERENCES  LOCALISATION (LocalisationId)
        , CONSTRAINT  CAMION_DATE_MFT_CHK CHECK (CamionDateMfg > '')
    );
    
      0  0

  18. #238
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Vous avez vendu le Kenworth ? Il a disparu hahaha C'était mon préféré….
      0  0

  19. #239
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Ohhhhhhh, la mise à jour des camions fonctionne maintenant à partir du site WEB

    Par contre, je vais devoir le remettre à jour pour rajouter les colonnes que vous avez ajouté dans la table CAMION
      0  0

  20. #240
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par ordigil Voir le message
    J'obtiens la même réponse avec la table Camion et avec la vue CAMION_LOCALISATION_V
    Queele est la base ? La requête ?


    Citation Envoyé par ordigil Voir le message
    Et vous savez où on demande d'entrer un Note dans LOCALISATION, il ne faut pas forcer l'utilisateur à entrer une Note
    L’utilisateur n’est pas obligé de fournir une note ! Il y a une valeur par défaut : ''

    Exemple :

    use temp ;
    
    begin transaction ;
    
    INSERT INTO CAMION_LOCALISATION_V (VIN, Immat, DateAchat, Manufacturer, Model, Number)
        SELECT 'zinzin', 'zinimmat', '2012-07-01', 'Leclerc', 'Modèle Z',  'zzz314'
    
    --------------------------------------
    -- pour visualiser
    --------------------------------------
    select * from CAMION_LOCALISATION_V
    select * from CAMION ;
    select * from  LOCAL_LOCALISATION_V
    select * from LOCALISATION ;
    
    
    rollback ;
    
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
      1  0

Discussions similaires

  1. Ajout dans une table et relation avec d'autres
    Par climz dans le forum Access
    Réponses: 5
    Dernier message: 12/05/2006, 15h32
  2. Création table et relations
    Par ptitdragon_eric dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/09/2005, 13h37
  3. table de relation
    Par tanjonaravelson dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/06/2005, 18h20
  4. Table de relation et sélection via jointure
    Par 73672 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 09/11/2004, 09h33
  5. Problème avec mes tables de relation...
    Par mmike dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/06/2003, 15h16

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