Suprimmer un enregistrement

jebberi Messages postés 9 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 4 mars 2011 - 2 mars 2011 à 13:10
jebberi Messages postés 9 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 4 mars 2011 - 4 mars 2011 à 22:33
bonjour
je suis entrain de réaliser mon première application avec vfp9 et j'ai trouvé un petit problème lorsque je veut supprimer un enregistrement d'un table de ma base de données en utilisent un nombre d'enregistrement comme ci:
nRecord = recno(result_produits)
delete record nRecurd
elle ne marche plus mais lorsque j'utilise ceci elle me dit 1 record deleted mais dans le table rien ne se passe:
1.open database .......
2. nRecord = recno(result_produits)
3.je passe à la première enregistrement
GOTO nRecord IN (chemin+"\DATA\produits.dbf")
DELETE
merci

8 réponses

michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
2 mars 2011 à 15:21
Bonjour,

Mais où as-tu vu cette syntaxe DELETE RECORD ??? Et où as-tu vu que le IN de GOTO désignait un nom de fichier avec son chemin?

Ensuite, quelques remarques, en vrac: Open database n'ouvre pas de table, donc tu ne peux pas faire de delete. Ensuite pour se positionner ua premier enregistrement, le plus simple est de faire un LOCATE, ou un GO TOP. Enfin, sauf exception rarissime, l'utilisation du RECNO pour se positionner dans une table est peu conseillé.

si tu veux supprimer un enregistrement dans une table, tu as 2 syntaxes possibles : 1 en langage xBase, une en Transact-SQL.
en xBase, après avoir ouvert ta table, tu demandes un DELETE FOR IN <l'alias de ta table>
en Transact SQL, tu vas demander un DELETE FROM <ta table> WHERE

Et au final, merci de toujours indiquer le code exact que tu utilises, les erreurs avec leur numéro et leur message précis.
("elle ne marche plus" n'est pas un message d'erreur, "rien ne se passe" n'en est pas un non plus)
0
jebberi Messages postés 9 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 4 mars 2011
2 mars 2011 à 19:38
salut
Michel, merci pour vos conseils. j'ai essai avec la deuxième syntaxe mais elle ne sa marche pas voila le code :
CLOSE ALL
OPEN DATABASE (chemin"\DATA\logi")
IF thisform.pageframe1.ActivePage = 3
nRecord = RECNO(thisform.pageframe1.page3.grid1.RecordSource)
MESSAGEBOX(thisform.pageframe1.page3.grid1.ActivateCell(nRecord,1))
DELETE FROM produits WHERE refproduit= thisform.pageframe1.page3.grid1.ActivateCell(nRecord,1)
ENDIF
activecell() j'ai modifier elle retourne le texte écrit dans la cellule et elle sa marche.
j'attends ta reponse & merci.
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
2 mars 2011 à 19:59
Bonjour,

elle ne marche pas, ça veut dire quoi? il y a une erreur? si oui, laquelle (n°, texte exact)?

le code que tu indiques ici, il se trouve où? un prg, une méthode de form, une méthode d'évenement d'un objet?

que cherches-tu à faire avec ce MessageBox?
est-ce que tu as testé ta clause WHERE de ton DELETE? tu penses vraiment que ActivateCell va te renvoyer la valeur d'une cellule? tu as regardé l'aide sur cette méthode?
0
jebberi Messages postés 9 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 4 mars 2011
2 mars 2011 à 23:19
@ Michel
1. le code se trouve dans la méthode click d'un bouton
2. ActiveCell() j'ai modifier de tel sort elle me renvoyer le texte affichée dans la cellule est sa marche et c'est le rôle de messagebox de le tester la valeur(sa marche très bien)
3. elle n'affiche pas un message d'erreur mais elle m'écrit 0 record deleted dans la barre d'état.
cette erreur se répète avec presque tout les commandes sql qui j'ai tester sauf avec insert into elle sa marche.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
3 mars 2011 à 15:18
Bonjour Oussama,

je ne comprend pas pourquoi tu t'embarasse autant : le grid est lié aux données (par son controlsource). Par conséquent, quand tu t'es déplacé sur une ligne dans le grid, tu as automatiquement positionné ton pointeur d'enregistrement sur cet enregistrement dans ton alias ouvert sur ta table. Un simple DELETE suffit (en commande de type xBase), en précisant par sésurité le IN "ton_alias". c'est tout!

ActiveCell() en VFP tu peux me donner le texte de l'aide de ce mot ? et où tu as trouvé un exemple d'utilisation? tu ne te tromperais pas de langage?
0
jebberi Messages postés 9 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 4 mars 2011
3 mars 2011 à 22:38
salut
j'ai essai avec :
1. grid1.recordsource=produits et grid1.recordsourcetype=0
2. bouton supprimer :

nRecord = RECNO(thisform.grid1.RecordSource)

GOTO nRecord IN produits

DELETE FROM produits WHERE refproduit = thisform.grid1.ActivateCell(nRecord,1)
elle m'écrit deleted 2 records in 0.08 seconds mais dans la table reste tel qu'il est.
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
4 mars 2011 à 12:46
Et essayer ce que je t'ai proposé? et réfléchir à ce que tu fais?

1) ne pas utiliser le recno ni le goto
2) ne pas utiliser ActivateCell, qui est une méthode et ne rend pas de résultat


encore une fois, "dans la table reste tel qu'il est" n'est pas un message technique, tu dois nous donner d'autres infos pour qu'on t'aide.
Expose ce que tu veux faire, en langage simple (par exemple "je veux supprimer dans une table l'enregistrement sur le quel je suis positionné dans une grille, en cliquant sur un bouton"). Donne-nous les informations nécessaires (structure de la table, index existants, etc).
0
jebberi Messages postés 9 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 4 mars 2011
4 mars 2011 à 22:33
slt
c'est vrai "je veux supprimer dans une table l'enregistrement sur le quel je suis positionné dans une grille, en cliquant sur un bouton")
avec la table produits est
refproduit clé primaire
designation
categorie
prixhtva
tva
remise
et en fin merci pour les conseils .
0
Rejoignez-nous