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 :

gestion de magasin sous sql server


Sujet :

Bases de données Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 0
    Points
    0
    Par défaut gestion de magasin sous sql server
    salut tout le monde comme je suis débutant en delphi !
    j'ai rencontre un problème au niveau de ma requête qui fait le calcule du stock automatiquement voici mon approche:

    Table Mouvement (MouvementID,Typ_Mouv, Num_bon, Dat_Bon, Num_b_cmd, ArticleID, FournisseurID, ClientID, BureauID, Qt_entr_Mouv, Dat_Mouv, Mat_Articl_mouv, Mark_articl, Etat_articl_Mouv, Lieu_stock, Valid, Garanti, Obs_Mouv, Bar_code, Qt_Sorti_Mouv)
    Table Article (ArticleID,Ref_articl,Lib_articl,Type_articl, categorie, Stoc_min_articl, unit_mes_articl, Stock_depart, Stock_Actuel

    je veux faire la mise a jours automatiquement Apres chaque Mouvement en Stock sur la table Article.Stock_Actuel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    with SQLt.MiseAjour do
    begin
      close;
      SQL.Clear;
      SQL.Add('UPDATE Article set Stock_actuel=Article.stock_Actuel+Sum(Mouvement.Qt_Entr_Mouv-Sum(Mouvement.Qt_Sorti_Mouv))
    WHERE Article.ArticleID=ED05 ');
      Parameters.ParamByName('ED05').Value := ???????
      Active := true;
    end;
    (ED05 edit.text)
    merci !

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par trksoft Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    with SQLt.MiseAjour do
    begin
      close;
      SQL.Clear;
      SQL.Add('UPDATE Article set Stock_actuel=Article.stock_Actuel+Sum(Mouvement.Qt_Entr_Mouv-Sum(Mouvement.Qt_Sorti_Mouv))
    WHERE Article.ArticleID=ED05 ');
      Parameters.ParamByName('ED05').Value := ???????
      Active := true;
    end;
    Déjà tu as 3 problèmes dans ta requête
    - Les paramètres c'est : + Le nom du paramètre
    - Une requête Insert/Update/Delete on l'appel avec ExecSQL
    - Tu ne peux pas faire ce que tu veux en une seule requête, les Sum ne peuvent pas fonctionner comme tu les utilises.

    Sum(Mouvement.Qt_Entr_Mouv et Sum(Mouvement.Qt_Sorti_Mouv) va falloir que tu les recherches avant avec une requête select

    Après je ne suis pas sur de comprendre ce que tu veux faire exactement.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Déjà tu as 3 problèmes dans ta requête
    - Les paramètres c'est : + Le nom du paramètre
    - Une requête Insert/Update/Delete on l'appel avec ExecSQL
    - Tu ne peux pas faire ce que tu veux en une seule requête, les Sum ne peuvent pas fonctionner comme tu les utilises.

    Sum(Mouvement.Qt_Entr_Mouv et Sum(Mouvement.Qt_Sorti_Mouv) va falloir que tu les recherches avant avec une requête select

    Après je ne suis pas sur de comprendre ce que tu veux faire exactement.
    merci Rayek !
    pour Afficher la quantité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Mouvement.articleID, Sum(Mouvement.Qt_Entr_Mouv)-Sum(Mouvement.Qt_Sorti_Mouv) AS Stock_Mouvement
    FROM Mouvement
    WHERE (((Mouvement.articleID)=[ArticleID]))
    GROUP BY Mouvement.articleID
    Alors la mise à jours sur la table Article.Stock_Actuel ?

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Il ne te reste plus qu'à boucler sur cette requête et de mettre à jours

    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
     
    With UneQuery do
    begin
      Close;
      SQL.CLear;
      SQL.Add('SELECT Mouvement.articleID, Sum(Mouvement.Qt_Entr_Mouv)-Sum(Mouvement.Qt_Sorti_Mouv) AS Stock_Mouvement');
      SQL.Add('FROM Mouvement');
      SQL.ADd('WHERE (((Mouvement.articleID)=[ArticleID]))');
      SQL.Add('GROUP BY Mouvement.articleID');
      Open;
    end;
     
    While not UneQuery.Eof do
    begin
      With SQLt.MiseAjour do
      begin
        Close;
        SQL.Clear;
        SQL.Add('UPDATE Article set Stock_actuel=Article.stock_Actuel+ :SUMVAL)
    WHERE Article.ArticleID= :ARTID');
        Parameters.ParamByName('ARTID').Value := UneQuery.FieldByName('articleID').AsInteger;
        Parameters.ParamByName('SUMVAL').Value := UneQuery.FieldByName('Stock_Mouvement').AsInteger;
        ExecSQL;    
      end;
     
      UneQuery.Next;
    end;
    A tester et modifier bien sûr
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 0
    Points
    0
    Par défaut merci
    Citation Envoyé par Rayek Voir le message
    Il ne te reste plus qu'à boucler sur cette requête et de mettre à jours

    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
     
    With UneQuery do
    begin
      Close;
      SQL.CLear;
      SQL.Add('SELECT Mouvement.articleID, Sum(Mouvement.Qt_Entr_Mouv)-Sum(Mouvement.Qt_Sorti_Mouv) AS Stock_Mouvement');
      SQL.Add('FROM Mouvement');
      SQL.ADd('WHERE (((Mouvement.articleID)=[ArticleID]))');
      SQL.Add('GROUP BY Mouvement.articleID');
      Open;
    end;
     
    While not UneQuery.Eof do
    begin
      With SQLt.MiseAjour do
      begin
        Close;
        SQL.Clear;
        SQL.Add('UPDATE Article set Stock_actuel=Article.stock_Actuel+ :SUMVAL)
    WHERE Article.ArticleID= :ARTID');
        Parameters.ParamByName('ARTID').Value := UneQuery.FieldByName('articleID').AsInteger;
        Parameters.ParamByName('SUMVAL').Value := UneQuery.FieldByName('Stock_Mouvement').AsInteger;
        ExecSQL;    
      end;
     
      UneQuery.Next;
    end;
    A tester et modifier bien sûr
    merci ! je vais essayé après !!

  6. #6
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par Rayek Voir le message
    - Tu ne peux pas faire ce que tu veux en une seule requête, les Sum ne peuvent pas fonctionner comme tu les utilises.
    Si, ça ne pose aucun problème :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    update articles
    set Stock_actuel = Stock_depart + Stock_Mouvement
    from articles 
      inner join (SELECT articleID, Sum(Qt_Entr_Mouv)-Sum(Qt_Sorti_Mouv) AS Stock_Mouvement
                  from Mouvement
                  group by articleID) Mvt on articles.articleID = Mvt.articleID
    where articles.articleID = @ED05
    Si tu veux traiter plusieurs articles à la fois, il suffit de modifier la clause where finale.

    Au passage, j'ai corrigé la formule de calcule du stock actuelle : Si on recalcule la somme de tous les mouvements, il faut l'ajouter au stock initiale et pas au stock précédent, ou alors il ne faut utiliser qu'un seul mouvement pour faire le calcul...

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Franck SORIANO Voir le message
    Si, ça ne pose aucun problème :
    Comme il l'avait écrit ça ne pouvait pas fonctionner


    Citation Envoyé par Franck SORIANO Voir le message
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    update articles
    set Stock_actuel = Stock_depart + Stock_Mouvement
    from articles 
      inner join (SELECT articleID, Sum(Qt_Entr_Mouv)-Sum(Qt_Sorti_Mouv) AS Stock_Mouvement
                  from Mouvement
                  group by articleID) Mvt on articles.articleID = Mvt.articleID
    where articles.articleID = @ED05
    Si tu veux traiter plusieurs articles à la fois, il suffit de modifier la clause where finale.

    Au passage, j'ai corrigé la formule de calcule du stock actuelle : Si on recalcule la somme de tous les mouvements, il faut l'ajouter au stock initiale et pas au stock précédent, ou alors il ne faut utiliser qu'un seul mouvement pour faire le calcul...
    Est ce que son moteur de base de données accepte ce type de requête ?
    Après un

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Update [Table]
    Set [Valeur]
    From [Table]
    Inner Join [Requete]
    Where [Conditions]

    Je ne connaissais pas, cela semble à du SQL serveur non (le @ dans la variable ?)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Franck SORIANO Voir le message
    Si, ça ne pose aucun problème :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    update articles
    set Stock_actuel = Stock_depart + Stock_Mouvement
    from articles 
      inner join (SELECT articleID, Sum(Qt_Entr_Mouv)-Sum(Qt_Sorti_Mouv) AS Stock_Mouvement
                  from Mouvement
                  group by articleID) Mvt on articles.articleID = Mvt.articleID
    where articles.articleID = @ED05
    Si tu veux traiter plusieurs articles à la fois, il suffit de modifier la clause where finale.

    Au passage, j'ai corrigé la formule de calcule du stock actuelle : Si on recalcule la somme de tous les mouvements, il faut l'ajouter au stock initiale et pas au stock précédent, ou alors il ne faut utiliser qu'un seul mouvement pour faire le calcul...
    merci Franck pour votre participation.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 0
    Points
    0
    Par défaut unité Mouvement
    Actions liste
    la MAJ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    procedure TFOR_Mouvement.MiseajourExecute(Sender: TObject);
    begin
          with SQLt.MiseAjour do
          if (pointer = 0) Then
          begin
          Close;
          SQL.Clear;
          SQL.Add('INSERT INTO Mouvement');
          SQL.Add('( Typ_Mouv, Num_bon, Dat_Bon, Num_b_cmd, ArticleID, FournisseurID, ClientID, BureauID, Qt_entr_Mouv, Qt_Sorti_mouv, Dat_Mouv, Mat_Articl_mouv, Mark_articl, Etat_articl_Mouv, Lieu_stock, Valid, Garanti, Num_serie_Article, Ref_inventID, Obs_Mouv, Bar_code)');
          SQL.Add(' Values');
          SQL.Add('(:P0,:P1,:P2,:P3,:P4,:P5,:P6,:P7,:P8,:P9,:P10,:P11,:P12,:P13,:P14,:P15,:P16,:P17,:P18,:P19,:P20)');
          Parameters.ParamByName('P0').Value := ED01.Text;
          Parameters.ParamByName('P1').Value := ED02.Text;
          Parameters.ParamByName('P2').Value := ED03.Date;
          Parameters.ParamByName('P3').Value := ED04.Text;
          Parameters.ParamByName('P4').Value := ED05.Text;
          Parameters.ParamByName('P5').Value := ED06.Text;
          Parameters.ParamByName('P6').Value := ED07.Text;
          Parameters.ParamByName('P7').Value := ED08.Text;
          Parameters.ParamByName('P8').Value := ED09.Text;
          Parameters.ParamByName('P9').Value := ED10.Date;
          Parameters.ParamByName('P10').Value := ED11.Text;
          Parameters.ParamByName('P11').Value := ED12.Text;
          Parameters.ParamByName('P12').Value := ED13.Text;
          Parameters.ParamByName('P13').Value := ED14.Text;
          Parameters.ParamByName('P14').Value := ED15.Date;
          Parameters.ParamByName('P15').Value := ED16.Text;
          Parameters.ParamByName('P16').Value := ED17.Text;
          Parameters.ParamByName('P17').Value := ED18.Text;
          Parameters.ParamByName('P18').Value := ED19.Text;
          Parameters.ParamByName('P19').Value := ED20.Text;
          Parameters.ParamByName('P20').Value := ED21.Text;
          ExecSQL ;
          SQLt.SH_Mouvement.Active := false;
          SQLt.SH_Mouvement.Active := true;
          SQLt.SH_Mouvement.Last;
          end
          else
          begin
          SQL.Clear;
          SQL.Add('UPDATE  Mouvement SET');
          SQL.Add('Typ_Mouv=:P0,Num_bon=:P1,Dat_Bon=:P2,Num_b_cmd=:P3,ArticleID=:P4,FournisseurID=:P5,ClientID=:P6,BureauID=:P7,Qt_entr_Mouv=:P8, Qt_Sorti_mouv=:P9, Date_Mouv=:P10,Mat_Articl_mouv=:P11,Mark_articl=:P12,Etat_articl_Mouv=:P13,Lieu_stock=:P14,Valid=:P15,Garanti=:P16,Num_serie_Article=:P17, Ref_InventID=:P18, Obs_articl=:P19,Bar_code=:P20');
          SQL.Add('WHERE Mouvement.MouvementID=:P19');
          Parameters.ParamByName('P0').Value := ED01.Text;
          Parameters.ParamByName('P1').Value := ED02.Text;
          Parameters.ParamByName('P2').Value := ED03.Text;
          Parameters.ParamByName('P3').Value := ED04.Text;
          Parameters.ParamByName('P4').Value := ED05.Text;
          Parameters.ParamByName('P5').Value := ED06.Text;
          Parameters.ParamByName('P6').Value := ED07.Text;
          Parameters.ParamByName('P7').Value := ED08.Text;
          Parameters.ParamByName('P8').Value := ED09.Text;
          Parameters.ParamByName('P9').Value := ED10.Text;
          Parameters.ParamByName('P10').Value := ED11.Text;
          Parameters.ParamByName('P11').Value := ED12.Text;
          Parameters.ParamByName('P12').Value := ED13.Text;
          Parameters.ParamByName('P13').Value := ED14.Text;
          Parameters.ParamByName('P14').Value := ED15.Text;
          Parameters.ParamByName('P15').Value := ED16.Text;
          Parameters.ParamByName('P16').Value := ED17.Text;
          Parameters.ParamByName('P17').Value := ED18.Text;
          Parameters.ParamByName('P18').Value := ED19.Text;
          Parameters.ParamByName('P19').Value := ED20.Text;
          Parameters.ParamByName('P20').Value := ED21.Text;
          Parameters[21].Value := pointer;
          ExecSQL ;
          SQLt.SH_Mouvement.Active := false;
          SQLt.SH_Mouvement.Active := true;
          SQLt.SH_Mouvement.Last;
          SQLt.SH_Mouvement.Locate('MouvementID', pointer, []);
      end;
    end;
    action calcule Quantité en stock

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TFOR_Mouvement.updateExecute(Sender: TObject);
    begin
    With SQLt.Miseajour do
    begin
      Close;
      SQL.CLear;
      SQL.Add('UPDATE articles SET Stock_actuel = Stock_depart + Stock_Mouvement FROM articles INNER JOIN (SELECT articleID, Sum(Qt_Entr_Mouv)-Sum(Qt_Sorti_Mouv) AS Stock_Mouvement FROM Mouvement');
      SQL.Add('GROUP BY articleID) Mouvement ON articles.articleID = Mouvement.articleID');
      SQL.Add('WHERE articles.articleID = ED05');
    end;
    end;
    et le bouton OK

    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
    procedure TFOR_Mouvement.cxButton1Click(Sender: TObject);
    begin
    if (Length(ED01.Text) = 0) then
      begin
      Application.MessageBox('Saisie le Type du Mouvement.','Information',MB_OK or MB_ICONINFORMATION);
      ED01.SetFocus;
      end
       else
        begin
         if (Length(ED02.Text) = 0) then
          begin
           Application.MessageBox('Saisie le N ° Bon.','Information',MB_OK or MB_ICONINFORMATION);
           ED02.SetFocus;
          end
           else
            begin
             if (Length(ED03.Text) = 0) then
              begin
               Application.MessageBox('Saisie la  Date du Bon.','Information',MB_OK or MB_ICONINFORMATION);
               ED03.SetFocus;
              end;
                   Miseajour.Execute;
                   update.execute
                    Close;
                  end;
                end;
     
      end;
    actuellement j'utilise la base de donnée access ! par la suite elle sera sous SQL server !

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par trksoft Voir le message
    Actions liste
    la MAJ


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TFOR_Mouvement.updateExecute(Sender: TObject);
    begin
    With SQLt.Miseajour do
    begin
      Close;
      SQL.CLear;
      SQL.Add('UPDATE articles SET Stock_actuel = Stock_depart + Stock_Mouvement FROM articles INNER JOIN (SELECT articleID, Sum(Qt_Entr_Mouv)-Sum(Qt_Sorti_Mouv) AS Stock_Mouvement FROM Mouvement');
      SQL.Add('GROUP BY articleID) Mouvement ON articles.articleID = Mouvement.articleID');
      SQL.Add('WHERE articles.articleID = ED05');
    end;
    end;
    Il ne manquerais pas un ExecSQL ?

    sinon des paramètres appelés Pxx, c'est pas terrible quand même il serait mieux d'avoir des noms de paramètres parlant (pour toi qui n'aura pas touche au code pendant un moment et pour ceux qui le reprendront)
    Même remarque pour les EDxx...
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  11. #11
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Je ne connaissais pas, cela semble à du SQL serveur non (le @ dans la variable ?)
    Oui, c'est la syntaxe de SQL Server pour faire un UPDATE à partir de données provenant d'autres tables.

    Sous Oracle la syntaxe est différente. Avec les autres SGBD je ne connais pas leur syntaxe.
    Le titre de la discussion étant "... sous SQL Server", je n'avais pas cru bon de le préciser.

    PS: Le @ dans le nom du paramètre c'est effectivement l'habitude en SQL Server, mais en réalité ça dépend de l'API et des composants d'accès à la base de données. Les composants Delphi de la VCL ont l'habitude d'utiliser :nomParam, en ADO et OLEDB c'est simplement "?" à la place du paramètre (ce sont les composants Delphi (notamment dbGO) qui font la traduction depuis :nomParam)

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 0
    Points
    0
    Par défaut requete sous Access
    voici ma requête qui marche très bien sur Access mais sur Delphi !!! Problème de syntaxe !!! Merci Franck et Rayek pour votre participations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE Article SET Article.Stock_actuel = Stock_depart+(DSum("Qt_Entr_Mouv","Mouvement","ArticleID=ArticleID")-DSum("Qt_Sorti_Mouv","Mouvement","ArticleID=ArticleID"))
    WHERE Article.ArticleID=ED5;

  13. #13
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Bonjour,

    Si je peux me permettre d'ajouter mon grain de sel dans cette affaire. Il est tout aussi judicieux voire plus simple de régler ton problème de mise à jour des quantités dans la table article en ne passant pas par Delphi mais tout simplement en utilisant un déclancheur dans SQL-serveur sur la table des mouvements.

    Je m'explique un déclancheur ou un trigger est une procédure en transac-SQL qui te permettra de recalculer automatiquement la valeur du stock pour un article dont un mouvement vient d'être soit ajouté, modifié ou supprimé.

    L'avantage d'une telle solution réside déjà dans le fait de simplifer ton code Delphi car cette partie est prise en charge par SQL-Serveur.
    Par ailleurs, si tu fait des modifications directement dans ta table des mouvements en passant par "Management Studio", les valeurs de ta table article seront encore recalculées.

    Cela offre encore la possibilité de ne pas devoir gérer de nouveau les procédures de recalcul sous delphi si tu réalises un autre applicatif qui utilise les tables "mouvements" et "articles".

    Cela constitue une alternative à ne pas négliger.

    Cordialement
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 0
    Points
    0
    Par défaut merci pour les conseilles !
    Citation Envoyé par Pascal Jankowski Voir le message
    Bonjour,

    Si je peux me permettre d'ajouter mon grain de sel dans cette affaire. Il est tout aussi judicieux voire plus simple de régler ton problème de mise à jour des quantités dans la table article en ne passant pas par Delphi mais tout simplement en utilisant un déclancheur dans SQL-serveur sur la table des mouvements.

    Je m'explique un déclancheur ou un trigger est une procédure en transac-SQL qui te permettra de recalculer automatiquement la valeur du stock pour un article dont un mouvement vient d'être soit ajouté, modifié ou supprimé.

    L'avantage d'une telle solution réside déjà dans le fait de simplifer ton code Delphi car cette partie est prise en charge par SQL-Serveur.
    Par ailleurs, si tu fait des modifications directement dans ta table des mouvements en passant par "Management Studio", les valeurs de ta table article seront encore recalculées.

    Cela offre encore la possibilité de ne pas devoir gérer de nouveau les procédures de recalcul sous delphi si tu réalises un autre applicatif qui utilise les tables "mouvements" et "articles".

    Cela constitue une alternative à ne pas négliger.

    Cordialement

Discussions similaires

  1. Equivalent de rownum sous SQL server
    Par Isildur dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/07/2009, 15h48
  2. Pb avec DROP COLUMN sous SQL Server 2000
    Par debailleul dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/03/2004, 14h38
  3. Heure sous SQL SERVER
    Par kisscoolfresh dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 30/01/2004, 17h43
  4. Convertir un type de donnée sous SQL Server
    Par Fleep dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/08/2003, 15h15
  5. MAJ d'une table sous SQL Server par insertion
    Par keish dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/06/2003, 16h23

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