Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 17/01/2011, 19h53   #1
Membre régulier
 
Inscription : janvier 2011
Messages : 308
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 308
Points : 76
Points : 76
Par défaut Syntaxe exacte requete suppression en VBA

Bonjour à tous,

J'aimerai que l'on me donne la syntaxe exacte d'une requete de suppression en VBA avec clé primaire, j'ai essayé :

Code :
Docmd.runsql "Delete [NomDeMaTable]('"NomCléPrimaire"') VALUES ('" & Me.NomChampCléPrimaire & "');"
mais ça ne marche pas.

Le but étant de supprimer toute la ligne d'un enregistrement en cours sur un formulaire et identifié par la clé primaire de la table.
Peut on faire référence uniquement au champ contenant la clé primaire ou doit on spécifier chaque champ et valeur ?

merci d'avance pour votre réponse.
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 20h27   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Citation:
Envoyé par clickandgo Voir le message
Peut on faire référence uniquement au champ contenant la clé primaire ou doit on spécifier chaque champ et valeur ?
Oui, on peut.
Code :
Docmd.runsql "Delete FROM [NomDeMaTable] WHERE [NomCléPrimaire] = '" & Me.NomChampCléPrimaire & "';"
Mais on peut aussi le faire depuis le formulaire (plus propre).
Pour supprimer l'enregistrement en cours :
Code :
DoCmd.RunCommand acCmdDeleteRecord
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 20h30   #3
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
La méthode la plus simple pour avoir la syntaxe d'une requête Access c'est d'utiliser l'éditeur de requête, de composer ta requête, puis de basculer l'affichage en mode SQL. Cela va te sauver des heures et des heures de frustration :-).

Pour répondre à ta question, et un peu par hazard, la syntaxe est du SQL standard.

Code sql :
DELETE [NomDeMaTable].* form NomDeMaTable WHERE [NomDeMaTable].[NomChampCléPrimaire] = "TaTavaleur"

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 02h32   #4
Membre régulier
 
Inscription : janvier 2011
Messages : 308
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 308
Points : 76
Points : 76
Merci d'avoir répondu,

Donc si je comprends bien, j'insère le SQL créé par access dans n'importe quelle requête d'action ? juste précédé de :
docmd.runsql ?

Il me semblait que ça ne marchait pas à tous les coups !

Deux petites questions svp :

1/ Concernant une suppression quand il y a une clé primaire on indique seulement la valeur de la clé à supprimer ou tous les champs qui suivent dans la table ?

2/ la méthode "DoCmd.RunCommand acCmdDeleteRecord" n'est elle pas destinée uniquement quand on travaille sur des champs dépendants ?
Dans mon cas je travaille uniquement sur des champs indépendants pour mieux contrôler la boucle de conditions sur le formulaire avant toute action ...

Merci
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 13h31   #5
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Citation:
Envoyé par clickandgo Voir le message
Donc si je comprends bien, j'insère le SQL créé par access dans n'importe quelle requête d'action ? juste précédé de :
docmd.runsql ?

Il me semblait que ça ne marchait pas à tous les coups !
Autant que je sache cela fonctionne toujours, avec des guillemets autours du SQL car c'est DoCmd.RunSQL attend une chaîne de caractères et il faut penser à doubler les " dans ta chaîne s'ils servent de délimiteurs.

Par exemple devient
Citation:
1/ Concernant une suppression quand il y a une clé primaire on indique seulement la valeur de la clé à supprimer ou tous les champs qui suivent dans la table ?
Non tu mets simplement l'élément ou les éléments de recherche qui t'intéresse, cela n'est pas forcément la clef primaire.

Code :
"delete TaTable.* from TaTable where Prenom=""René"";"
va effacer tous les enregistrements de la table dont le prénom vaut "René". J'ai mis un cas simple mais tu peux utiliser toute la puissance des conditions WHERE pour faire ta sélection.

Citation:
2/ la méthode "DoCmd.RunCommand acCmdDeleteRecord" n'est elle pas destinée uniquement quand on travaille sur des champs dépendants ?
Dans mon cas je travaille uniquement sur des champs indépendants pour mieux contrôler la boucle de conditions sur le formulaire avant toute action ...
Tout à fait exact.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 15h12   #6
Membre régulier
 
Inscription : janvier 2011
Messages : 308
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 308
Points : 76
Points : 76
Citation:
Envoyé par marot_r Voir le message
Autant que je sache cela fonctionne toujours, avec des guillemets autours du SQL car c'est DoCmd.RunSQL attend une chaîne de caractères et il faut penser à doubler les " dans ta chaîne s'ils servent de délimiteurs.

Par exemple devient

Non tu mets simplement l'élément ou les éléments de recherche qui t'intéresse, cela n'est pas forcément la clef primaire.

Code :
"delete TaTable.* from TaTable where Prenom=""René"";"
va effacer tous les enregistrements de la table dont le prénom vaut "René". J'ai mis un cas simple mais tu peux utiliser toute la puissance des conditions WHERE pour faire ta sélection.



Tout à fait exact.

A+
Mille mercis, et bonne continuation à vous ... !
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h19.


 
 
 
 
Partenaires

Hébergement Web