Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/05/2006, 21h51   #1
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
Membre actif
 
Inscription : octobre 2004
Messages : 141
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2004
Messages : 141
Points : 152
Points : 152
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
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
Membre régulier
 
Inscription : mars 2002
Messages : 172
Détails du profil
Informations personnelles :
Âge : 71
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
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
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
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
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
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
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
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
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
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
Expert Confirmé

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

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

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
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
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
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
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
Invité de passage
 
koffi jean parfait Etchien
Inscription : janvier 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : koffi jean parfait Etchien

Informations forums :
Inscription : janvier 2010
Messages : 7
Points : 1
Points : 1
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 Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h34.


 
 
 
 
Partenaires

Hébergement Web