Avatar billede hnteknik Novice
03. december 2003 - 14:05 Der er 1 kommentar og
1 løsning

Optimal sortering af 2 dim. Array eller collection

For at nedbringe nettrafikken mellem mit Access program og datadelen er jeg ved at lægge en stor del af tabellerne over i collections i programmet. Herfra fyldes diverse combobokse med indholdet via en call back funktion.

En af tabellerne er ejendomsoplysninger (+3000 records) med attributter: ejd.nr., navn, gade, postnr. Jeg bruger udtræk fra denne tabel flere steder f.eks. i samme form, hvor man vælge ejendommen ud fra 4 combobokse sorteret efter hver parameter (luksus ikke).

Ud fra et link andet sted her, har jeg en 2 dimensionel sorterings allegoritme kørende: http://www.4guysfromrolla.com/webtech/012799-3.shtml

Det tager vel 2-3 secs at løbe sorteringen igennem (5 tekststrenge X +3000 records)- det skal så gøres 3 gange ( Den første er jo sortered efter ID).

1) Jeg ved ikke om det kan gøres hurtigere i arrayform eller evt. ud fra en collection. Findes der effektive non-key sorteringsrutiner for (VBA)collections.

2) for at sænke belastningen, ville jeg gerne kunne lave 'late binding'.

Jeg har et antal subformularer, som afhængig af opgavetypen aktiveres/åbnes eller ikke. Jeg vil jo gerne også her spare ressourcer på subforms, som alligevel ikke åbnes.

Er der nogen, som har et godt tip/reference til:
on form open me.recordsource = select ... where id = paterform.id.value ( begrænser opslaget) samt fyldning af combobokse fra collection.

Henrik
Avatar billede terry Ekspert
07. december 2003 - 22:10 #1
hnteknik>I know that this is not what you ask for, but if I understand your problem correctly then it is because you have to frequently read all of the records and the data is in a backend. Well isnt it possible to have a local table for this and on startup read the data from your backend into the front end. Then you can quite easily alter the combo boxes row source in VBA code.

Not quite sure I understand the last part of your question! "Er der nogen, som har et godt tip/reference til:"!

It is possible to alter the forms record source in code, but without a bit more information I cant give an example! Where is paterform.id.value comming from?
Avatar billede hnteknik Novice
23. december 2003 - 12:15 #2
Hi Terry
Undskyld mit sene reply, jeg har været hængt op i nogen tid.
Jo du har ganske ret - data ligger remote. Selvom bruger sidder på en 2 mbit linie gælder det om at få trafikken ned.

Jeg læser alle ejendomsdata (ejdnr,navn,gade, postnr) ind i en collection of ejd class objects sorteret ja på ejdnr. At få dette ind i en combo via en gcall back function går snapt og forsinker ikke i en fortløbende form. Problemet opstår, når der skal sorteres på navn,gade, postnr ( som alle her er strings). Med ovennævnte 2 - dim array sort ( som nok er den snappeste sortering) går det jækla langsomt. Sortering efter indeks er det hurtigste. En løsning kan være blot at droppe en temp file i programmet, men ikke så elegant.


>Where is paterform.id.value comming from?

You know LinkMasterFields/LinkChildFields on form/subforms. My forms consist of a master form and subforms placed in a tab control:
I ran into this:
Late Binding : Subforms on Tab Controls in Microsoft Access
Use this technique to let a main Access form load without trying to populate
all the subforms.

Private Sub tabStuff_Change()
Select Case tabStuff.Pages.item(tabStuff.Value).Name
Case "pg1"
If Len(sfrm1.SourceObject) = 0 Then
sfrm1.SourceObject = "frmStuff_1"
sfrm1.LinkChildFields = "StuffID"
End If
Case "pg2"
If Len(sfrm2.SourceObject) = 0 Then
sfrm2.SourceObject = "frmStuff_2"
sfrm2.LinkChildFields = "StuffID"
End If
'Repeat for each tab
End Select
End Sub


Merry X-mas
Henrik
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester