Avatar billede Slettet bruger
28. marts 2005 - 00:09 Der er 14 kommentarer og
1 løsning

hierarkisk sortering i db og admin i form

Hejsa...

jeg har en tabel i en access database hvori jeg gerne vil have felt som den skal sortere på. Dette er ikke noget problem men jeg skal lave en form hvor man selv kan sætte rækkefølgen af rækkerne så man kan flytte dem op eller ned.. jeg håber i forstår hvad jeg mener :>

Kom gerne med alternative tilbud på hvordan jeg skal gøre dette.

På forhånd tak.
Avatar billede sjap Praktikant
28. marts 2005 - 00:18 #1
Brug f.eks. nedenstående beskrivelse som inspiration:

http://support.microsoft.com/default.aspx?scid=kb;en-us;208390
Avatar billede Slettet bruger
28. marts 2005 - 00:24 #2
hej sjap, jeg forstår sgu ikke meget af det der
Avatar billede Slettet bruger
28. marts 2005 - 00:27 #3
ahh ok..jeg er med..
men jeg søger ikke en måde at vise rækkerne i den rigtige rækkefølge...
mere en måde at administrere rækkefølgen på.
Avatar billede sjap Praktikant
28. marts 2005 - 00:37 #4
Joker > Beklager. Er på vej i seng og håbede, at linket kunne hjælpe dig på vej.

Det ER iøvrigt rækkefølgen af posterne, du kan styre på den viste måde. Eksemplet anviser kun at du kan vælge en variabel at sortere efter (som du vælger i en comboboks). Nedenfor har ejg lavet et lille eksempel, hvis du vil bruge flere variable:

Sub cboLookup1_AfterUpdate()
  UpdateRecordsource
End Sub

Sub cboLookup2_AfterUpdate()
  UpdateRecordsource
End Sub

Sub cboLookup3_AfterUpdate()
  UpdateRecordsource
End Sub

Sub UpdateRecordsource()

Me.RecordSource = "SELECT * FROM Customers ORDER BY [" & Me!cboLookup1 & "]" & IIf(Me!cboLookup2 <> "", ", [" & Me!cboLookup2 & "]", "") & IIf(Me!cboLookup3 <> "", ", [" & Me!cboLookup3 & "]", "") & ";"

End Sub
 

Og så er jeg for træt til at fortsætte. Håber du har fået lidt inspiration.
Avatar billede Slettet bruger
28. marts 2005 - 00:46 #5
ok, sov godt.
Mit kendskab til access er dog ikke så stort..hvordan bruger jeg den kode?
Avatar billede sjap Praktikant
28. marts 2005 - 00:54 #6
Det er måske lidt lettere at forstå, hvis du prøve at atarte med Microsofts eksempel.

Når du opretter en comboboks, kan du tilknytte en hændelse til EfterOpdatering. Dvs. når comboksen er blevet ændret (brugeren har valgt noget i listen), så skal der ske noget bestemt.

I det tilfælde er det bestemte at der skal foretages en sortering.

I eksemplet ovenfor har jeg lavet koden til tre combokse (med navnene cboLookup1, cboLookup2 og cboLookup3). I alle tre tilfælde kaldes blot funktionen UpdateRecordsource (i princippet kunne du godt udføre koden direkte i alle tre "AfterUpdate" men på denne her måde, er der kun et sted, der skal rettes hvis noget skal ændres).

Sub'en UpdateRecordsource laver blot en forespørgsel, der sorterer dine data.
Avatar billede Slettet bruger
28. marts 2005 - 01:03 #7
Ok.. hvis vi lige hurtigt laver en db her hjælper det måske til at forklare:
_________________________
|id|Frugt    |placering|
+-----------------------+
|1 |Pærer    |2        |
|2 |Æbler    |1        |
|3 |Banen    |4        |
|4 |Appelsiner|3        |

Hvis jeg skal vise rækkefølgen korrekt laver jeg bare en SORT BY på placering. Dette er der ingen ben i..

Hvis skulle lave dette i asp ville jeg ikke have det store problem men det er mere at få en form ud af det så det er lidt nemmere at styre.

Hvis f.eks. skal sætte 'Appelsiner' som nu er nr 3 på listen op som nr 2 skulle den finde 'placering' på den ovenstående i
listen som er 'Pærer/2'. Sætte Appelsiner(3) som appelsiner(2) og rette placering på alle der er lavere end 2 til placering-1 og rette alle der er større end 2 til placering+1.

Det var vist en større søforklaring..

hvis jeg stadig misforstår dig sjap, beklager jeg.
Avatar billede Slettet bruger
28. marts 2005 - 04:01 #8
Se evt. http://www.riot.dk/Junk/admin.asp
Jeg ønsker dette..bare i en access form
28. marts 2005 - 09:38 #9
Du er nødt til at lave en ny kolonne i tabellen, som kunne hedde "Placering" og som er et langt heltal. Feltet bør ikke være unikt, da det kan drille i "flytte situationen".

formularen sættes til at sortere denne vha:
Me.Orderby = "Placering"
Me.OrderbyOn = true

Herefter er tricket så at styre væredierne i dette felt.

Men det må styres med opdateringsforespørgsler:

Flyt op:
Update Dintabel Set Placering = Placering - 1 Where Placering = Forms!DinFormular!Placering
Update Dintabel Set Placering = Placering + 1 Where Placering = Forms!DinFormular!Placering - 1

Flyt ned:
Update Dintabel Set Placering = Placering + 1 Where Placering = Forms!DinFormular!Placering
Update Dintabel Set Placering = Placering - 1 Where Placering = Forms!DinFormular!Placering + 1

/Thomas
Avatar billede terry Ekspert
28. marts 2005 - 12:09 #10
You can find a simple example here.

You will also need to find the next heighest value of sortOrder when adding records

http://home1.stofanet.dk/santhel/Download/MoveRecordUpDown.zip
Avatar billede Slettet bruger
28. marts 2005 - 15:16 #11
Hej igen,

thomasjepsen: kan du uddøbe lidt nærmere hvordan jeg bruger de 'opdateringsforespørgsler' Jeg kender ikke så meget til access.

terry: seems as the db doesnt work..it gives me the error 'Error 3073 - Operation must use an updateable query.' whenever i try to move an item up or down.
Avatar billede mugs Novice
28. marts 2005 - 15:35 #12
Du laver en ny forespørgsel og i menuen Forespørgsler vælger du Opdateringsforespørgsel. Derefter kopierer du thomasjepsen's SQL ind i forespørgslen og retter objektnavnene. Da forespørgslen refererer til en formular (Forms!DinFormular!Placering) SKAL denne formular være åben. Du kører herefter forespørgslen f.eks fra en knap med kommandoen:

docmd.openquery "Forespørgslens navn"

Terry's eksempel fungerer perfekt her.
Avatar billede Slettet bruger
28. marts 2005 - 15:47 #13
ja det det eksempel virker fint...jeg havde vist basen på skrivebeskyttet før.

det virker nu. tusind tak
Avatar billede Slettet bruger
28. marts 2005 - 16:03 #14
oh..one thing left.
As Terry mentioned, i would need to find the total number of records in the table whenever adding a new record.

Can't i just do a SQL count on the default value in the table and add +1.
How would i go about doing this?
Avatar billede mugs Novice
28. marts 2005 - 16:44 #15
Indsæt denne i formularens VedAktuel:

If Me.NewRecord Then
Me.FELTNAVN = DMax("[FELTNAVN]", "TABELNAVN") + 1
End If

Hvor FELTNAVN er navnet på det felt der indeholder et unikt nr. for posten og TABELnavn er navnet på pågældende tabel.
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