bonjour,
j'ai une base de donné, qui contie un champ heure au format 24 heure(genre 16:00) je dois recupérer la partie heure et la metre dans un champ de ma table, la table contient plus 700000 enregistrement , j'ai fais un petit programme .le programme fonctionnent correctement jusqu'a lenregsitrement numéro 497687 et s'arret en m'affichant cette erreur
ca n'a pas marcher il m'affiche une erreure
j'ai essayer plusieur variante :erreur d'execution '-2147217887 (80040e21)'
argument non valide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Option Compare Database Private Sub Commande0_Click() Dim con As Object Dim rsSource As New ADODB.Recordset Dim Heure, jour As String Dim JourHeure As Integer Dim madate As Date Set con = Application.CurrentProject.Connection rsSource.Open "Select Heure,HeureAbrégée from donnees", con, adOpenStatic, adLockOptimistic If (rsSource.RecordCount > 0) Then rsSource.MoveFirst While rsSource.EOF <> True Heure = rsSource!Heure rsSource!HeureAbrégée = CInt(Left(rsSource!Heure, 2)) 'CInt(jour & heure) rsSource.MoveNext 'il sarret sur cette ligne Wend rsSource.MoveFirst rsSource.Update End If rsSource.Close Set rsSource = Nothing End Subje me suis dis que peut etre jk'exedé la taille limite d'un recordset
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Option Compare Database Private Sub Commande0_Click() Dim con As Object Dim rsSource As New ADODB.Recordset Dim Heure, jour As String Dim JourHeure As Integer Dim madate As Date Set con = Application.CurrentProject.Connection rsSource.Open "Select Heure,HeureAbrégée from donnees", con, adOpenStatic, adLockOptimistic If (rsSource.RecordCount > 0) Then rsSource.MoveFirst While rsSource.EOF <> True Heure = rsSource!Heure rsSource!HeureAbrégée = CInt(Left(rsSource!Heure, 2)) 'CInt(jour & heure) rsSource.Update 'il sarret sur cette ligne rsSource.MoveNext Wend End If rsSource.Close Set rsSource = Nothing End Sub
j'ai fractionné mon calcul avec la meme ooption le update en dors de la boucle et à l'interieur
bien sur quand je met le uopdate dans la boucle ca prend boucoup plus de tempsm. je ne comprends plus rien ca ne fonction pas avec la même erreur et il s'arrete toujours sur le même enregistrement 497687
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95 Option Compare Database Private Sub Commande0_Click() Dim conAjout As Object Dim rsAjout As New ADODB.Recordset Set conAjout = Application.CurrentProject.Connection Dim conDate As Object Dim rsDate As New ADODB.Recordset Dim strsql As String Dim TheDates(20) As Variant Dim cpt As Integer cpt = 1 Set conDate = Application.CurrentProject.Connection strsql = "SELECT distinct(Date) FROM donnees" rsDate.Open strsql, conDate, adOpenStatic, adLockReadOnly If rsDate.RecordCount = 0 Then DoCmd.Hourglass False Set rsDate = Nothing Set conDate = Nothing Set rsAjout = Nothing Set conAjout = Nothing MsgBox "Il n'y a aucune date dans la table AppelsPannes. La fonction sera interrompue." Exit Sub Else rsDate.MoveFirst While Not rsDate.EOF TheDates(cpt) = rsDate!Date rsDate.MoveNext cpt = cpt + 1 Wend Dim Heure As String Dim HeureDebut As Long Dim Intervalle As Integer Dim rs As Object Dim con As Object Dim conUpdate As Object Dim rsUpdate As Object Dim I As Integer Dim J As Integer HeureDebut = 0 Intervalle = 10000 Set con = Application.CurrentProject.Connection Set rs = CreateObject("ADODB.Recordset") Set conUpdate = Application.CurrentProject.Connection Set rsUpdate = CreateObject("ADODB.Recordset") SysCmd acSysCmdInitMeter, "Progression en cours", CInt(cpt - 1 * 2) For I = 1 To cpt - 1 'Pour chaque date For J = 0 To 2 'Pour chaque groupe d'heures strsql = "SELECT Heure,HeureAbrégée from donnees WHERE donnees.Heure LIKE " & "'" & J & "%'" & " AND donnees.Date = #" & TheDates(I) & "#" rs.Open strsql, con, adOpenStatic, adLockOptimistic If (rs.RecordCount > 0) Then rs.MoveFirst While rs.EOF <> True Heure = rs!Heure rs!HeureAbrégée = CInt(Left(rs!Heure, 2)) 'CInt(jour & heure) rs.Update rs.MoveNext Wend ProgressBar2.Value = CInt(I * J * 100 / ((cpt - 1) * 2)) End If rs.Close SysCmd acSysCmdUpdateMeter, I * J Next HeureDebut = 0 Next End If Set rs = Nothing Set con = Nothing Set rsUpdate = Nothing Set conUpdate = Nothing Set rsAjout = Nothing Set conAjout = Nothing DoCmd.Hourglass False MsgBox "Fin. Le résultat final se retrouve dans la table StatsParHeure" SysCmd acSysCmdRemoveMeter 'Supprime la jauge d'avancement End Sub
quelqu'un aurait une explication
merci
Partager