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

Bases de données Delphi Discussion :

Enregistrement dans une table


Sujet :

Bases de données Delphi

  1. #21
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    salut,

    un client peut effectuer une commande(par date) de plusieurs produits:la relation est " 0-n ".

    une commande peut contenir plusieurs produits,donc la relation est "1:n".

    reste à imene de nous confirmer comment elle veut procéder.

    a+
    NABIL74

  2. #22
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut
    salut
    reste à imene de nous confirmer comment elle veut procéder
    A+

  3. #23
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Bonjour ;
    voici mon problème à nouveau:

    j'ai une table produit avec les champs:
    CodPrd:comme index primaire.
    TypPrd:j'ai 7 types :médicaments,réactifs,ligatures,...etc
    Design: désignation du produit.
    QteEnStk: la quantité en stock.
    .....

    et une table CommandeS avec les chapms:
    NumcmdS:numéro de la commande comme index primaire.
    NumServ:numéro de service comme index primaire.
    TypPrd:
    CodPrd:
    Design:
    DatCmdS:la date de la commande.
    QteDem:quantité demandée.
    QteLiv:quantité livrée.
    .....

    et une table FicheStocks avec les champs:
    NumFiche: comme index primaire.
    CodPrd:comme index secondaire.
    Forme:la forme de produit.
    Equiv:le produit equivalant à ce produit.
    StkSec:stock de sécurité
    Entree:la quantité entrée de ce produit à chaque approvisionnement.
    Sortie:la quantité sortie de ce produit à chaque distribution.
    Stk: la quantité qu'est dans le stock maintenant.
    .....

    une commande peut avoir plusieurs produits.

    A l'arrivée d'une commande,je remplis les champs de CommandeS pour chaque produit sauf le champs QteLiv puisque je doit vérifierer mon stock avant, ainsi que s'il sera atteind son niveau bas(StkSec) ou non avec un message de confirmation.

    voici le code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    procedure TForm8.SpeedButton3Click(Sender: TObject);
    var rech1: string;
    begin
    if(strtoint(edit2.Text)>strtoint(dbgrid1.Fields[4].Text))then begin
       messagedlg(' Stock insuffisant pour cette commande!' +#10#13+ '      Demande d''approvisionnement',mterror,[mbOk],0);
       edit3.Enabled:=false;
       exit;
    end
     
    else begin
      rech1:= dbgrid1.Fields[0].Text;
      dm1.FicheStocks.Active;
      dm1.FicheStocks.First;
      while not(dm1.FicheStocks.Eof)do begin
        if (dm1.FicheStocks.FieldValues['CodPrd']=rech1 )then begin
          break;
        end  else
      dm1.FicheStocks.Next;
      end;
     
      dm1.FicheStocks.FindNearest([rech1]);
         if(strtoint(dbgrid1.Fields[4].text)- strtoint(edit2.Text)<=dm1.FicheStocks.FieldValues['Stksec'])then begin
                 if messagedlg ('Si vous etes acceptés cette commande votre stock atteind son niveau bas, !'+#10#13+ '     Voulez vous continuer?', mtinformation,[mbyes,mbno],0)= mryes then
                    edit3.Enabled:=true
                    else form8.Close;
                    end
         else
          showmessage('opération autorisée ');
          edit3.Enabled:=true;
         end;
    end;
    Aprés remplir tous les champs, je doit cliquer sur un bouton "Ajouter" pour confirmer l'opération.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    procedure TForm8.SpeedButton1Click(Sender: TObject);
    var rech:string;
    begin
     rech:= dbgrid1.Fields[0].Text;
      dm1.produit.Active;
      dm1.produit.Append;
      dm1.produit.First;
      while not(dm1.produit.Eof)do begin
        if (dm1.produit.FieldValues['CodPrd']=rech )then begin
          break;
        end  else
      dm1.produit.Next;
      end;
    dm1.produit.FindNearest([rech]);
    dm1.produit.Edit;
    dm1.produit.FieldValues['QteEnStk']:= (dm1.produit.FieldValues['QteEnStk']- strtoint(edit3.Text));
    dm1.produit.Post;
     
                 ///////////////////////////////////////////////
    dm1.CommandeS.Active;
    dm1.CommandeS.Append;
    dm1.CommandeS.FieldByName('NumServ').AsString:=DBLookupComboBox1.Text;
    dm1.CommandeS.FieldByName('NumCmdS').AsString:=edit1.Text;
    dm1.CommandeS.FieldByName('DatCmdS').AsString:=maskedit1.Text;
    dm1.CommandeS.FieldByName('TypPrd').AsString:=combobox1.Text;
    dm1.CommandeS.FieldByName('Design').AsString:=dbgrid1.Fields[1].Value;
    dm1.CommandeS.FieldByName('CodPrd').AsString:=dbgrid1.Fields[0].Value;
    dm1.CommandeS.FieldByName('QteDems').AsString:=edit2.Text;
    dm1.CommandeS.FieldByName('QteLiv').AsString:=edit3.Text;
    dm1.CommandeS.Post;
    dm1.Query1Design.Value;
                   /////////////////////////////////////////////
    dm1.FicheStocks.Active;
    dm1.FicheStocks.Append;
    dm1.FicheStocks.FindKey([rech]);
    dm1.FicheStocks.edit;
    dm1.FicheStocks.FieldByName('Dat').AsString:= maskedit1.Text; // date de distribution
    dm1.FicheStocks.FieldByName('Sortie').AsString:= edit3.Text; //quantité livrée
    dm1.FicheStocks.FieldByName('Stk').AsInteger:= strtoint(dbgrid1.Fields[4].Text)- strtoint(edit3.Text);// mon stock aprés distribution
    dm1.FicheStocks.Post;
    end;
    le problème est dans la fiche de stock, je veux gérer l'historique d'un produit dans sa fiche de stock comme rec82 a dis mais a chaque nouvelle distribution d'un produit, le nouveau enregistrement crase l'ancien.
    j'éspére que j'étais claire.
    merci d'avance .

  4. #24
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    bonjour,
    si j'ai bien compris,tu veux garder en archive toutes les opérations que tu as effectuées sur chaque produit.c'est simple;ajoute une autre table que tu nommeras "Table_archives" qui contiendra tous les champs de la table"fiche de stock" puis tu sauvegarderas toutes les opérations faîtes(entrée,sorties....) de chaque produit.

    a+

    NABIL74

  5. #25
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    "Table-Archives" c'est une table détail de la table "Produit" ?

  6. #26
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    autre solution:tu ajouteras à chaque nouvelle opération sur un produit un enregistrement dans la table détail "fiche de stock" comme ça tu pourras les visualiser.et l'enregistrement ne sera pas écrasé.
    enfin c'est à toi de voir si ça te convient.

    A+

    NABIL74

  7. #27
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    non,c'est juste pour archiver.la table Archives ne sera pas une table détail pour la table produit.elle sera à part.
    1-crée une nouvelle table"Archives_produits" avec les mêmes champs de la table "fiche de stock".
    2-quand tu ajoutes ou modifies un produit,tu le feras aussi sur la table"Archive".comme ça, tu pourras voir toutes les opérations faite sur un produit.

    A+

    NABIL74

  8. #28
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    ok nabil,je vais essayer la première solution de "Table_Archives" maintenant.
    merci.

  9. #29
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 710
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 710
    Points : 13 174
    Points
    13 174
    Par défaut
    Au risque de me répéter (voir la précédente discussion), la redondance des informations n'est pas bonne. Tu devrais apprendre à faire des jointures de tables (JOIN).

    En rouge ce que je supprimerais,
    en bleu ce que je déplacerais,
    en vert ce que j'ajouterais:

    Table Articles
    CodPrd:comme index primaire.
    TypPrd:j'ai 7 types :médicaments,réactifs,ligatures,...etc
    Design: désignation du produit.
    Forme:la forme de produit.
    Equiv:le produit equivalant à ce produit.
    StkSec:stock de sécurité

    QteEnStk: la quantité en stock.
    .....

    Table Commandes
    NumcmdS:numéro de la commande comme index primaire.
    NumServ:numéro de service comme index primaire.
    TypPrd: --> Est déjà dans la première table
    CodPrd:
    Design: --> Est déjà dans la première table
    DatCmdS:la date de la commande.
    QteDem:quantité demandée.
    QteLiv:quantité livrée.
    .....

    Table Quantité (Une ligne ajoutée à chaque nouveau réassort)
    NumFiche: comme index primaire. <-- Je suppose que ça correspond à une autre table Récéption ou un numéro de bulletin de livraison
    CodPrd:comme index secondaire.
    Forme:la forme de produit.
    Equiv:le produit equivalant à ce produit.
    StkSec:stock de sécurité

    Qte:Quantité ajoutée (Supprimée, cf Code)
    Date: Date approvisionnement
    Code: integer --> Réassort, inventaire, vol, etc.

    Entree:la quantité entrée de ce produit à chaque approvisionnement.
    Sortie:la quantité sortie de ce produit à chaque distribution.
    Stk: la quantité qu'est dans le stock maintenant.


    Et à l'arrivée, la quantité en stock correspond à SUM(TableQuantite.Qte) -SUM(TableCommande.QteLiv).

    Inutile aussi d'afficher un message si il y a une erreur de stock (stock=0 ou mini atteint), le vendeur (manutentionnaire) à l'article dans les mains, on ne va pas l'empècher de le vendre (le livrer) Par contre ça devrait te permettre de générer un bulletin de commande pour réassort.

    Quant à l'historique, il est déjà fait, c'est plus que de l'affichage

  10. #30
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Table Articles
    CodPrd:comme index primaire.
    TypPrd:j'ai 7 types :médicaments,réactifs,ligatures,...etc
    Design: désignation du produit.
    Forme:la forme de produit.
    Equiv:le produit equivalant à ce produit.
    StkSec:stock de sécurité

    QteEnStk: la quantité en stock.
    oui je suis d'accord avec toi Andnotor à propos de la redondance des informations ou des champs,mais, je pense qu'il ne faut pas supprimer le champ "QteEnStk" dans la table "Produit".c'est pour voir la quantité restante en stock.il faut simplement le déplacer à la table "Fiche stock".c'est pour gérer les entrées et les sorties de chaque produit.

    pour remédier au message d'erreur "violation de clé" dans la table "fiche produit",le champ "NumFiche" doit être de type "+" et non pas de type"numérique" ou ajouter à la valeur de ce champ "1".
    ex:NumFiche+1.

    N.B:toute la structure et les champs de toutes les tables sont à refaire.

    a+

    NABIL74

  11. #31
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 710
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 710
    Points : 13 174
    Points
    13 174
    Par défaut
    ça lui permet de travailler avec des TTable à la place de TQuery, mais il y a un risque d'erreur certain Un LEFT JOIN sur les tables et calculer la différence est beaucoup plus sûr !

Discussions similaires

  1. Position d'un enregistrement dans une table ou requête Query
    Par polinevol dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/01/2006, 03h53
  2. Position d'un enregistrement dans une table
    Par polinevol dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/01/2006, 09h10
  3. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 20h11
  4. Nombre d'enregistrement dans une table MySQL
    Par tom06440 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 21/10/2005, 19h07
  5. AJOUT d'un ENREGISTREMENT dans UNE TABLE
    Par ramo dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/08/2005, 16h24

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