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

InterBase Discussion :

Mise à jour des enregistrements sur Interbase avec Delphi


Sujet :

InterBase

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Points : 22
    Points
    22
    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 habitué
    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 : 184
    Points
    184
    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
    Au royaume des aveugles, les borgnes sont rois.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Points : 22
    Points
    22
    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 : 83
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Points : 101
    Points
    101
    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
    Amicalement
    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 : 134
    Points
    134
    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.
    On fait tous les X choses nécessaires pour avoir comme résultats un Y, finalement c'est Z qu'on obtiens : c'est le destin.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 674
    Points : 925
    Points
    925
    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
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Points : 22
    Points
    22
    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 : 134
    Points
    134
    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;
    On fait tous les X choses nécessaires pour avoir comme résultats un Y, finalement c'est Z qu'on obtiens : c'est le destin.

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Points : 22
    Points
    22
    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é
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 119
    Points : 125
    Points
    125
    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 : 32
    Points
    32
    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
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Points : 22
    Points
    22
    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
    Membre expert

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

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    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
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  14. #14
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Points : 22
    Points
    22
    Par défaut
    merci, je vais essayer pour voir, mais si vous avez une solution avec les ibtable ca serait magnefique.

  15. #15
    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
    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
    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 : 43
    Points
    43
    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, 23h06
  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, 17h06
  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, 10h47
  4. Réponses: 3
    Dernier message: 21/08/2006, 11h03
  5. Réponses: 4
    Dernier message: 03/05/2006, 17h26

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