Les requêtes Access en VBA

Fermé
Stef - 28 oct. 2004 à 17:07
blux Messages postés 26450 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 6 novembre 2024 - 29 oct. 2004 à 09:54
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 jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
28 oct. 2004 à 22:41
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
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 26450 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 6 novembre 2024 3 312
29 oct. 2004 à 09:54
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