Toon posts:

Access/VBA - Tabel naar Array

Pagina: 1
Acties:
  • 131 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik wil uit een tabel in mijn database bepaalde kolommen naar een array heen schrijven. Momenteel maak ik gebruik van de functie 'Dlookup', maar deze werkt erg traag.

Het gaat om een tabel met 7 kolommen en 271 rijen. Ik gebruik de volgende code:

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
If language = "Nederlands" Then

    Do Until I = I_Max

        If Not IsNull(DLookup("[Tag]", "ML_Forms" _
            , "[Taal] = '" & I & "'")) Then
            ArrayString1 = DLookup("[Tag]", "ML_Forms" _
            , "[Taal] = '" & I & "'")
            LangArray(I, 0) = ArrayString1
        End If
        
        If Not IsNull(DLookup("[LabelDutch]", _
            "ML_Forms", "[Taal] = '" & I & "'")) Then
            ArrayString2 = DLookup("[LabelDutch]" _
            , "ML_Forms", "[Taal] = '" & I & "'")
            LangArray(I, 1) = ArrayString2
        End If
        
        If Not IsNull(DLookup("[TiptextDutch]" _
            , "ML_Forms", "[Taal] = '" & I & "'")) Then
            ArrayString3 = DLookup("[TiptextDutch]" _
            , "ML_Forms", "[Taal] = '" & I & "'")
            LangArray(I, 2) = ArrayString3
        End If
        
        I = I + 1
    Loop


Ditzelfde voor de talen engels en duits, waar ik andere kolommen uitlees.

Ik hoop dat er een eenvoudige manier is (getcolumns ofzo) om dit sneller te doen.

Verwijderd

Topicstarter
*extra info

Ik wil dus 3 complete kolommen naar een array schrijven. Zonder bepaalde voorwaarden. 1 van die drie kolommen is iedere keer dezelfde. Maar de Label-kolom en de TipText-kolom is afhankelijk van de ingestelde taal.

Verwijderd

Probeer eerst eens een paar indexen toe te voegen aan de kolommen waaro[p je zoekt met DLookup, dat scheelt meestal al een heleboel. Ga pas daarna kijken of je je workaround met de arrays nodig hebt.

Verwijderd

Topicstarter
de kolom 'taal' heeft in mijn geval een indexering van 1 tot 271...

Verwijderd

Ik bedoel een index op de tabel.......

Verwijderd

Topicstarter
ja goed... maar zoals ik het nu geregeld heb, via de Dlookup, doet hij iedere keer een vergelijk. En voegt vervolgens pas de rij toe aan de array. Eigenlijk hoeft hij geen vergelijk te doen, maar simpelweg drie hele kolommen naar de array te dumpen.

Verwijderd

Als je je code nu eens een beetje optimaliseert ?

Visual Basic:
1
2
3
4
5
  for i = 1 to i_max
    LangArray(I, 0) = DLookup("[Tag]", "ML_Forms", "[Taal] = '" & I & "'") & ""
    LangArray(I,1) = DLookup("[LabelDutch]", "ML_Forms", "[Taal] = '" & I & "'") & ""
    LangArray(I,2) = DLookup("[TiptextDutch]", "ML_Forms", "[Taal] = '" & I & "'") & ""
  next


Dit scheelt je al de helft aan Dlookups ! ( truukje met het toevoegen van een lege string aan het einde zorgt ervoor dat een null een lege string wordt. )

Verwijderd

Topicstarter
Top _/-\o_ scheelt inderdaad meer dan de helft v.d. tijd!!!

Verwijderd

en nog beter is :

AANNAMES :
- LangArray heeft de goede grootte
- de waarden in Taal hebben geen gaten, en er geldt LBound(langarray) <= taal <= ubound(Langarray)

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
dim rs as recordset
set rs = currentdb.openrecordset("Select Tag,LabelDutch,TipTextdutch from ml_forms order by taal")
rs.movelast
rs.movefirst ' Deze constructie is zorgt ervoor dat je de werkelijke recordcount op kunt vragen
for i = 1 to rs.recordcount
  for j = 0 to 2
    langarray(i,j) = rs.fields(j).value
  next
next
rs.close
set rs = nothing


Disclaimer : Deze taal is volledig uit mijn blote hoofd ingevoerd en kan dus syntax en/of andere fouten bevatten. Het is aan de TS zelf om deze fouten op te lossen.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Verwijderd schreef op 27 april 2004 @ 16:02:
Disclaimer : Deze taal is volledig uit mijn blote hoofd ingevoerd en kan dus syntax en/of andere fouten bevatten. Het is aan de TS zelf om deze fouten op te lossen.
Ik zou em in ieder geval omschrijven zodat ie geen recordcount gebruikt.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

farlane schreef op 27 april 2004 @ 16:32:
[...]


Ik zou em in ieder geval omschrijven zodat ie geen recordcount gebruikt.
Dat zou ik mijn eigen code ook doen, maar als ik hem ook nog eens moet gaan uitleggen hoe een dynamische array te gaan gebruiken, dan zitten we hier morgen nog. Mijn code is bedoeld als hulp, en kan nog stukken verbeterd worden, maar het is al stukken beter als meerde DLookups.
Pagina: 1