Ik doe in Access (2000) in VBA een update op een tabel en in een functie direct daarna selecteer ik op die tabel. Tot mijn grote verbazing zijn de veranderingen die ik in de update heb doorgevoerd nog niet aanwezig als ik direct selecteer, maar duurt het even voordat ik ze zie. Dat is natuurlijk erg onhandig, en ik kan me niet indenken dat dat ook maar enigszins normaal is.
In Oracle kun je een commit geven, maar is zoiets ook in Access voorhanden?
Ter info: mijn code, eerst de update
en de select code:
Wat in de upate query gebeurd is dat het PLANT veld dat er uit ziet als "NP/0000" wordt geupdate naar "0000" (dat doet de functie "GetLastWord").
In de tweede query (insert query) selecteer ik o.a. PLANT, en daar staat nog altijd "NP/0000".
Als ik snel genoeg ben en de tabel open dan staat daar ook nog altijd "NP/0000", maar als ik even wacht (een seconde of zo) dan veranderd dat in "0000".
Ik vind het een erg slechte oplossing om bijvoorbeeld een Sleep(1000) er tussen te zetten, alleen al omdat ik niet zeker weet dat na een seconde al de update is doorgevoerd.
Hoe kan ik deze update forceren? Werk ik soms niet goed met recordsets?
In Oracle kun je een commit geven, maar is zoiets ook in Access voorhanden?
Ter info: mijn code, eerst de update
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| Set cn = New ADODB.Connection cn.ConnectionString = CurrentProject.Connection cn.Open 'remove NP/ from BCR table Set rs = New ADODB.Recordset 'source dataset sQuery = "SELECT * FROM [Excel-BCR]" rs.Open sQuery, cn, adOpenForwardOnly, adLockPessimistic, adCmdText Do Until rs.EOF Debug.Print rs.AbsolutePosition; rs.Fields(0) bUpdate = False If InStr(rs.Fields(0), "/") Then rs.Fields(0) = GetLastWord(rs.Fields(0), "/") bUpdate = True End If If bUpdate Then rs.Update rs.MoveNext Loop rs.Close |
en de select code:
Visual Basic:
1
2
| DoCmd.RunSQL "INSERT INTO [Reporting Output] ( PLANT, SE, [SE NAME], [BCR NEW] ) SELECT F1, F2, F3, F19 FROM [Excel-BCR] GROUP BY F1, F2, F3, F19" |
Wat in de upate query gebeurd is dat het PLANT veld dat er uit ziet als "NP/0000" wordt geupdate naar "0000" (dat doet de functie "GetLastWord").
In de tweede query (insert query) selecteer ik o.a. PLANT, en daar staat nog altijd "NP/0000".
Als ik snel genoeg ben en de tabel open dan staat daar ook nog altijd "NP/0000", maar als ik even wacht (een seconde of zo) dan veranderd dat in "0000".
Ik vind het een erg slechte oplossing om bijvoorbeeld een Sleep(1000) er tussen te zetten, alleen al omdat ik niet zeker weet dat na een seconde al de update is doorgevoerd.
Hoe kan ik deze update forceren? Werk ik soms niet goed met recordsets?
Signatures zijn voor boomers.