OVH Cloud OVH Cloud

access table vba, maximum 3 lignes

2 réponses
Avatar
nadis
Bonjour a tous,

dans une table access "matable" j'ai les champs suivants numusers=numérique,
numacte= numérique et NumAuto= numéro auto ...

je souhaité garder que les 3 premiers enregistrements, en fonction de
numacte j'utilise ce bout de code, mais cela ne marche pas merci de votre
aide.

Private Sub Commande5_Click()
Dim rstTr As Recordset
Dim rstTr1 As Recordset

Set rstTr = CurrentDb.OpenRecordset("SELECT matable.numusers,
matable.numacte, matable.numauto From matable;")
With rstTr
If Not .BOF Then
.MoveFirst
Do Until .EOF
Set rstTr1 = CurrentDb.OpenRecordset("Select * from matable
Where numacte = clng('" & .Fields("numacte") & "');")
With rstTr1
.Move 20
Do Until .EOF
.Delete
.MoveNext
Loop
.Close: Set rstTr1 = Nothing
End With
.MoveNext
Loop
.Close: Set rstTr = Nothing
End If
End With
MsgBox "ok"
End Sub

table initiale: TABLE
FINI
numauto numusers numacte numauto numusers numacte
1 1 1 1 1
1
2 1 2 2 1
2
3 1 2 3 1
2
4 1 2 4 1
2
5 1 2 6 1
10
6 1 10 7 2
0
7 2 0 8 2
0
8 2 0 9 2
0
9 2 0
10 2 0

MERCI DE VOTRE AIDE

2 réponses

Avatar
david
salut,

1° - ton premier recordset n'a pas besoin de toutes les infos : juste
du NumActe
Réduits donc avec : SELECT DISTINCT numActe FROM maTable

2° - pour supprimer, tu peux directement faire une instruction SQL :
DELETE * FROM maTable WHERE numAuto not In
(SELECT TOP 3 numAuto FROM maTable WHERE numActe=...)

On a donc :
1. nadis
3 jan 09:23 afficher les options

Groupes de discussion : microsoft.public.fr.vb
De : "nadis" - Rechercher les messages
de cet auteur
Date : Tue, 3 Jan 2006 00:23:02 -0800
Local : Mar 3 jan 2006 09:23
Objet : access table vba, maximum 3 lignes
Répondre | Répondre à l'auteur | Transférer | Imprimer | Message
individuel | Afficher l'original | Signaler un cas d'utilisation
abusive

Bonjour a tous,


dans une table access "matable" j'ai les champs suivants
numusers=numérique,
numacte= numérique et NumAuto= numéro auto ...


je souhaité garder que les 3 premiers enregistrements, en fonction de
numacte j'utilise ce bout de code, mais cela ne marche pas merci de
votre
aide.


Private Sub Commande5_Click()
Dim rstTr As Recordset

Set rstTr = CurrentDb.OpenRecordset("SELECT DISTINCT numacte From
matable;")
Do Until rstTr.EOF
doCmd.runSQL "DELETE * FROM maTable WHERE numAuto Not In
(SELECT TOP 3 numAuto FROM maTable WHERE numActe=" +
cstr(rstTr.Fields("numActe"))
rstTr.MoveNext
Loop
rstTr.Close: Set rstTr = Nothing
End Sub

c'est plus court et plus propre...
A+
Avatar
nadis
merci de ton aide!!! y a une erreur de syntaxe mais j'arrive pas a là trouver

"david" a écrit :

salut,

1° - ton premier recordset n'a pas besoin de toutes les infos : juste
du NumActe
Réduits donc avec : SELECT DISTINCT numActe FROM maTable

2° - pour supprimer, tu peux directement faire une instruction SQL :
DELETE * FROM maTable WHERE numAuto not In
(SELECT TOP 3 numAuto FROM maTable WHERE numActe=...)

On a donc :
1. nadis
3 jan 09:23 afficher les options

Groupes de discussion : microsoft.public.fr.vb
De : "nadis" - Rechercher les messages
de cet auteur
Date : Tue, 3 Jan 2006 00:23:02 -0800
Local : Mar 3 jan 2006 09:23
Objet : access table vba, maximum 3 lignes
Répondre | Répondre à l'auteur | Transférer | Imprimer | Message
individuel | Afficher l'original | Signaler un cas d'utilisation
abusive

Bonjour a tous,


dans une table access "matable" j'ai les champs suivants
numusers=numérique,
numacte= numérique et NumAuto= numéro auto ...


je souhaité garder que les 3 premiers enregistrements, en fonction de
numacte j'utilise ce bout de code, mais cela ne marche pas merci de
votre
aide.


Private Sub Commande5_Click()
Dim rstTr As Recordset

Set rstTr = CurrentDb.OpenRecordset("SELECT DISTINCT numacte From
matable;")
Do Until rstTr.EOF
doCmd.runSQL "DELETE * FROM maTable WHERE numAuto Not In
(SELECT TOP 3 numAuto FROM maTable WHERE numActe=" +
cstr(rstTr.Fields("numActe"))
rstTr.MoveNext
Loop
rstTr.Close: Set rstTr = Nothing
End Sub

c'est plus court et plus propre...
A+