28. marts 2005 - 00:09Der 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.
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
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.
Synes godt om
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.
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
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.
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.
Synes godt om
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
Synes godt om
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?
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.
Synes godt om
Ny brugerNybegynder
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.