OVH Cloud OVH Cloud

Dim Number(9999999999) As Long

5 réponses
Avatar
mymoi
Bonjour,

Comment faire j'ai une table "etudiant" et la valeur max=20
de cette table est de 9999999007, je souhaite garder que=20
les 15 premi=E8res lignes de chaque etudiants, un =E9tudiant=20
peux avoir jusqu'a 150 lignes dans cette table.

Quand je fais =E7a j'ai un message d'erreur memoire=20
insuffisante.
Dim Number(9999999999) As Long

Mon code:

Dim Matab1 As Recordset
Dim Number(9999999999) As Long=20
Dim Matab As Recordset
Set Matab =3D CurrentDb.OpenRecordset("SELECT=20
tempo_dmi_A1.Al_Num, tempo_dmi_A1.Al_nopat,=20
tempo_dmi_A1.Al_nofic FROM tempo_dmi_A1;")
If Not Matab.BOF Then
Matab.MoveFirst
While Not Matab.EOF
Number(Matab!Al_nopat) =3D Number(Matab!
Al_nopat) + 1
If Number(Matab!Al_nopat) > 15 Then
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM Tempo_dmi_A1=20
WHERE (((Tempo_dmi_A1.Al_Num)=3D" & Matab!Al_num & ") AND=20
((Tempo_dmi_A1.Al_nopat)=3D" & Matab!Al_nopat & "));"
DoCmd.SetWarnings True
End If
Matab.MoveNext
Wend
End If
Matab.Close

Merci de votre aide

5 réponses

Avatar
Vincent Guichard
mymoi a écrit :

Bonjour,

Comment faire j'ai une table "etudiant" et la valeur max
de cette table est de 9999999007, je souhaite garder que
les 15 premières lignes de chaque etudiants, un étudiant
peux avoir jusqu'a 150 lignes dans cette table.



Ce n'est pas parce que la valeur max est 9999999007 que tu vas avoir ce
nombre là d'étudiants! Et heureusement!
La solution est de ne mémoriser que les éléments dont tu as besoin, dans
un tableau à double entrée par exemple, ou dans une Collection.
Pourquoi tiens-tu à reserver dès le départ de la mémoire dont tu sais
que tu ne l'utiliseras pas?

Vincent Guichard
Avatar
Jessy Sempere [MVP]
Bonjour

Le problème c'est que tu dois identifié le changement d'étudiant pour
savoir quand tu dois supprimer les enregistrement ou non ???

Voilà en gros comment je procèderais :

Dim rst As Recordset
Dim rstAll As Recordset

Set rst = CurrentDb.OpenRecordset("SELECT Etudiant FROM TaTable GROUP BY Etudiant;")
With rst
If Not .BOF Then
.MoveFirst
Do Until .EOF
Set rstAll = CurrentDb.OpenRecordset( _
"Select * from TaTable Where Etudiant = '" _
& .Fields("Etudiant") & "';")
With rstAll
.Move 15
Do Until .EOF
.Delete
.MoveNext
Loop
.Close: Set rstAll = Nothing
End With
.MoveNext
Loop
.Close: Set rst = Nothing
End If
End With


--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

"mymoi" a écrit dans le message news:
23d7301c45f5b$40e9e6f0$
Bonjour,

Comment faire j'ai une table "etudiant" et la valeur max
de cette table est de 9999999007, je souhaite garder que
les 15 premières lignes de chaque etudiants, un étudiant
peux avoir jusqu'a 150 lignes dans cette table.

Quand je fais ça j'ai un message d'erreur memoire
insuffisante.
Dim Number(9999999999) As Long

Mon code:

Dim Matab1 As Recordset
Dim Number(9999999999) As Long
Dim Matab As Recordset
Set Matab = CurrentDb.OpenRecordset("SELECT
tempo_dmi_A1.Al_Num, tempo_dmi_A1.Al_nopat,
tempo_dmi_A1.Al_nofic FROM tempo_dmi_A1;")
If Not Matab.BOF Then
Matab.MoveFirst
While Not Matab.EOF
Number(Matab!Al_nopat) = Number(Matab!
Al_nopat) + 1
If Number(Matab!Al_nopat) > 15 Then
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM Tempo_dmi_A1
WHERE (((Tempo_dmi_A1.Al_Num)=" & Matab!Al_num & ") AND
((Tempo_dmi_A1.Al_nopat)=" & Matab!Al_nopat & "));"
DoCmd.SetWarnings True
End If
Matab.MoveNext
Wend
End If
Matab.Close

Merci de votre aide
Avatar
Peux tu me détaillé un ce code.

Merci
-----Message d'origine-----
Bonjour

Le problème c'est que tu dois identifié le changement


d'étudiant pour
savoir quand tu dois supprimer les enregistrement ou


non ???

Voilà en gros comment je procèderais :

Dim rst As Recordset
Dim rstAll As Recordset

Set rst = CurrentDb.OpenRecordset("SELECT Etudiant


FROM TaTable GROUP BY Etudiant;")
With rst
If Not .BOF Then
.MoveFirst
Do Until .EOF
Set rstAll = CurrentDb.OpenRecordset( _
"Select * from TaTable Where Etudiant


= '" _
& .Fields("Etudiant") & "';")
With rstAll
.Move 15
Do Until .EOF
.Delete
.MoveNext
Loop
.Close: Set rstAll = Nothing
End With
.MoveNext
Loop
.Close: Set rst = Nothing
End If
End With


--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

"mymoi" a écrit


dans le message news:
23d7301c45f5b$40e9e6f0$
Bonjour,

Comment faire j'ai une table "etudiant" et la valeur max
de cette table est de 9999999007, je souhaite garder que
les 15 premières lignes de chaque etudiants, un étudiant
peux avoir jusqu'a 150 lignes dans cette table.

Quand je fais ça j'ai un message d'erreur memoire
insuffisante.
Dim Number(9999999999) As Long

Mon code:

Dim Matab1 As Recordset
Dim Number(9999999999) As Long
Dim Matab As Recordset
Set Matab = CurrentDb.OpenRecordset("SELECT
tempo_dmi_A1.Al_Num, tempo_dmi_A1.Al_nopat,
tempo_dmi_A1.Al_nofic FROM tempo_dmi_A1;")
If Not Matab.BOF Then
Matab.MoveFirst
While Not Matab.EOF
Number(Matab!Al_nopat) = Number(Matab!
Al_nopat) + 1
If Number(Matab!Al_nopat) > 15 Then
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM Tempo_dmi_A1
WHERE (((Tempo_dmi_A1.Al_Num)=" & Matab!Al_num & ") AND
((Tempo_dmi_A1.Al_nopat)=" & Matab!Al_nopat & "));"
DoCmd.SetWarnings True
End If
Matab.MoveNext
Wend
End If
Matab.Close

Merci de votre aide


.



Avatar
Jessy Sempere [MVP]
Ok

Alors :

Dim rst As Recordset
Dim rstAll As Recordset



Là on déclare les 2 variables Recordset

Set rst = CurrentDb.OpenRecordset("SELECT Etudiant


FROM TaTable GROUP BY Etudiant;")

Ouverture du premier recordset, qui représentre le nombre d'étudiant, en
fait il faut mettre le SQL qui représente la sélection et le regroupement sur
l'identifiant de l'étudiant (ici c'est "Etudiant")

With rst
If Not .BOF Then
.MoveFirst



Là s'il y a des enregistrement on se positionne sur le premier

Do Until .EOF
Set rstAll = CurrentDb.OpenRecordset( _
"Select * from TaTable Where Etudiant = '" _
& .Fields("Etudiant") & "';")



Là, on ouvre le recordset représentant tous les enregistrement de l'étudiant
que l'on est en train de traité

With rstAll
.Move 15



Là on saute les 15 premiers enregistrements

Do Until .EOF
.Delete
.MoveNext
Loop
.Close: Set rstAll = Nothing



Ici, on supprime tous les enregistrements qui sont après les 15
premiers

End With
.MoveNext



Là on passe à l'étudiant suivant et on refait toute la manip
de suppression des enregistrements au delà des 15 premiers

Loop
.Close: Set rst = Nothing
End If
End With



Fermeture des recordset et libération des variables...

C'est bon ???

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
a écrit dans le message news:
23fe401c45f79$4c259730$
Peux tu me détaillé un ce code.

Merci
-----Message d'origine-----
Bonjour

Le problème c'est que tu dois identifié le changement


d'étudiant pour
savoir quand tu dois supprimer les enregistrement ou


non ???

Voilà en gros comment je procèderais :

Dim rst As Recordset
Dim rstAll As Recordset

Set rst = CurrentDb.OpenRecordset("SELECT Etudiant


FROM TaTable GROUP BY Etudiant;")
With rst
If Not .BOF Then
.MoveFirst
Do Until .EOF
Set rstAll = CurrentDb.OpenRecordset( _
"Select * from TaTable Where Etudiant


= '" _
& .Fields("Etudiant") & "';")
With rstAll
.Move 15
Do Until .EOF
.Delete
.MoveNext
Loop
.Close: Set rstAll = Nothing
End With
.MoveNext
Loop
.Close: Set rst = Nothing
End If
End With


--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

"mymoi" a écrit


dans le message news:
23d7301c45f5b$40e9e6f0$
Bonjour,

Comment faire j'ai une table "etudiant" et la valeur max
de cette table est de 9999999007, je souhaite garder que
les 15 premières lignes de chaque etudiants, un étudiant
peux avoir jusqu'a 150 lignes dans cette table.

Quand je fais ça j'ai un message d'erreur memoire
insuffisante.
Dim Number(9999999999) As Long

Mon code:

Dim Matab1 As Recordset
Dim Number(9999999999) As Long
Dim Matab As Recordset
Set Matab = CurrentDb.OpenRecordset("SELECT
tempo_dmi_A1.Al_Num, tempo_dmi_A1.Al_nopat,
tempo_dmi_A1.Al_nofic FROM tempo_dmi_A1;")
If Not Matab.BOF Then
Matab.MoveFirst
While Not Matab.EOF
Number(Matab!Al_nopat) = Number(Matab!
Al_nopat) + 1
If Number(Matab!Al_nopat) > 15 Then
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM Tempo_dmi_A1
WHERE (((Tempo_dmi_A1.Al_Num)=" & Matab!Al_num & ") AND
((Tempo_dmi_A1.Al_nopat)=" & Matab!Al_nopat & "));"
DoCmd.SetWarnings True
End If
Matab.MoveNext
Wend
End If
Matab.Close

Merci de votre aide


.



Avatar
Merci Beaucoup!!!

A+
-----Message d'origine-----
Ok

Alors :

Dim rst As Recordset
Dim rstAll As Recordset



Là on déclare les 2 variables Recordset

Set rst = CurrentDb.OpenRecordset("SELECT Etudiant


FROM TaTable GROUP BY Etudiant;")

Ouverture du premier recordset, qui représentre le nombre


d'étudiant, en
fait il faut mettre le SQL qui représente la sélection et


le regroupement sur
l'identifiant de l'étudiant (ici c'est "Etudiant")

With rst
If Not .BOF Then
.MoveFirst



Là s'il y a des enregistrement on se positionne sur le


premier

Do Until .EOF
Set rstAll = CurrentDb.OpenRecordset( _
"Select * from TaTable Where




Etudiant = '" _
& .Fields("Etudiant") & "';")



Là, on ouvre le recordset représentant tous les


enregistrement de l'étudiant
que l'on est en train de traité

With rstAll
.Move 15



Là on saute les 15 premiers enregistrements

Do Until .EOF
.Delete
.MoveNext
Loop
.Close: Set rstAll = Nothing



Ici, on supprime tous les enregistrements qui sont après


les 15
premiers

End With
.MoveNext



Là on passe à l'étudiant suivant et on refait toute la


manip
de suppression des enregistrements au delà des 15 premiers

Loop
.Close: Set rst = Nothing
End If
End With



Fermeture des recordset et libération des variables...

C'est bon ???

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
a écrit dans le


message news:
23fe401c45f79$4c259730$
Peux tu me détaillé un ce code.

Merci
-----Message d'origine-----
Bonjour

Le problème c'est que tu dois identifié le changement


d'étudiant pour
savoir quand tu dois supprimer les enregistrement ou


non ???

Voilà en gros comment je procèderais :

Dim rst As Recordset
Dim rstAll As Recordset

Set rst = CurrentDb.OpenRecordset("SELECT Etudiant


FROM TaTable GROUP BY Etudiant;")
With rst
If Not .BOF Then
.MoveFirst
Do Until .EOF
Set rstAll = CurrentDb.OpenRecordset( _
"Select * from TaTable Where Etudiant


= '" _
& .Fields("Etudiant") & "';")
With rstAll
.Move 15
Do Until .EOF
.Delete
.MoveNext
Loop
.Close: Set rstAll = Nothing
End With
.MoveNext
Loop
.Close: Set rst = Nothing
End If
End With


--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

"mymoi" a écrit


dans le message news:
23d7301c45f5b$40e9e6f0$
Bonjour,

Comment faire j'ai une table "etudiant" et la valeur max
de cette table est de 9999999007, je souhaite garder que
les 15 premières lignes de chaque etudiants, un étudiant
peux avoir jusqu'a 150 lignes dans cette table.

Quand je fais ça j'ai un message d'erreur memoire
insuffisante.
Dim Number(9999999999) As Long

Mon code:

Dim Matab1 As Recordset
Dim Number(9999999999) As Long
Dim Matab As Recordset
Set Matab = CurrentDb.OpenRecordset("SELECT
tempo_dmi_A1.Al_Num, tempo_dmi_A1.Al_nopat,
tempo_dmi_A1.Al_nofic FROM tempo_dmi_A1;")
If Not Matab.BOF Then
Matab.MoveFirst
While Not Matab.EOF
Number(Matab!Al_nopat) = Number(Matab!
Al_nopat) + 1
If Number(Matab!Al_nopat) > 15 Then
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM Tempo_dmi_A1
WHERE (((Tempo_dmi_A1.Al_Num)=" & Matab!Al_num & ") AND
((Tempo_dmi_A1.Al_nopat)=" & Matab!Al_nopat & "));"
DoCmd.SetWarnings True
End If
Matab.MoveNext
Wend
End If
Matab.Close

Merci de votre aide


.





.