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. #1
    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 Enregistrement dans une table
    salut;

    je suis toujours avec la gestion de stock,et j'ai un problème concernant ma table: fiche de stock (FicheStocks) avec:
    FicheStocks(NumFiche,CodPrd,Dat,Sortie,Stk,...)
    chaque produit a une fiche de stock,à chaque distribution d'un produit je veux mettre la date, la quantité livrée du produit et le stock restant dans la table FicheStocks,

    j'ai essayé le code suivant:

    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
    dm1.FicheStocks.Active;
    dm1.FicheStocks.Append;
    dm1.FicheStocks.First;
    while not(dm1.FicheStocks.Eof)do begin
    if (dm1.FicheStocks.FieldValues['CodPrd']=rech )then begin //rech contient le code de produit saisi
    break;
    end else
    dm1.FicheStocks.Next;
    end ;
    dm1.FicheStocks.FindNearest([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;
    mais à chaque nouvelle distribution, les valeurs des champs a remplir crasent les valeurs précedantes.
    je sais que je suis toujours sur le meme enregistrement,
    mais je veux que:
    un produit donné dans la fiche de stock peut avoir plusieurs quantités livrées à des dates différentes.
    j'ai essayé linstruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dm1.FicheStocks.FieldValues['CodPrd']:=dm1.FicheStocks.RecordCount+1;
    avant l'instruction:
    mais ça change rien,
    comment faire svp ?

  2. #2
    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,
    si tu permets une suggestion Imene: pour ton cas, il te faut 2 tables:
    1-Table produits.(table maitre)
    2-Table FicheStocks(table détail)
    tu les reliras avec un champ (CodPrd),comme ça tu n'auras plus à coder quoi que se soit .

    a+
    NABIL74

  3. #3
    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
    oui nabil j'ai une table produits comme table maitre et j'ai la relié avec la table Fichestocks avec CodPrd

  4. #4
    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
    donc dans la table Produits quand tu te positionnes sur un produit,tu vas te positionner aussi sur la table FicheStocks.dans ce cas, tu fais un append dans la table FicheStocks sans faire une recherche(tu es déjà positionnée sur le bon produit).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dm1.FicheStocks.Active;
    dm1.FicheStocks.Append;
    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;
    teste ça.

    NABIL74

  5. #5
    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
    j'ai un message : 'Violation de clé '

  6. #6
    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
    violation de clé.ton champ "CodPrd" est de quel type?numérique?

  7. #7
    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
    oui de type numérique nabil

  8. #8
    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
    ce message apparait quand tu ajoutes un produit en même temps que tu ajoutes un enregistrement dans la table FicheStocks?

  9. #9
    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
    non,le produit déja existe dans la fiche de stock

  10. #10
    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
    essaye de vider tes 2 tables et puis teste le code que je t'ai donné.normalement, si tes 2 tables sont liées par "CodPrd" quand tu te positionnes sur un produit,tu ajoutes simplement un enregistrement dans la table FicheStocks.ce code suffira donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dm1.FicheStocks.Active;
    dm1.FicheStocks.Append;
    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;
    a+

  11. #11
    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

    avant de coder ,il faut bien concevoire le MCD ,pour ne pas perturbé.
    cordialement rec82.

  12. #12
    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

    tu veut comme ça gerer l'historique?

  13. #13
    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
    oui exactement rec82

  14. #14
    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

    si oui,dans la table de fichestock ne faut pas lindixé par numfiche et codprod donc c'est une table non indixé, et donc dans la saisie ne faut pas faire la recherche pour le codprod pour insérer vos donné (il faut insérer directement).
    et pour la recherche de l'historique de prod il faut faire une requte sql seulement de type:

    select * from fichestock where codprod=code deproduit voulus.
    cordialement rec82.
    A+

  15. #15
    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
    merci rec82 je vais essayer ça .

  16. #16
    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 slaut

    merci rec82 je vais essayer ça
    bon developpement et bon corage.
    cordialement.

  17. #17
    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
    chaque produit a une fiche de stock,à chaque distribution d'un produit je veux mettre la date, la quantité livrée du produit et le stock restant dans la table FicheStocks
    chaque produit peut avoir plusieurs entrées et sorties dans des dates différentes.
    ex:
    dans la table Produits:
    nom produit
    produit de vaissele

    Table FicheStocks:
    -Dat:12-04-2009
    - Dat:13-04-2009
    -Dat:14-04-2009

    la table maitre(Produits) doit-être liée à la détail(FicheStocks)par le champ "CodPrd".
    1-Table Produits:le champ "CodPrd" de type numérique doit être index primaire.
    la propriété "MAstersource"de la table FicheStocks,affectes-lui la DataSource de Produits,puis dans la propriété
    "MasterField" avec lui le nom de ton champ CodPrd.

    2-Table détail FicheStocks:le champ "CodPrd" de type numérique doit être index sacondaire.maintenant quand tu sélectionnes un produits dans la table Produits,tu ajouteras des détails dans la table FicheStocks en passant par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dm1.FicheStocks.Active;
    dm1.FicheStocks.Append;
    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;
    avant d'ajouter ce code,vide tes 2 tables.
    a+

    NABIL74

  18. #18
    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

    chaque produit a une fiche de stock
    donc d'apprés ça la relation est (1-1) ,le codprod c'est pas un index secondaire;

    la table maitre(Produits) doit-être liée à la détail(FicheStocks)par le champ "CodPrd".
    1-Table Produits:le champ "CodPrd" de type numérique doit être index primaire.
    la propriété "MAstersource"de la table FicheStocks,affectes-lui la DataSource de Produits,puis dans la propriété
    "MasterField" avec lui le nom de ton champ CodPrd.

    2-Table détail FicheStocks:le champ "CodPrd" de type numérique doit être index sacondaire.maintenant quand tu sélectionnes un produits dans la table Produits,tu ajouteras des détails dans la table FicheStocks en passant par:
    c'est juste pour un bon affichage des informations.
    ce que veut immen25 c'est de gérer l'historique de produit si j'ai bien compris.
    cordialement rec82.

  19. #19
    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,
    chaque produit a une fiche de stock,à chaque distribution d'un produit je veux mettre la date, la quantité livrée du produit et le stock restant dans la table FicheStocks.

    mais à chaque nouvelle distribution, les valeurs des champs a remplir crasent les valeurs précedantes.
    je sais que je suis toujours sur le meme enregistrement,
    mais je veux que:
    un produit donné dans la fiche de stock peut avoir plusieurs quantités livrées à des dates différentes.
    @ rec82:dans la table "FicheStocks" peut contenir plusieurs enregistrements du même produit,donc le champ "CodPrd" doit-être un index secondaire.la relation est non pas "1-1" mais "1-n". sinon pourquoi avoir une table maître et une table détail?

    a+

    NABIL74

  20. #20
    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 Nabil

    1*
    *1-n* veut dire un produit à plusieur fichestock ,mais ce qui est dans l'énnoncé de prb et:
    chaque produit a une fiche de stock
    si tu veut dire *1-n*veut dire :
    chaque ocurence de produit peut avoir plusieur ocurence de la meme ocurrece de fiche stock:
    prod A ----------------->fich1 date1 quntstocke1 quantitesortie1
    prod A ----------------->fich1 date2 quntstocke2 quantitesortie2
    prod A ----------------->fich1 date3 quntstocke3 quantitesortie3
    vous voyé d'aprés MERISE c'est faut.
    2*
    chaque produit a une fiche de stock
    d'aprés ça le numero de fiche est une propriéte de produit (dependance fonctionnelle toujour d'aprés MERISE entre codprod et numfiche).
    *03 proposition pour imen25::
    si dans chaque distribution vous avez un seule produit
    ajouter une table distributionavec comme champs:
    numdist (numero distribution)
    quantdist (quantité distribué)
    quantstock (quantite dans stock :calculé à partir de quntdist et quntprod dans la table produit)
    date (date de distribution)
    codprod (code produit comme clé etrangere car la table produit et une table pere)
    4*
    avec cette conception fait une requete simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select numfiche.produit,codprod.produit,numdist.distribution,quantdist.distribution,quantstock.distribution,date.distribution
    from produit ,distribution
    where codprod.produit=codprod.distribution
    cordialement rec82.
    a+

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