p
u
b
l
i
c
i
t
é
publicité
  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 : 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
     
    //*******************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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : octobre 2004
    Messages : 147
    Points : 164
    Points
    164

    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 : 74
    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 : 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
    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 160
    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 160
    Points : 551
    Points
    551

    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 : 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
    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 : 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
    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 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

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

    Informations forums :
    Inscription : mai 2002
    Messages : 2 319
    Points : 3 569
    Points
    3 569

    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
    Nouveau Membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2010
    Messages
    24
    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 : 24
    Points : 30
    Points
    30
    Billets dans le blog
    2

    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

Discussions similaires

  1. Mise à jour des articles sur un site avec Java (JEE)
    Par zikyoubi dans le forum Développement Web en Java
    Réponses: 13
    Dernier message: 25/09/2013, 22h06
  2. Problème de mise à jour des champs Auto incrémentés avec VB6.
    Par NHenry dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/05/2007, 16h06
  3. Faciliter la mise à jour des données sur mon site
    Par Pau dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 23/01/2007, 09h47
  4. Réponses: 3
    Dernier message: 21/08/2006, 10h03
  5. Réponses: 4
    Dernier message: 03/05/2006, 16h26

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