erreur d'execution argument non valide
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
Citation:
erreur d'execution '-2147217887 (80040e21)'
argument non valide
j'ai essayer plusieur variante :
Code:
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 Sub |
Code:
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 |
je me suis dis que peut etre jk'exedé la taille limite d'un recordset
j'ai fractionné mon calcul avec la meme ooption le update en dors de la boucle et à l'interieur
Code:
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 |
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
quelqu'un aurait une explication
merci