Ik heb een sub geschreven die een DAO.recordset omzet naar een ADODB.recordset in het geheugen. Dat is bijv. handig om een settingstabel in het geheugen te plaatsen en vervolgens daar waarden uit te lezen (sneller op trage netwerken)
Dat werkt allemaal prima
Ik heb dus, samengevat:
sub/functie die recordset omzet
functie om waarden uit te lezen
Wat gebeurt er: als ik de functie GeeftWaarde(1, "naam") aanroep gaat deze zoeken in rstADODB, de public recordset in het geheugen en geeft mij de waarde van het veld "Naam" van ID=1
Als rstADODB nog niet bestaat (bijv. de eerste keer of om wat voor reden dan ook) dan treedt een error op. deze error triggert het aanmaken van de rstADODB. Ik hoef dus niet te zorgen dat de rstADODB gevuld is
Nu is de situatie dus dat ik een functie heb die de meest voorkomende DAO.recordsets probleemloos kan omzetten naar een ADODB.recordset. Ik zou deze functie graag "algemeen" willen gebruiken, maar dat kan nu niet omdat de functie TabelToMemory alléén de public recordset rstADODB kan vullen (want die wordt letterlijk ge-"set" in TabelToMemory().
Stel ik wil een andere tabel óók in het geheugen zetten, dan moet ik in deze situatie een andere public recordset declareren (rstADODB), maar ook de functie TabelToMemory kopieren en zorgen dat deze rstADODB2 aanmaakt.
Hoe kan ik dit ombouwen naar de situatie dat ik met één functie meerdere recordsets kan aanmaken, dus iets als
Ik moet dus vanuit de functie GetValue iets meegeven waardoor de functie TabelToMemory wéét welke public ADODB.recordset hij moet vullen
Als ik dit doe:
krijg ik een foutmelding
Dit werkt wel:
Maar is dit de beste manier?
Ik hoop dat het een beetje duidelijk is
Dat werkt allemaal prima
Ik heb dus, samengevat:
code:
1
| Public rstADODB as ADODB.recordset |
sub/functie die recordset omzet
code:
1
2
3
4
5
6
7
8
9
10
| sub TabelToMemory() set DAO.recordset set new rstADODB = ADODB.recordset alle DAO.fields aanmaken in rstADODB alle DAO.records aanmaken in rstADODB DAO.close end sub |
functie om waarden uit te lezen
code:
1
2
3
4
5
| Functie GetValue(key, veld)
Find rstADODB(id)=key
Geefwaarde = waarde van rstADODB(veld)
errorhandler:
als rstADODB is nothing then TabelToMemory |
Wat gebeurt er: als ik de functie GeeftWaarde(1, "naam") aanroep gaat deze zoeken in rstADODB, de public recordset in het geheugen en geeft mij de waarde van het veld "Naam" van ID=1
Als rstADODB nog niet bestaat (bijv. de eerste keer of om wat voor reden dan ook) dan treedt een error op. deze error triggert het aanmaken van de rstADODB. Ik hoef dus niet te zorgen dat de rstADODB gevuld is
Nu is de situatie dus dat ik een functie heb die de meest voorkomende DAO.recordsets probleemloos kan omzetten naar een ADODB.recordset. Ik zou deze functie graag "algemeen" willen gebruiken, maar dat kan nu niet omdat de functie TabelToMemory alléén de public recordset rstADODB kan vullen (want die wordt letterlijk ge-"set" in TabelToMemory().
Stel ik wil een andere tabel óók in het geheugen zetten, dan moet ik in deze situatie een andere public recordset declareren (rstADODB), maar ook de functie TabelToMemory kopieren en zorgen dat deze rstADODB2 aanmaakt.
Hoe kan ik dit ombouwen naar de situatie dat ik met één functie meerdere recordsets kan aanmaken, dus iets als
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| Public rstSettings as ADODB.recordset Public rstKlanten as ADODB.recordset Public Function TabelToMemory(ADODB.recordset, SQL as string) zet DAO.recordset(SQL) om naar ADODB end Function GetValueSettings(key, veld) zoek record in rstSettings error: TabelToMemory(rstSettings, "select * from tblSettings") GetValueKlanten(key, veld) zoek record in rstKlanten error: TabelToMemory(rstKlanten, "select * from tblKlanten") |
Ik moet dus vanuit de functie GetValue iets meegeven waardoor de functie TabelToMemory wéét welke public ADODB.recordset hij moet vullen
Als ik dit doe:
code:
1
2
3
4
5
6
7
8
| Public rstKLanten as ADODB.recordset Public Function TabelToMemory(rstADODB as ADODB.recordset) set rstADODB = new ADODB.recordset zet DAO.recordset om naar rstADODB end Function Call TabelToMemory(rstKlanten, "select * from tblKlanten") |
krijg ik een foutmelding
Dit werkt wel:
code:
1
2
3
4
5
6
7
8
| Public rstKLanten as ADODB.recordset Public Function TabelToMemory(rstADODB as variant) set rstADODB = new ADODB.recordset zet DAO.recordset om naar rstADODB end Function Call TabelToMemory(rstKlanten, "select * from tblKlanten") |
Maar is dit de beste manier?
Ik hoop dat het een beetje duidelijk is