+ Répondre à la discussion
Affichage des résultats 1 à 16 sur 16
  1. #1
    Invité de passage
    Inscrit en
    avril 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 6
    Points : 0
    Points
    0

    Par défaut Mise à jour des enregistrements sur Interbase avec Delphi

    bonjour, je suis nouveau en programmation, voila mon probleme et que j'ai une base de données interbase qui est composée de cinq tables, voila lorsque j'ajoute des enregistrements, je suis oblige de fermer le programme et de le relancer pour pouvoir imprimer les derniers enregistrements,
    car si j'imprime directement, les enregistrements ajoutes n'apparaissent pas.

    merci pour votre aide.
    Rq:
    j'utilise: ibdatabase, ibtransaction, ibtable.
    j déjà utilise ibtable1.refresh: ca ne marche pas;
    j utilise ibdatabase.connected:=false puis ibdatabase.connected:=true: ca ne marche pas
    j utilise ibtable1.open..........ibtable1.refresh ibtable1.close : non plus
    je ne comprend plus rien

    voici mon code :

    Code :
    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
     
    //*******************FAMILLES********************************** 
    //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    IF FAMILLES.Visible THEN 
    BEGIN 
    IBTABLE1.First; 
    for i:=1 to ibtable1.RECORDCOUNT DO 
    BEGIN 
    IF (ibtable1.FieldValues['CODE']=EDIT1.TEXT) AND 
    (ibtable1.FieldValues['FAMILLE']=EDIT2.TEXT) THEN 
    BEGIN 
    SHOWMESSAGE('LA FAMILLE EXISTE DEJA'); 
    FAMILLES.Visible:=FALSE; 
    EDIT1.Text:=''; 
    EDIT2.Text:=''; 
    AJOUTER.Enabled:=FALSE; 
    ANNULER.Enabled:=FALSE; 
    EXIT; 
    END; 
    ibtable1.Next; 
    END; 
    ibtable1.Last; 
    ibtable1.APPEND; 
    ibtable1.FieldValues['NFM']:=ibtable1.RECORDCOUNT+1; 
    ibtable1.FieldValues['CODE']:=EDIT1.TEXT; 
    ibtable1.FieldValues['FAMILLE']:=EDIT2.TEXT; 
    ibtable1.POST; 
    FAMILLES.Visible:=FALSE; 
    EDIT1.Text:=''; 
    EDIT2.Text:=''; 
    END;
    pour le bouton impression:

    Code :
    1
    2
    3
    4
    5
    6
    IBTABLE1.Active:=TRUE; 
    ETAT_ART.IBQUERY1.Active:=FALSE; 
    ETAT_ART.IBQUERY1.SQL.Clear; 
    ETAT_ART.IBQUERY1.SQL.Text:='select * from FAMILLES'; 
    ETAT_ART.IBQUERY1.Active:=TRUE; 
    ETAT_ART.QR1.Preview;
    merci pour vos reponses

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : octobre 2004
    Messages : 146
    Points : 162
    Points
    162

    Par défaut

    Bonjour
    A mon avis, c' est un problème de transaction car quand tu fermes ta base la transaction est validée (Commit en anglais) . Essaie de changer la propriètèe par défaut du composant transaction DéfautAction à TACommitRetaining .

    Mirmillon

  3. #3
    Invité de passage
    Inscrit en
    avril 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 6
    Points : 0
    Points
    0

    Par défaut

    merci pour la reponse, j'ai deja essayé cette solution, ça ne donne rien.
    une autre remarque, j'ai mis un dbgrid et la je vois mes enregistrement, ils sont bien la? je ne comprends rien.
    si quelqu'un a une autre idee, elle est la bien venue.
    merci.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : mars 2002
    Messages : 172
    Points : 75
    Points
    75

    Par défaut

    Je n'ai rien vérifié mais j'ai rencontré ce pb...
    Regarde si IBtable que tu utilises, contient un événement BeforePost
    dans lequel tu lancerais ibtable.applyUdapte; et dans AfterUpdate, la fermeture et l'ouverture de la table (qui affiche ce qui est réellement dans la base et non dans la cache).

    Lucien

  5. #5
    Membre habitué Avatar de maamar1979
    Inscrit en
    mai 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : mai 2006
    Messages : 174
    Points : 104
    Points
    104

    Par défaut

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    try
    if not IBTransaction1.InTransaction then
    IBTransaction1.StartTransaction;
    
    ibtable1.Last; 
    ibtable1.APPEND; 
    ibtable1.FieldValues['NFM']:=ibtable1.RECORDCOUNT+1; 
    ibtable1.FieldValues['CODE']:=EDIT1.TEXT; 
    ibtable1.FieldValues['FAMILLE']:=EDIT2.TEXT; 
    ibtable1.POST;
    
    IBTransaction1.CommitRetaining
    
    except
    IBTransaction1.Rollback
    end;
    il faut valider la transaction.

  6. #6
    Inscrit
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2004
    Messages
    1 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2004
    Messages : 1 101
    Points : 478
    Points
    478

    Par défaut

    regarde surtout du coté de before post de l'outil ibquery, en effet il faut fermer rouvrir ibequry à la fin du post.
    mais normalement aprés avec l'option commitRetaining du composant database tout devrait marcher

  7. #7
    Invité de passage
    Inscrit en
    avril 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 6
    Points : 0
    Points
    0

    Par défaut

    rebonjour, je ne comprend pas bien le sens de fermer et d'ouvrir, ibquery.active:=false, en suite := true?
    merci

  8. #8
    Membre habitué Avatar de maamar1979
    Inscrit en
    mai 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : mai 2006
    Messages : 174
    Points : 104
    Points
    104

    Par défaut

    ça n'a rien à voir avec la propriété 'Active' :

    tu met ton code comme ci dessous oki :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    try
    if not IBTransaction1.InTransaction then
    IBTransaction1.StartTransaction;
    
    ibtable1.Last; 
    ibtable1.APPEND; 
    ibtable1.FieldValues['NFM']:=ibtable1.RECORDCOUNT+1; 
    ibtable1.FieldValues['CODE']:=EDIT1.TEXT; 
    ibtable1.FieldValues['FAMILLE']:=EDIT2.TEXT; 
    ibtable1.POST;
    
    IBTransaction1.CommitRetaining
    
    except
    IBTransaction1.Rollback
    end;

  9. #9
    Invité de passage
    Inscrit en
    avril 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 6
    Points : 0
    Points
    0

    Par défaut

    j'ai testé toutes les suggestions, aucune ne marche, si ca marche chez vous, peut etre qu'il y'a un probleme ailleurs? cela fait un mois que je bidouille dans ce programme sans que je trouve de solution. toutes autres suggestion est la bien venue.merci

  10. #10
    Membre habitué
    Inscrit en
    mars 2002
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 119
    Points : 109
    Points
    109

    Par défaut

    Est ce que ton IBQUERY1 est relié à la même transaction
    Mika
    www.usargancy.net

  11. #11
    Nouveau Membre du Club
    Inscrit en
    juillet 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 35
    Points : 28
    Points
    28

    Par défaut

    Bonjour

    Utilises-tu le meme composant IBQuery pour imprimer tes enregistrements ?

    Si tu utilises un autre composant IBQuery pour imprimer, ferme le, puis ré-ouvre le immédiatement avant d'imprimer.

    En effet, si le compo IBQuery que tu utilises pour l'impression est actif alors que tu insère des enregistrements via un autre compo, les enregistrements ajoutés ne seront visibles que lorsque le composant sera réouvert ...

    tekilx

  12. #12
    Invité de passage
    Inscrit en
    avril 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 6
    Points : 0
    Points
    0

    Par défaut

    rebonjour, je suis désole mais je viens d'essayer toutes les solutions, ça ne donne rien, peut etre que je suis vraiment nul, bon la je vais essayer de n'utiliser qu'un seul IBquery, ibtransaction, ibdatabase..., je vais voir ce que ça va donner. si vous avez autres chose, je suis toujours a l'ecoute.
    alors la mon code devient:
    j'ai deux formes: une principale, et l'autre etat_art, tous mes composants sont sur la forme principale:

    Code :
    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
    procedure TPRINCIPALLE.AJOUTERClick(Sender: TObject);
    VAR
    I:INTEGER;
    begin
    //µµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ
    //*******************AJOUTER UNE NOUVELLE  FAMILLE*********
    //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    IF FAMILLES.Visible THEN
    BEGIN
    IBTABLE1.First;
    for i:=1 to ibtable1.RECORDCOUNT DO
    BEGIN
     IF (ibtable1.FieldValues['CODE']=EDIT1.TEXT) AND
        (ibtable1.FieldValues['FAMILLE']=EDIT2.TEXT) THEN
         BEGIN
         SHOWMESSAGE('LA FAMILLE EXISTE DEJA');
         FAMILLES.Visible:=FALSE;
         EDIT1.Text:='';
         EDIT2.Text:='';
         AJOUTER.Enabled:=FALSE;
         ANNULER.Enabled:=FALSE;
         EXIT;
         END;
        ibtable1.Next;
    END;
    try
    if not IBTransaction1.InTransaction then
    IBTransaction1.StartTransaction;
    ibtable1.Last;
    ibtable1.APPEND;
    ibtable1.FieldValues['NFM']:=ibtable1.RECORDCOUNT+1;
    ibtable1.FieldValues['CODE']:=EDIT1.TEXT;
    ibtable1.FieldValues['FAMILLE']:=EDIT2.TEXT;
    ibtable1.POST;
    IBTransaction1.CommitRetaining
    except
    IBTransaction1.Rollback
    end;
     
    FAMILLES.Visible:=FALSE;
    EDIT1.Text:='';
    EDIT2.Text:='';
    END;
     
    //******** pour imprimer ou visualiser l'etat de la table famille********
    //******************************************************
     
    procedure TPRINCIPALLE.ETATClick(Sender: TObject);
    begin
    ibdatabase1.Connected:=false;
    ibdatabase1.Connected:=true;
    ibtransaction1.Active:= false;
    ibtransaction1.Active:= true;
    IBTABLE1.Active:=false;
    IBTABLE1.Active:=true;
    principalle.IBquery1.Active:=false;
    principalle.IBquery1.Active:=true;
    principalle.IBQUERY1.Active:=FALSE;
    principalle.IBQUERY1.SQL.Clear;
    principalle.IBQUERY1.SQL.Text:='select *  from FAMILLES';
    principalle.IBQUERY1.Active:=TRUE;
    etat_art.QR1.Preview;
    end;
    et je n'arrive toujours pas a visualiser les nouveaux enregistrements avant de fermer et rouvrir l'application.


    merci pour toute aide.

  13. #13
    Expert Confirmé

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    mai 2002
    Messages
    2 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 2 317
    Points : 3 566
    Points
    3 566

    Par défaut

    la première chose à faire serait de ne pas tavailler avec des IBTable
    on est pas avec Paradox
    travailler avec des Query
    faire les insert et update en sql
    et bien comprendre les notions de transactions

  14. #14
    Invité de passage
    Inscrit en
    avril 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 6
    Points : 0
    Points
    0

    Par défaut

    merci, je vais essayer pour voir, mais si vous avez une solution avec les ibtable ca serait magnefique.

  15. #15
    Membre Expert
    Avatar de Andry
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    1 120
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations forums :
    Inscription : juillet 2002
    Messages : 1 120
    Points : 1 008
    Points
    1 008

    Par défaut

    Salut,

    La première chose à faire est de choisir le niveau d'isolation de la transaction.
    Met le en No Wait, Read Commited (Si je ne me trompe pas)
    Ensuite relier les Composant IBX (IBQuery, IbTable, IBDataset, etc)a cette transaction.
    Ne pas oublier de commiter après les operations de rajout, suppression, modification.

    Après ça si tu as encore des problèmes, c'est que c'est ailleur.

    A+
    On progresse .....

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : janvier 2010
    Messages : 23
    Points : 16
    Points
    16

    Par défaut Bonne reponse

    Merci Andry j'avais le même problème et ta solution ma été bénéfique
    j'utilise de inter-base 2009 et delphi 2009

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •