Hallo allemaal,
Ik ben bezig met een VB applicatie die met grote hoeveelheden data om moet gaan. Om de gebruiker het idee te geven dat er nog iets gebeurt wil ik een progressbar opnemen die gekoppeld is aan de status van de query die op dat moment wordt uitgevoerd. Ik heb wat op internet gezocht naar de mogelijkheden en dit valt goed te doen met het ADO recordset event 'fetchProgress'. Dit event wordt tijdens het uitvoeren van de query om de x aantal records ge-raised.
Op de website van Microsoft is een voorbeeld omschreven die werkt. Kijk hiervoor op http://support.microsoft....aspx?scid=kb;en-us;262311. Ik heb dit voorbeeld in een apart project gezet en de connectiestring en query aangepast naar mijn situatie. Zelf heb ik nog even progressbar ingebouwd en in dat project werkt het allemaal goed!
Toen ik het echter in het al bestaande project wilde implementeren weigerde deze methode te werken... Alles werkt wel gewoon, maar er wordt op geen enkele manier de sub 'rs_fetchProgress(...)' aangeroepen!
Wie kan mij helpen?
Voor alle duidelijkheid hieronder de belangrijkste onderdelen van de code uit het project...
Voor alle duidelijkheid: in de collectie colAdjustments staan alle instellingen mbt de database connectie
Ik ben bezig met een VB applicatie die met grote hoeveelheden data om moet gaan. Om de gebruiker het idee te geven dat er nog iets gebeurt wil ik een progressbar opnemen die gekoppeld is aan de status van de query die op dat moment wordt uitgevoerd. Ik heb wat op internet gezocht naar de mogelijkheden en dit valt goed te doen met het ADO recordset event 'fetchProgress'. Dit event wordt tijdens het uitvoeren van de query om de x aantal records ge-raised.
Op de website van Microsoft is een voorbeeld omschreven die werkt. Kijk hiervoor op http://support.microsoft....aspx?scid=kb;en-us;262311. Ik heb dit voorbeeld in een apart project gezet en de connectiestring en query aangepast naar mijn situatie. Zelf heb ik nog even progressbar ingebouwd en in dat project werkt het allemaal goed!
Toen ik het echter in het al bestaande project wilde implementeren weigerde deze methode te werken... Alles werkt wel gewoon, maar er wordt op geen enkele manier de sub 'rs_fetchProgress(...)' aangeroepen!
Wie kan mij helpen?
Voor alle duidelijkheid hieronder de belangrijkste onderdelen van de code uit het project...
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
| Option Explicit
Dim mc As ADODB.Connection
Dim WithEvents rs As ADODB.Recordset
Private colAdjustments As New Collection
Private Sub synchronizeRelations()
On Error GoTo mcError
Dim intAantalRecords, intPosition As Integer
Set mc = New ADODB.Connection
Set rs = New ADODB.Recordset
'Connect to the MySQL database
lblStatus = "Bezig met het verbinden met de MySQL database..."
lblStatus.Refresh
mc.ConnectionString = "DRIVER={" & colAdjustments("DriverName") & "};" _
& "SERVER=" & colAdjustments("Server") & ";" _
& "DATABASE=" & colAdjustments("Database") & ";" _
& "UID=" & colAdjustments("User") & ";" _
& "PWD=" & colAdjustments("Password") & ";" _
& "OPTION=" & 1 + 2 + 8 + 32 + 2048 + 16384
mc.Open
rs.Open "SELECT COUNT(id) FROM tblrelatie", mc 'Aantal te verwachten records bepalen ivm progressbar
pgb.Max = rs.Fields(0).Value
rs.Close
'Execute the query and receive the results in the recordset
lblStatus = "Bezig met het ophalen van de relaties..."
lblStatus.Refresh
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Properties("Initial Fetch Size") = 2
rs.Properties("Background Fetch Size") = 4
rs.Open "SELECT * FROM tblrelatie WHERE fldSyncStatus='u' OR fldSyncStatus='a'", mc, , , adAsyncFetch
intAantalRecords = rs.RecordCount
pgb.Max = intAantalRecords
pgb.Value = 0
If rs.RecordCount <> 0 Then rs.MoveFirst
Do Until rs.EOF
intPosition = rs.AbsolutePosition
pgb.Value = intPosition
pgb.Refresh
lblStatus = "Bezig met het sychroniseren van relatie " & intPosition & " van de " & intAantalRecords & "..."
lblStatus.Refresh
If rs.Fields("fldRelatieSoort") = 1 Then 'Het gaat om een klant
'Code voor een klant
Else 'Het gaat om een leverancier
'Code voor een leverancier
End If
rs.MoveNext
Loop
lblStatus = "Het synchroniseren van de relaties is voltooid!"
lblStatus.Refresh
rs.Close
Set rs = Nothing
mc.Close
Set mc = Nothing
End
Exit Sub
mcError:
HandleError
End Sub
Private Sub rs_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
Debug.Print "Fetch: " & Progress & " Max: " & MaxProgress
pgb.Value = Progress
pgb.Refresh
End Sub
Private Sub rs_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If adStatus <> adStatusOK Then
Debug.Print "Failed"
Debug.Print "Error: " & pError.Number & " - " & pError.Description
Else
Debug.Print "Done"
End If
End Sub |
Voor alle duidelijkheid: in de collectie colAdjustments staan alle instellingen mbt de database connectie