Les requêtes Access en VBA
Stef
-
blux Messages postés 27120 Date d'inscription Statut Modérateur Dernière intervention -
blux Messages postés 27120 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour à tous.
Voila mon problème, qui pourrai ne pas en être un pour certains.
Soyez indulgeant :)
Je voudrais savoir comment effectuer une suppression dans un etable access à partir d'une comparaison faite avec une autre table.
Concrètement, j'ai une table avec des informations sur des personnes et je voudrais supprimer les informations concernants ces personnes lorqu'elles apparaissent dans une autre table.
J'ai essayé avec les requêtes simplement mais pas moyen.
Je me suis donc tourner vers le module VBA d'Access.
Il faut aussi savoir que je ne souhaite pas passer par un formulaire.
Voila ce que je sais :
Dim rs As Recordset
Dim RS2 As Recordset
Dim db As Database
Set db = Application.CurrentDb
Set rs = db.OpenRecordset("table_all", dbOpenTable, dbReadOnly)
Set RS2 = db.OpenRecordset("table", dbOpenTable, dbReadOnly)
rs.MoveFirst
While Not (rs.EOF)
RS2.MoveFirst
While Not (RS2.EOF)
If rs.Fields("n_client") = RS2.Fields("n_client2") Then
// c'est ici que je veus mettre la requete : DELETE *
//FROM table_all WHERE n_client=RS2.Fields("n_client2");
End If
RS2.MoveNext
wend
rs.MoveNext
Wend
Merci d'avance pour votre aide et je sais aussi qu'il ne faut pas mettre les recorset en dbReadOnly, mais je sais plus comment il fo mettre :(
Merci , et c'est assez urgent
Voila mon problème, qui pourrai ne pas en être un pour certains.
Soyez indulgeant :)
Je voudrais savoir comment effectuer une suppression dans un etable access à partir d'une comparaison faite avec une autre table.
Concrètement, j'ai une table avec des informations sur des personnes et je voudrais supprimer les informations concernants ces personnes lorqu'elles apparaissent dans une autre table.
J'ai essayé avec les requêtes simplement mais pas moyen.
Je me suis donc tourner vers le module VBA d'Access.
Il faut aussi savoir que je ne souhaite pas passer par un formulaire.
Voila ce que je sais :
Dim rs As Recordset
Dim RS2 As Recordset
Dim db As Database
Set db = Application.CurrentDb
Set rs = db.OpenRecordset("table_all", dbOpenTable, dbReadOnly)
Set RS2 = db.OpenRecordset("table", dbOpenTable, dbReadOnly)
rs.MoveFirst
While Not (rs.EOF)
RS2.MoveFirst
While Not (RS2.EOF)
If rs.Fields("n_client") = RS2.Fields("n_client2") Then
// c'est ici que je veus mettre la requete : DELETE *
//FROM table_all WHERE n_client=RS2.Fields("n_client2");
End If
RS2.MoveNext
wend
rs.MoveNext
Wend
Merci d'avance pour votre aide et je sais aussi qu'il ne faut pas mettre les recorset en dbReadOnly, mais je sais plus comment il fo mettre :(
Merci , et c'est assez urgent
A voir également:
- Les requêtes Access en VBA
- Acer quick access - Forum logiciel systeme
- Quick Access service ✓ - Forum PC portable
- Désinstaller ACER QUICK ACCESS - Forum Logiciels
- Access appdata - Guide
- Excel compter cellule couleur sans vba - Guide
3 réponses
Je ne pense pas que ça puisse marcher.
Tu devrais "scanner" tous les enregistrements de la table que tu souhaites effacer avant de passer à l'enregistrement suivant.
Si tu n'es pas sûr que tes enregistrements correspondent, il ne me semble pas logique de passer en parallèle d'un enregistrement à l'autre dans chaque table.
D'autre part, si tu ouvres ta table en lecture seule, il sera impossible de supprimer les enregistrements.
Tu devrais "scanner" tous les enregistrements de la table que tu souhaites effacer avant de passer à l'enregistrement suivant.
Si tu n'es pas sûr que tes enregistrements correspondent, il ne me semble pas logique de passer en parallèle d'un enregistrement à l'autre dans chaque table.
D'autre part, si tu ouvres ta table en lecture seule, il sera impossible de supprimer les enregistrements.
Oui je sais que comme ça ça ne risque pas de marcher.
Justement quel est le mot clé pour permettre d'effectuer les suppressions sur la table?
et quel est la fonction pour pouvoir lancer ma requête SQL de suppression?
Merci d'avance
Justement quel est le mot clé pour permettre d'effectuer les suppressions sur la table?
et quel est la fonction pour pouvoir lancer ma requête SQL de suppression?
Merci d'avance
Salut,
plutôt que de gérer deux recordsets en parallèle, on peut passer par une requête temporaire.
Tu connais les données à supprimer puisqu'elles sont dans table.
Il suffit de créer une requête de suppression sur une sélection de 'n_client2' de 'table' :
A+ Blux
plutôt que de gérer deux recordsets en parallèle, on peut passer par une requête temporaire.
Tu connais les données à supprimer puisqu'elles sont dans table.
Il suffit de créer une requête de suppression sur une sélection de 'n_client2' de 'table' :
Dim Req As QueryDef Set Req = CurrentDb.CreateQueryDef("", "delete * from table_all where n_client in (select n_client2 from table)") Req.Execute dbFailOnErrorEt c'est tout !
A+ Blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"