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 :

Pointer sur le bon enregistrement Firebird et delphi2007


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut Pointer sur le bon enregistrement Firebird et delphi2007
    bonjour
    depuis ce matin je rame et j'arrive pas à trouve une solution , je suis bloqué
    bon voila, je voudrai transfere des données d'une base de données à un autre
    j'ai un probleme avec une table (produit) y a 2 cas:
    le 1er: quand le produit n'existe pas dans la bdd il l'ajoute , la y a pas de probleme
    2eme cas: quand le produit existe deja faudrai faire une MAJ de certain champs ( sur tout stock), mais la j'arrive pas à pointer sur le bon produit, il reste toujour sur le 1er enregistrement
    voila mon 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
    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
    //===================produit================
     with Datamodule3.DETAILBLTRANSFERT_t do
         begin
           Datamodule3.DETAILBLTRANSFERT_t.first ;
            while not Datamodule3.DETAILBLTRANSFERT_t.EOF  do
            begin
            datamodule4.code_barre_t.open;
            datamodule4.Produit_T.open;
            Datamodule3.DETAILBLTRANSFERT_t.Open;
            datamodule4.code_barre_t.open;
             //***********  table produit   ***********
              datamodule4.localise.Close;
              datamodule4.localise.SQL.Text:= 'select * from code_barre where code_barre =:mm';
              datamodule4.localise.Params[0].Value:= datamodule3.DETAILBLTRANSFERT_tCODEBARRE.Value;
              datamodule4.localise.Open;
     
              if datamodule4.localise.RecordCount=1 then
               begin
               showmessage('produit 1');
               datamodule4.Produit_T.edit;
               datamodule4.Produit_TQUANTITESTOCK.Value:= datamodule4.Produit_TQUANTITESTOCK.Value + datamodule3.DETAILBLTRANSFERT_tQUANTITE.value;
               datamodule4.Produit_TPRIXACHAT.value:= datamodule3.DETAILBLTRANSFERT_tPRIXVENTE.Value;
               datamodule4.Produit_TPRIXVENTE.value:= datamodule3.DETAILBLTRANSFERT_tPRIXVENTE.Value;
               datamodule4.Produit_TPRIXVENTEDETAIL.value:= datamodule3.DETAILBLTRANSFERT_tPRIXVENTE.Value;
               datamodule4.Produit_TQUANTITESTOCK.value:= datamodule3.DETAILBLTRANSFERT_tQUANTITE.Value + datamodule4.Produit_TQUANTITESTOCK.value;
               datamodule4.Produit_T.Post;
               datamodule4.Produit_T.close;
               datamodule4.IBTransaction2.Commit;
               datamodule4.Produit_T.open;
                end
                else
                  begin
                   showmessage('produit a ajouter');
                   datamodule4.Produit_T.open;
                   datamodule4.Produit_T.Append;
                   datamodule4.Produit_TNOMCOMMERCIAL.value:= datamodule3.DETAILBLTRANSFERT_tNOMCOMMERCIAL.Value;
                   datamodule4.Produit_TPRIXVENTE.value:= datamodule3.DETAILBLTRANSFERT_tPRIXVENTE.Value;
                   datamodule4.Produit_TPRIXACHAT.value:= datamodule3.DETAILBLTRANSFERT_tPRIXVENTE.Value;
                   datamodule4.Produit_TPRIXVENTEDETAIL.value:= datamodule3.DETAILBLTRANSFERT_tPRIXVENTE.Value;
                   datamodule4.Produit_TQUANTITESTOCK.value:= datamodule3.DETAILBLTRANSFERT_tQUANTITE.Value;
                  datamodule4.Produit_T.Post;
                  datamodule4.IBTransaction2.Commit;
           //==============ajout CodeBarre===================
                  datamodule4.Produit_T.open;
                  datamodule4.code_barre_t.open;
                  datamodule4.code_barre_t.Append;
                  datamodule4.code_barre_tCODE_BARRE.value:= datamodule3.DETAILBLTRANSFERT_tCODEBARRE.Value;
                  datamodule4.code_barre_tCODE_PRODUIT.Value:=  datamodule4.Produit_TCODEPRODUIT.Value;
                  showmessage('code prod '+ datamodule4.code_barre_tCODE_PRODUIT.AsString);
                  datamodule4.code_barre_t.Post;
        //=====================================
     
                   end;
     
              Datamodule3.DETAILBLTRANSFERT_t.next;
            end;
       end;
       showmessage('c bon produit');
    svp aidez moi c'est vraiment urgent

  2. #2
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Et ce que tu peux dir plus à propos de la base de donnée utilisé.
    Sinon je pencherais pour un système comme suit
    - un query qui extrait les informations de la table source
    - un query qui regarde si un enregistrement existe en fonction d'une clé dans la table cible.
    - un query qui fait l'update ou l'insert dans la table cible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    While Not QrySource.Eof do
    begin
      QryCheckExistance.ParamByName('LeCritere').AsString := QrySource.FieldByName('LaRef').AsString;
      QryCheckExistence.Open;
      Case QryCheckExistence.FieldByName('Exist').AsBoolean of
          True  : //Tu Update la ligne de  table Cible
          False : //Tu Insere la ligne de source vers CIble
      end;
      QryCheckExistence.Close;
      QrySource.Next; 
    end;
    Voilà ce que je suis en tran de faire actuellement sauf que comme j'utilise FireBird, c'est une procedure stocké qui se charge de verifier si la ligne existe dans la table cible et de faire directement l'insert ou update de la table cible. Donc du cous, je parcours juste Source et execute ma procedure stocké.

    A+
    On progresse .....

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    la base de donnée d'origine y a 3 tables, mais celle qui m'interesse le plus c'est produit ( codeproduit, code_barre, nomcommercial, qtestock)
    la base de donnée distination contien : une table produit(codeproduit,qtestock..), et table code_barre( code_barre, code_produit)
    et pour voir si le produit existe ou pas je fait le teste sur le code_barre.code_barre
    c'est ce que je fais avec la requete localise

  4. #4
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Alors
    Pourquoi ne pas creer une PS vu que ta base est sous FB. Tiens un truc vite fait sous Firebird
    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
     
    CREATE PROCEDURE TPRODUIT_IMPORT(
        PCODEPRODUIT VARCHAR(25),
        PCODEBARRE VARCHAR(25), 
        PNOMCOMMERCIAL VARCHAR(100),
        PQTESTOCK INTEGER,
        PPRIXACHAT NUMERIC(14,2),
        PPRIXVENTE NUMERIC(14,2),
        PPRIXVENTEDETAIL NUMERIC(14,2))
    AS
    BEGIN
      IF (EXISTS(SELECT CODE_BARRE FROM CODE_BARRE WHERE (UPPER(CODE_BARRE) = UPPER(:PCODEBARRE)))) THEN
      BEGIN
        UPDATE PRODUIT 
        SET QTESTOCK = QTESTOCK + :PQTESTOCK,
            PRIXACHAT = :PPRIXACHAT,
            PRIXVENTE = :PPRIXVENTE,
            PRIXVENTEDETAIL = :PPRIXVENTEDETAIL
        WHERE (UPPER(CODE_BARRE) = UPPER(:PCODEBARRE));
      END
      ELSE
      BEGIN
        INSERT INTO  CODE_BARRE (
            CODE_BARRE,
            CODE_PRODUIT)
        VALUES (
            UPPER(:PCODEBARRE), 
            :PCODEPRODUIT);
     
        INSERT INTO PRODUIT (
            CODE_BARRE, 
            CODEPRODUIT,        
            NOMCOMMERCIAL,
            QTESTOCK,
            PRIXACHAT,
            PRIXVENTE,
            PRIXVENTEDETAIL)
        VALUES (
            UPPER(:PCODEBARRE), 
            :PCODEPRODUIT,        
            :PNOMCOMMERCIAL,
            :PQTESTOCK,
            :PPRIXACHAT,
            :PPRIXVENTE,
            :PPRIXVENTEDETAIL);
      END    
    END
    Maintenant à l'utilisation, tu aura besoin d'un compo IbStoredproc ou equivalent et d'une Query ou ta table DETAILBLTRANSFERT_t
    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
     
    with Datamodule3 do
    Try
        //Start Transaction
        DETAILBLTRANSFERT_t.Open;
        DETAILBLTRANSFERT_t.First;
        IB_PROC.StoredProcName := 'TPRODUIT_IMPORT';//Notre composant IbStoredProc
        IB_PROC.Transaction.StartTransaction;        
        While Not DETAILBLTRANSFERT_t.Eof do
        begin
            IB_PROC.Close;
            IB_PROC.ParamByName('PCODEPRODUIT').AsString           := DETAILBLTRANSFERT_tCODEPRODUIT.Value;
            IB_PROC.ParamByName('PCODEBARRE').AsString             := DETAILBLTRANSFERT_tCODEBARRE.Value;
            IB_PROC.ParamByName('PNOMCOMMERCIAL').AsString         := DETAILBLTRANSFERT_tNOMCOMMERCIAL.Value;
            IB_PROC.ParamByName('PQTESTOCK').AsInteger             := DETAILBLTRANSFERT_tQUANTITE.value;
            IB_PROC.ParamByName('PPRIXACHAT').AsCurrency         := DETAILBLTRANSFERT_tPRIXVENTE.Value;
            IB_PROC.ParamByName('PPRIXVENTE').AsCurrency         := DETAILBLTRANSFERT_tPRIXVENTE.Value;
            IB_PROC.ParamByName('PPRIXVENTEDETAIL').AsCurrency    := DETAILBLTRANSFERT_tPRIXVENTE.Value;            
            IB_PROC.ExecProc;
            DETAILBLTRANSFERT_t.Next;
        end;
        IB_PROC.Transaction.Commit;
        IB_PROC.Close;
    Except
        IB_PROC.Transaction.RollBack; //Erreur;
    end;
    Regarde si j'ai raté un truc sinon adapte le code.

    A+
    On progresse .....

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    voila ce que j'ai fait pour résoudre mon problème, merci pour votre aide
    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
    73
    74
    75
    76
    77
     if (Datamodule3.BLTRANSFERT_tVERIF.Value <> 1) then
        begin
          datamodule4.BonEntre_t.Active:= true;
          datamodule4.BonEntre_t.Append;
          datamodule4.BonEntre_tDATEBE.Value:= datamodule3.BLTRANSFERT_tDATEBL.Value;
          datamodule4.BonEntre_tNUMFOURNISSEUR.Value:= 1;
          datamodule4.BonEntre_tOBSERVATION.asstring:= 'livraison de la direction';
          datamodule4.BonEntre_t.Post;
    //=====================================
    //===================produit================
     with Datamodule3.DETAILBLTRANSFERT_t do
         begin
           Datamodule3.DETAILBLTRANSFERT_t.first ;
            while not Datamodule3.DETAILBLTRANSFERT_t.EOF  do
              begin
            datamodule4.code_barre_t.open;
            Datamodule3.DETAILBLTRANSFERT_t.Open;
            datamodule4.code_barre_t.open;
             //***********  table produit   ***********
              datamodule4.codebarre_qr.Close;
              datamodule4.codebarre_qr.Params[0].Value:= datamodule3.DETAILBLTRANSFERT_tCODEBARRE.Value;
              datamodule4.codebarre_qr.Open;
              if datamodule4.codebarre_qr.RecordCount=1 then
                 begin
               valcodeproduit := datamodule4.codebarre_qrCODE_PRODUIT.Value;
               datamodule4.localise.SQL.clear;
               datamodule4.localise.SQL.text := 'select * from produit where codeproduit = :cdeprod';
               datamodule4.localise.Params[0].Value:= valcodeproduit;
               datamodule4.localise.Open;
                if datamodule4.localise.RecordCount=1 then
                   begin
     
               datamodule4.Produit_T.edit;
               datamodule4.Produit_TPRIXACHAT.value:= datamodule3.DETAILBLTRANSFERT_tPRIXVENTE.Value;
               datamodule4.Produit_TPRIXVENTE.value:= datamodule3.DETAILBLTRANSFERT_tPRIXVENTE.Value;
               datamodule4.Produit_TPRIXVENTEDETAIL.value:= datamodule3.DETAILBLTRANSFERT_tPRIXVENTE.Value;
              // datamodule4.Produit_TREF.value:= datamodule3.DETAILBLTRANSFERT_tREF.Value;
                     if datamodule4.Produit_T.Locate('codeproduit',ValCodeProduit,[loPartialkey]) then
                      begin
                       datamodule4.Produit_T.edit;
                       datamodule4.Produit_TQUANTITESTOCK.Value:=   datamodule4.Produit_TQUANTITESTOCK.Value + datamodule3.DETAILBLTRANSFERT_tQUANTITE.Value
                      end;
               datamodule4.Produit_T.Post;
               datamodule4.Produit_T.close;
               datamodule4.IBTransaction2.Commit;
               datamodule4.Produit_T.open;
     
                   end;
                end
                else
                  begin
                   datamodule4.Produit_T.open;
                   datamodule4.Produit_T.Append;
                   datamodule4.Produit_TNOMCOMMERCIAL.value:= datamodule3.DETAILBLTRANSFERT_tNOMCOMMERCIAL.Value;
                   datamodule4.Produit_TPRIXVENTE.value:= datamodule3.DETAILBLTRANSFERT_tPRIXVENTE.Value;
                   datamodule4.Produit_TPRIXACHAT.value:= datamodule3.DETAILBLTRANSFERT_tPRIXVENTE.Value;
                   datamodule4.Produit_TPRIXVENTEDETAIL.value:= datamodule3.DETAILBLTRANSFERT_tPRIXVENTE.Value;
                   datamodule4.Produit_TREF.value:= datamodule3.DETAILBLTRANSFERT_tREF.Value;
                   datamodule4.Produit_TQUANTITESTOCK.value:= datamodule3.DETAILBLTRANSFERT_tQUANTITE.Value;
                   datamodule4.Produit_T.Post;
                   position:=datamodule4.Produit_T.GetBookmark;
                   datamodule4.IBTransaction2.Commit;
           //==============ajout CodeBarre===================
                  datamodule4.Produit_T.open;
                  datamodule4.Produit_T.GotoBookmark(position);
                  datamodule4.code_barre_t.open;
                  datamodule4.code_barre_t.Append;
                  datamodule4.code_barre_tCODE_BARRE.value:= datamodule3.DETAILBLTRANSFERT_tCODEBARRE.Value;
                  datamodule4.code_barre_tCODE_PRODUIT.Value:=  datamodule4.Produit_TCODEPRODUIT.Value;
                  datamodule4.code_barre_t.Post;
        //=================Fin CB ====================
                  end;
     
              Datamodule3.DETAILBLTRANSFERT_t.next;
            end;
       end;
         showmessage('transfer du produit est fini');

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Se positionner sur le bon enregistrement
    Par vandrie dans le forum IHM
    Réponses: 9
    Dernier message: 01/10/2014, 11h22
  2. [Débutant] Pointer sur le bon process Excel.Exe
    Par Jean-Philippe André dans le forum C#
    Réponses: 1
    Dernier message: 30/07/2014, 14h25
  3. Réponses: 1
    Dernier message: 14/09/2007, 18h04
  4. Pointer sur le bon Objet
    Par Cpt Anderson dans le forum Delphi
    Réponses: 4
    Dernier message: 12/02/2007, 10h36
  5. Word<->Access 2002 : pointer sur des enregistrements
    Par carsinus dans le forum Access
    Réponses: 1
    Dernier message: 06/10/2006, 20h10

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