Avatar billede oergaard Nybegynder
30. november 2004 - 09:36 Der er 26 kommentarer og
1 løsning

Sortering af poster

I min database er der 2 unikke felter i min "journal" tabel. Da jeg mener dette er uoverflødigt, vil jeg gerne ned på én. Der kan også lige tilføjes, at det ene felt ("ID") kun bruges til, at sortere journalerne i den rækkefølge de blev indtastet.

Jeg ønsker imidlertid ikke, at sortere dem i denne rækkefølge de blev indtastet men i stedet i forhold til deres journalnr, som er det andet unikke felt.

Journalnr. er bygget op efter følgende princip: ét løbenr. efterfulgt af årstal for oprettelse. Ved årsskifte starter løbenr. igen fra 1. Dvs. 12004, 22004, 32004, 12005 & 22005 osv. Dette giver mig et problem i sorteringen, da jeg også ønsker dem sorteret i ovenstående rækkefølge, hvilket jeg ikke kan få Access til at gøre. De bliver i stedet sorteret som følgende: 12004, 12005, 22004, 22005 & 32004.

Det skal lige siges, at min database oftest generere et journalnr af sig selv, udfra journalnr i den sidste post, hvorfor det igen giver problemer med Access sortering.

Jeg har været inde og kigge lidt på nogle SQL sætninger, men har på ingen måder SQL-viden nok til, at klare denne, ved ej heller om det overhovedet er muligt.

Nogen der kan hjælpe mig?

//Oergaard
Avatar billede rbj_fp Nybegynder
30. november 2004 - 09:40 #1
Jeg ville nok splitte mit journal nummer op i 2 felter
et ID felt og et år Felt, og lave det som en sammensat nøgle.

Dette vil gøre det lettere at sortere dine poster
Avatar billede oergaard Nybegynder
30. november 2004 - 13:40 #2
Det vil være et meget stort arbejde, da der så er mange VBA moduler der skal redigeres, nogle som jeg ikke lige kan se vil virke igen. Så jeg ser helst at jeg kan bibeholde min nuværende format.

//Oergaard
Avatar billede rbj_fp Nybegynder
30. november 2004 - 13:43 #3
Det er selvfølgelig meget træls. Alternativt kan du måske prøve at vende format til
ÅR + ID, sådan at der kommer til at stå 20041 20051 20061....

Så burde sortering være let at lave. Jeg ved dog ikke om det vil give større problemer at modificere koden til at passe på dette.
Avatar billede oergaard Nybegynder
30. november 2004 - 13:47 #4
Problemet ligger i, at vi har nummeret vores journaler på den måde i nogle år efterhånden, hvorfor man fortsat ønsker dem nummeret på denne måde. Det ville selvfølgelig være en mulighed, hvis man i tabellen kunde gemme i formatet ÅR + ID, men i formular feltet vise det som ID + ÅR.

Jeg tror dog, at det også vil give nogle problemer, hvorfor jeg kun ønsker dette gjort, hvis ikke andet er muligt.

//Oergaard
Avatar billede rbj_fp Nybegynder
30. november 2004 - 13:50 #5
Er det enkelt database, eller er den opslittet i flere filer med kædede tabeller?
Avatar billede oergaard Nybegynder
30. november 2004 - 13:58 #6
Der er flere tabeller, men kun en database-fil
Avatar billede rbj_fp Nybegynder
30. november 2004 - 13:59 #7
hvor mange personer bruger denne fil??
Avatar billede oergaard Nybegynder
30. november 2004 - 14:01 #8
Hovedsageligt er vi kun 3, men vi er cirka 20-25, som har adgang til den og som i teorien kan bruge den.
Avatar billede rbj_fp Nybegynder
30. november 2004 - 14:06 #9
hmmm....

Der findes en måde at gøre det på, men den er MEGET klodset, uelegant og langsom.

Der er at kode et modul, som skaber en ekstra tabel programmatisk med et autoID, og i denne sørger man for at lægge dataene i den rigtige rækkefølge programmatisk.

På denne tabel laves der så en query, som ikke med tager AutoID'et.

Dette vil få databasen til at fylde meget og det er kunne få databasen til at gå meget langsom. Jeg vil derfor anbefale at du koder det om til at bruge formatet År + ID istedet for. Da dette sikkert er lettere at lave og vil give en væsentlig mindre disk forbrug. - RBJ
Avatar billede oergaard Nybegynder
30. november 2004 - 14:26 #10
Jeg havde egentlig håbet på, at det var muligt via en SQL sætning hvor der bliver sat nogle sorterings kriterier. Man kunne f.eks. lave noget i stil med "SORT BY KRITERIE 1 AND KRITERIE 2".
Hvor KRITERIE 1 lavede en rest division og sorterede efter dette.
og KRITERIE 2 lavede en division og sorterede tallene med samme årstal efter dette.
Ovenstående kunne sættes ind i min forespørgsel og dermed ville journalerne være sorteret som ønsket.
Avatar billede rbj_fp Nybegynder
30. november 2004 - 14:28 #11
Ikke hvad jeg ved af desværre
Avatar billede oergaard Nybegynder
30. november 2004 - 14:44 #12
Nej det er også uden for min viden, men det kunne nu være smart. :-)

