Actualiser une table [Résolu]

ayadi001 42 Messages postés dimanche 12 juin 2011Date d'inscription 19 octobre 2011 Dernière intervention - 13 sept. 2011 à 16:25 - Dernière réponse : cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention
- 3 oct. 2011 à 17:47
Bonjour,
j'ai une application de base de donnée sous Delphi, paradox, lorsque j’insère des nouvelles données, je les trouves pas jusqu’à la fermeture de l'application et l’exécution a nouveau .
comment résoudre ce probleme, afin lorsque au moment d'insertion je le trouve dans la consultation .
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_kroma23 20 Messages postés dimanche 16 juillet 2006Date d'inscription 22 mars 2012 Dernière intervention - 13 sept. 2011 à 16:59
3
Merci
Salut
Essai un refrech pour ta table
Si tu utilise un composant Ttable faite
table1.refresh

Merci cs_kroma23 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cs_kroma23
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 13 sept. 2011 à 18:25
1
Merci
Bonjour,

Les données sont mises en mémoire tampon jusqu'à une action délibérée d'écriture du tampons sur disque ou la fermeture de la table.
Si tu veux forcer l'écriture sur le support physique, appelles la méthode Flush du composant TTable.
Je voudrais aussi te signaler un point méconnu : les conséquences de l'utilisation de l'appel à Application.Terminate. Pour en avoir fait l'expérience, l'application est détruite sans passer par un appel aux méthodes Close des composants TTable et donc...pas de vidage des buffers et...pas d'écriture sur disque. J'ai déjà eu l'occasion de mentionner ce détail sur ce forum plusieurs fois mais ce sont des choses que l'on oublie facilement.

May Delphi be with you

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 20 sept. 2011 à 15:24
0
Merci
Salut DelphiProg,

j' ai testé ta méthode TTable.FlushBuffers qui semble avoir corrigé un problème qui perdure depuis un moment uniquement sous Windows Server 2008:
J' ai une appli "serveur mail" (Appli Delphi 2009 + tables DBase qui importe les mails de plusieurs comptes) qui tourne donc sous Windows Server 2008.
Le problème que j' avais est que lorsque l' appli met à jour ou je crée des enregistrements, ceux-ci n' étaient pas tous le temps visibles immédiatement par les postes de travail malgrè l' utilisation de DbiSaveChanges() et malgrè la fermeture de la table (TTable.Active := false).

Merci!

A+



Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 21 sept. 2011 à 09:18
0
Merci
Salut Mauricio,

Ce problème n'est pas spécifique à Windows Server 2008.
Sinon, utilisais-tu des transactions ? Si oui, quel était le niveau d'isolation de celles-ci ?


May Delphi be with you

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 21 sept. 2011 à 11:10
0
Merci
Salut DelphiProg,

sisi, mon problème est spécifique à Windows Server2008 car la même appli tournant sur une marchine avec XP, Vista ou Win7 ne pose pas de problème.
Je suis sur le mode d' isolation par défaut (Read commited).

Je pense que cela vient du Borland Database Engine qui n' est pas fait pour tourner sur Windows Server mais curieusement, je n' ai pas ce problème sous Vista ou Windows 7.

Pour reproduire le problème, c' est très simple: je fais un programme qui me visualise une table sur réseau via un TDBGrid + TTable + TDatasource.
Je rajoute un bouton qui fait un Refresh sur la table.


Test1: J' ouvre l' appli sur 2 machines qui ne sont pas équipées de Windows Server 2008.
-------------------------------------------------------------------------------------------------------------------
Lorsque je modifie un enregistrement sur la machine "A" et que je sauvegarde, si je clique sur "Refresh" sur la machine "B", je vois les modifications.


Test2: J' ouvre l' appli sur 2 machines : machine "A" équipées de Windows Server 2008 et "B" équipée de Windows XP.
-------------------------------------------------------------------------------------------------------------------
Lorsque je modifie un enregistrement sur la machine A et que je sauvegarde, si je clique sur "Refresh" sur la machine B, je ne vois PAS les modifications.
Maintenant si j' exécute "FlushBuffers" dans le AfterPost de la table, je vois les modifications!


A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 3 oct. 2011 à 17:47
0
Merci
Resalut,

aprés avoir testé .FlushBuffers pendant plusieurs jours sur mon appli tournant sous Windows Server 2008, je me suis rendu compte que le problème que j' ai n' est pas totalement résolu:
bien que la table soit bien mise à jour, les indexes crées (en ajoutant des enregistrements) ne sont pas mis à jour physiquement dans le fichier *.mdx) par la commande alors qu' elle fonctionne parfaitement pour les données (fichier *.dbf).

Et comme mon appli fait un SetRange() sur un indexe pour récupérer les nouveaux mails d' un compte, il arrive que certains mails marqués comme "nouveaux" n' apparaissent qu' après un certains temps ou lorsque l' appli vient rajouter de nouveaux enregistrements" ...
Il me faudrait un FlushBuffers pour le fichiers *.mdx !

A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.