Les requêtes Access en VBA

Stef -  
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

3 réponses

zenon Messages postés 726 Date d'inscription   Statut Membre Dernière intervention   180
 
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.
0
Stef
 
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
0
blux Messages postés 27120 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
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' :
Dim Req As QueryDef
Set Req = CurrentDb.CreateQueryDef("", "delete * from table_all where n_client in (select n_client2 from table)")
Req.Execute dbFailOnError
Et c'est tout !

A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
0