highmasterc
Messages postés6Date d'inscriptionmardi 21 septembre 2004StatutMembreDernière intervention 6 février 2006
-
20 janv. 2006 à 09:09
highmasterc
Messages postés6Date d'inscriptionmardi 21 septembre 2004StatutMembreDernière intervention 6 février 2006
-
25 janv. 2006 à 06:11
Bonjour à tous. Alors voila, dans mon code, j'utilise une table nommmée table2 (c'est une "free table").
J'execute deux requêtes SQL sur cette table qui fonctionnent parfaitement : insert into et select.
Le problème c'est que ma requête "delete from table2" ne veut pas fonctionner ;'( et je ne comprends pas pourquoi, à la fin, ma table contient toujours des enregistrements.
Quelqu'un aurait - il une solution? Peut être que la synthaxe SQL VFP est différente de la syntaxe de base? je ne sais pas.
J'ai donc besoin de votre aide s'il vous plaît (^_^)
michelatoutfox
Messages postés828Date d'inscriptionmardi 5 octobre 2004StatutMembreDernière intervention 7 mai 20131 23 janv. 2006 à 18:32
quelle que soit ta version de Foxpro, le delete sur une table va "marquer" les enregistrements à delete, et il faut en effet faire un PACK sur cette table pour les effacer physiquement ; seulement voilà, le pack necessite en effet que la table soit ouverte en exclusive.
mais tu n'as absolument pas besoind qu'ils soient effacés physiquement, tes enregistrements. avec un SET DELETED ON, les enregistrements marqué à delete ne seront plus pris en compte dans tes requètes SQL.
laisses tomber ce SET EXCLUSIVE ON, il ne t'apporteras que des ennuis et des complications.
dans tes forms de travail, tu as un set deleted on, et ça marche.
Tu te prévois simplement une routine d'effacement physique des deleted, qui peut devenir utile si tu as beaucoup de deleted dans tes fichiers (qques centaines de milliers, quoi) ; là, tu commenceras par vérifier si le fichier est disponible pour une ouverture exclusive (use monfichier exclusive), et ensuite, tu packes et tu refermes le plus vite possible pour ne pas bloquer d'autres users
au passge, j'en profite pour te dire que le init n'est pas le premier évenement, tous les objets de ton form sont déjà créés à ce moment-là, leur init a déjà eu lieu... et parmi ces objets, l'environnement de données... donc ce n'est jamais dans l'init d'un form qu'on traite un pb de data
rubix2
Messages postés22Date d'inscriptionjeudi 3 novembre 2005StatutMembreDernière intervention27 août 2007 20 janv. 2006 à 14:25
Salut,
En foxpro quand tu veux supprimer des enregistrements en utilisant l'instruction SQL DELETE FROM .... Fox pro marque simplement les enregistrements, mais il ne les supprime pas . Pour les supprimer définitivement, tu dois faire suivre ton delete par un PACK. Ce qui donne par exemple :
highmasterc
Messages postés6Date d'inscriptionmardi 21 septembre 2004StatutMembreDernière intervention 6 février 2006 23 janv. 2006 à 06:08
Merci pour la précision. Cependant, lors de l'exécution j'ai le message : "invalid operation for the cursor" à la ligne du "PACK"
Je précise que j'utilise VFP 5 (et que je n'ai pas le choix).
D'autres avis sur la question?
Je vais en attendant chercher un peu d'informations sur cette commande mais j'apprécierai d'avoir vos conseils avisés :p
highmasterc
Messages postés6Date d'inscriptionmardi 21 septembre 2004StatutMembreDernière intervention 6 février 2006 23 janv. 2006 à 06:24
Me revoila (^_^)
La suppression que je voulais effectuer concernait une table libre, mais j'utilisais également un curseur dans le code.
Alors suite au message d'erreur, j'ai viré le curseur qui traînait... résultat : "file must be opened exclusively"
Je regarde dans l'aide et je trouve la commande SET EXCLUSIVE ON.
Tout content, j'essaie ca et comme on me dit que ca doit être placé avant l'ouverture de la table, je le mets donc tout au début de mon code (c'est le code de l'événement Init de la feuille). >> toujours le même message "file must be opened exclusively" ;'(
J'ai donc toujours besoin de votre aide
Re - merci
HMC
Vous n’avez pas trouvé la réponse que vous recherchez ?