[]
Nombre de membres 1 membre
Connectés : ( personne )
 

La Charte du Forum - La Charte du Forum

Forum - Forum
Problèmes Access des débutants - Problèmes Access des débutants


clos par 3Stone le 05/08/2011 : 16:55  Sujet n° 524  Compter des enregistrements successifs

le 04/06/2011 : 16:31
par JeanCharles

Anonyme

visiteur

Bonjour à tous. 

J'ai une table qui comporte 3 champs

ref (auto incrementiel)
 speed (numérique) 
following (octet)

Je voudrais faire une requete qui me permette de mettre à jour le 
 champ following basé sur un critère de vitesse. 

Tant que la vitesse est > 160 je veux compter les enregistrements 
successifs et le mettre dans following :

1 159 0
2 161 1
3 163 2
4 159 0
5 161 1
6 162 2
7 164 3

etc....

Comment puis-je compter sur ces 2 critères ? (> 160 et champ ref qui 
se "suit")

Merci d'avance
Ecrire à JeanCharles  sujet clos  Haut

[]   

Réponse n° 1
--------
le 04/06/2011 : 22:00
par 3Stone

Anonyme

Administrateur

Bonjour,

Tu colles le code ci-dessous dans un module général ou sous le bouton du formulaire et tu appelles la sub par :

UpdateFollowing

 
Code :
Sub UpdateFollowing()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Ctr As Integer, sSQL As String
Ctr = 0
sSQL = "Select Ref, Speed, Following FROM T_Vitesse Order By Ref;"
Set db = CurrentDb
Set rs = db.OpenRecordset(sSQL)
Do Until rs.EOF
If rs!Speed > 160 Then
Ctr = Ctr + 1
Else
Ctr = 0
End If
rs.Edit
rs!Following = Ctr
rs.Update
rs.MoveNext
Loop
rs.Close: db.Close
Set rs = Nothing
Set db = Nothing
End Sub
 
Ceci dit, si tu saisi la valeur de Speed dans un formulaire, on peut également s'arranger pour que Following se remplisse automatiquement à chaque fois.

Note, dans le code, j'ai appelé la table "T_Vitesse", il faudra adapter.

Cordialement,
Pierre(3stone)
  clos par 3Stone le 05/08/2011 : 16:55  Haut
Réponse n° 2
--------
le 05/06/2011 : 00:10
par JeanCharles

Anonyme

visiteur

Salut Pierre,

Merci pour ces infos mais bien sur je n'arrive pas à les mettre en place...

J'ai crée un module que j'ai appelé "modspike" et qui contient le code suivant que j'ai adapté à mon nom de table....

Sub UpdateFollowing()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Ctr As Integer, sSQL As String
Ctr = 0
sSQL = "Select Ref, Speed, Following FROM tblspeed Order By Ref;"
Set db = CurrentDb
Set rs = db.OpenRecordset(sSQL)
Do Until rs.EOF
If rs!Speed > 160 Then
Ctr = Ctr + 1
Else
Ctr = 0
End If
rs.Edit
rs!Following = Ctr
rs.Update
rs.MoveNext
Loop
rs.Close: db.Close
Set rs = Nothing
Set db = Nothing
End Sub

Ensuite dans le form j'ai fait un bouton avec un code qui appele le module et la je me suis fait virer au prétexte qu'on ne peut pas appeler un module mais qu'il attend une variable...

Private Sub Commande4_Click()
DoCmd.OpenModule ([modspike])
End Sub


Ma table a les valeurs de speed qui sont mises à jour depuis un import de texte (c'est toi qui 'a expliqué la méthode pour un import automatique de données sur le groupe access) donc si on peut inclure le code de mise à jour de following en fonction du fait que des valeurs successives en ref sont > 160 ca me va très bien :)


Je le mets le code du module d'import que tu m'as donné et que j'ai modifié pour l'adapter à mon cas particulier (et qui marche nickel, encore merci :)   )


Function fOpenFiles() As String
'Nécessite la référence microsoft office x.x object library
Dim Dialogue As FileDialog
Dim Fichier As Variant
Set Dialogue = FileDialog(msoFileDialogOpen)
With Dialogue
.AllowMultiSelect = False
.ButtonName = "Load"
.InitialFileName = "*.txt"
.Filters.Clear
.InitialView = msoFileDialogViewList
.title = "Choose speed file ..."
If .Show Then
For Each Fichier In .SelectedItems
fOpenFiles = fOpenFiles & Fichier & ";"
Next
End If
End With
If Len(fOpenFiles) > 0 Then
fOpenFiles = Left(fOpenFiles, Len(fOpenFiles) - 1)
End If
Set Dialogue = Nothing
End Function

Ecrire à JeanCharles   clos par 3Stone le 05/08/2011 : 16:55  Haut
Réponse n° 3
--------
le 05/06/2011 : 00:28
par 3Stone

Anonyme

Administrateur

Bon...soir wink

 
Citation :

Private Sub Commande4_Click()
DoCmd.OpenModule ([modspike])
End Sub

 
Naaaaannnnn !

Je l'avais dit, pourtant :

 
Citation : Pierre

et tu appelles la sub par :
UpdateFollowing

 
donc, simplement :

UpdateFollowing

Cordialement,
Pierre(3stone)
  clos par 3Stone le 05/08/2011 : 16:55  Haut
Réponse n° 4
--------
le 05/06/2011 : 08:25
par jeancharles

Anonyme

visiteur

AH :)

Donc ca avance mais j'ai un bug ensuite....

J'ai pas changé mon (ton) code de module et le code du bouton dans le form qui doit me faire le calcul est maintenant

Private Sub Commande4_Click()
UpdateFollowing
End Sub

Quand je cloque sur le bouton ca mouline un peu et j'ai une erreur d'execution 3052 qui me dit que le nombre de verrous disponible est dépassé et que je dois augmenter l'entrée de registre maxlocksperfile.

Donc je me dis que il doit y avoir trop d'enregistrements dans ma table et peut etre que je peux trier avec une requete qui ne garderait que les vitesses au dela de 155 par exemple et qui en compterait que celle au dessus de 160....

Est-ce qu'au lieu d'aller chercher dans ma table tblspeed je peux aller chercher dans uen requete qui est déja executée avant de lancer le form.

Pour infos la tabloe comprend 27000 enregistrements et la requete qui me vire tout ce qui ets en dessous de 155 pour afficher dans le form en garde 1700 a peu près.

Merci :)

Ecrire à jeancharles   clos par 3Stone le 05/08/2011 : 16:55  Haut
Réponse n° 5
--------
le 05/06/2011 : 11:29
par Jeancharles

Anonyme

visiteur

C'est officiel, je suis un chef ha ha ha

J'ai creusé mon idée de le faire sur la requete et ca marche nickel.

Encore erci pour le coup de main

Ecrire à Jeancharles   clos par 3Stone le 05/08/2011 : 16:55  Haut
actif sujet actif   clos sujet clos   Important! Important!   Nouveau Nouveau message   -   Rectifier Rectifier message   Clôturer Clôturer sujet   Remonter Remonter
[]
Catégories de discussion  Forum 



Haut