Det kunne da godt være, at man skulle ændre det til to felter, jeg er bare ikke helt sikker på, hvordan jeg så skal få mine nuværende moduler til at fungere efter hensigten.
Avatar billede rbj_fp Nybegynder
30. november 2004 - 15:10 #13
hmm....

Man kunne lave et ekstra module, som kan samle eller skille et journalID alt efter behov

Function samlJournalId(ByVal id As Integer, ByVal year As Integer)
    Dim result As Integer: result = 0
   
    'bruges til at flytte id ud på sig plads
    Dim temp As String
    temp = "" & year
    Dim i As Integer: i = 0
    Dim shifter As Integer: shifter = id
    While i < Len(temp)
        shifter = shifter * 10
        i = i + 1
    Wend
   
    result = shifter + year
    samlJournalId = result
End Function

e.g. til at samle et id med
Avatar billede rbj_fp Nybegynder
30. november 2004 - 15:17 #14
Sub skilJournalId(ByVal jid As Integer, ByRef id As Integer, ByRef year As Integer)
    'caster til streng
    Dim jidstreng As String: jidstreng = "" & jid
    ' antager at løsning kun skal holde til år 9999
    Dim yearstreng As String: yearstreng = Right(jidstreng, 4)
    Dim idstreng As String: idstreng = Left(jidstreng, (Len(jidstreng) - 4))
    id = CInt(yearstreng)
    year = CInt(idstreng)
End Sub
Avatar billede Slettet bruger
30. november 2004 - 15:18 #15
I tabellen som indeholder journalnr tilføjer du et felt der hedder årstal, så får du skrevet årstal på de journaler i allerede har (evt. med en tilføjelsesforespørgsel). Herefter åbner du din formular og her sorterer du først på årstal og derefter på journalnr. Du må så tilføje årstal i din formular, så i kan indtaste det i nye journaler (evt. sætte default årstal til 2004 og så skifte næste år).
Avatar billede rbj_fp Nybegynder
30. november 2004 - 15:19 #16
elegant metode spg
Avatar billede Slettet bruger
30. november 2004 - 15:21 #17
Nåh.. ja.. (mener du det?)  !~)
Avatar billede rbj_fp Nybegynder
30. november 2004 - 15:22 #18
det er jo da noget hurtigere at gøre i forhold til at de metoder jeg ville gøre... selvom at det ikke ligefrem er i bedste ide i forhold til den relationelle model :-D
Avatar billede Slettet bruger
30. november 2004 - 15:23 #19
!~)
Avatar billede mugs Novice
30. november 2004 - 16:47 #20
Du har denne række af journalnumrer:

12004, 22004, 32004, 12005 & 22005

Hvis du i din forespørgsel bruger funktionen Right:

Udtryk1: Right([Journalnr];4)

Så vil dette udtryk returnere årstallet. Herefter sorterer du FØRST på dit Udtryk1 og derefter på Journalnr. Så vil det være korrekt.
Avatar billede terry Ekspert
30. november 2004 - 18:04 #21
SELECT * from YourTable Order By Right([JournalNr], 2 ), Left ([JourNalNr], 4)

or something like that
Avatar billede terry Ekspert
30. november 2004 - 18:05 #22
THis should sort by a 2 character year and 4 character journalnr
Avatar billede mugs Novice
30. november 2004 - 21:29 #23
Jeg tænkte først på terry's forslag, men det samlede antal karakterer i jorunalnr vil jo variere afhængig af hvor mange jornaler der oprettes.

Hvorimod mit forslag jo altid returnerer 2 karakterer fra højre svarende til årstallet, som jo i en del år endnu stadig vil være 4-cifret.

Men der kommer jo nok snart en snedigt forslag ;o)
01. december 2004 - 09:36 #24
Hvad med denne:

Select * From DinTabel Order By Right(Journalnr, 4), val(Left(Journalnr, len(Journalnr)-4))
Avatar billede mugs Novice
01. december 2004 - 12:38 #25
YES!
Avatar billede oergaard Nybegynder
02. december 2004 - 11:58 #26
Hej så er jeg tilbage.

Jeg har prøvet de forskellige forslag, men den som virker helt efter hensigten er thomasjepsen's svar, hvorfor jeg giver ham de 200 points.

I skal dog alle have tusind tak for hjælpen.

//Oergaard
02. december 2004 - 12:04 #27
Det skal du ikke høre ét ondt ord for ;~)

Tak for det :o)
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