Précédent   Forum du club des développeurs et IT Pro > Bases de données > Autres SGBD > InterBase
InterBase Forum d'entraide sur le SGBD InterBase de Codegear. Avant de poster -> F.A.Q Interbase, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/05/2006, 21h51   #1
LOUNAS
Invité de passage
 
Inscription : 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
LOUNAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2006, 22h13   #2
Mirmillon
Membre actif
 
Inscription : 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 : 155
Points : 155
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
Mirmillon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2006, 22h58   #3
LOUNAS
Invité de passage
 
Inscription : avril 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 6
Points : 0
Points : 0
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.
LOUNAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2006, 08h31   #4
Lucien
Membre régulier
 
Inscription : mars 2002
Messages : 172
Détails du profil
Informations personnelles :
Âge : 72
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : mars 2002
Messages : 172
Points : 79
Points : 79
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
Lucien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2006, 12h10   #5
maamar1979
Membre régulier
 
Avatar de maamar1979
 
Inscription : mai 2006
Messages : 174
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 174
Points : 96
Points : 96
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.
maamar1979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2006, 12h13   #6
devalender
Inscrit
 
Inscription : mai 2004
Messages : 832
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 832
Points : 319
Points : 319
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
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2006, 21h24   #7
LOUNAS
Invité de passage
 
Inscription : avril 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 6
Points : 0
Points : 0
rebonjour, je ne comprend pas bien le sens de fermer et d'ouvrir, ibquery.active:=false, en suite := true?
merci
LOUNAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2006, 12h03   #8
maamar1979
Membre régulier
 
Avatar de maamar1979
 
Inscription : mai 2006
Messages : 174
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 174
Points : 96
Points : 96
ç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;
maamar1979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2006, 22h03   #9
LOUNAS
Invité de passage
 
Inscription : avril 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 6
Points : 0
Points : 0
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
LOUNAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2006, 11h54   #10
mika
Membre habitué
 
Inscription : mars 2002
Messages : 119
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 119
Points : 100
Points : 100
Est ce que ton IBQUERY1 est relié à la même transaction
__________________
Mika
www.usargancy.net
mika est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2006, 14h31   #11
tekilx
Nouveau Membre du Club
 
Inscription : juillet 2005
Messages : 35
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 35
Points : 25
Points : 25
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
tekilx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2006, 16h52   #12
LOUNAS
Invité de passage
 
Inscription : avril 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 6
Points : 0
Points : 0
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.
LOUNAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2006, 18h24   #13
makowski
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 259
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 50
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 259
Points : 3 580
Points : 3 580
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
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2006, 22h16   #14
LOUNAS
Invité de passage
 
Inscription : avril 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 6
Points : 0
Points : 0
merci, je vais essayer pour voir, mais si vous avez une solution avec les ibtable ca serait magnefique.
LOUNAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2006, 15h51   #15
Andry
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 111
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 111
Points : 954
Points : 954
Envoyer un message via MSN à Andry
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 .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 17h07   #16
jeanparfait
Invité régulier
 
Homme koffi jean parfait Etchien
Développeur informatique
Inscription : janvier 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme koffi jean parfait Etchien
Localisation : Côte d'Ivoire

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

Informations forums :
Inscription : janvier 2010
Messages : 15
Points : 5
Points : 5
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
jeanparfait est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h48.


 
 
 
 
Partenaires

Hébergement Web