Avatar billede dsj1972 Juniormester
15. oktober 2024 - 13:19 Der er 17 kommentarer

hjælp til problem med filtrering af formular

Hej,

Jeg har et problem med en formular med underformular på og på underformularen har jeg et problem med at for den til at kun oprette det som jeg indskriver det, men lige så snart der opdateres eller gåes videre til ny post oprettelse, vender alle posterne på underformular sig som det nu behager.

Jeg har forsøgt at fjerne alt filtrering på formular og underformular, dog uden held.

Der er en del opslag på underformular, og jeg tænkte om det måske kan være årsag til at der vendes om på rækkefølge??

Nogen der har en ide til hvad man kan gøre for at man kan beholde den rækkefølge på poster som man indtaster der?

Mvh Dsj
Avatar billede Gustav Ekspert
15. oktober 2024 - 14:01 #1
De to formularer skal knyttes sammen via hovedformularens underformularkontrolelement (der indeholder underformularen) og dennes to Data-egenskaber:

- OverordnedeFelter
- UnderordnedeFelter

Normalt vil den første indeholde feltet, som er den primære nøgle i hovedformularens datasæt.
Den anden vil indeholde feltet i underformularens datasæt, der skal matche hovedformularens primære nøgle.
Avatar billede dsj1972 Juniormester
15. oktober 2024 - 15:03 #2
Formularen Ordre består af hoved formular Ordre og underformular OrdreDetaljer.
Hovedformular er oprettet fra tabel, underformular via forspørgsel.

de OverordnedeFelter og underordnedeFelter Har Ordre_Id som er hoved formularens primære nøgle. Ordre_Id indgår også i underformularens forspørgsel.

Håber jeg har forklaret det rigtigt, ellers spørg.

Formularen virker sådan set fint, lige bortset fra den irriterende detalje at den selv vil bestemme hvilken rækkefølge posterne i underformular skal stå.

Jeg bemærkede ved tjek af de over og underordnede felter at der er en "filtrer på tom master", ved ikke helt hvad den gør, men denne står til ja. Bør det ændres?
Avatar billede Gustav Ekspert
15. oktober 2024 - 15:16 #3
Rækkefølgen af posterne bestemmes af sorteringen i underformularens forespørgsel eller hvis du specificerer en sortering i selve underformularen.

Har du ikke angivet nogen sortering, vises posterne i en uforudsigelig orden.
Avatar billede dsj1972 Juniormester
15. oktober 2024 - 15:31 #4
Der er såvidt ikke sat nogen sortering i underformularens forspørgsel.
Kan man bestemme at der ikke skal vises i uforudsigelig orden i posterne på underformularen???
Avatar billede Gustav Ekspert
15. oktober 2024 - 19:37 #5
Ja. Sortér posterne enten i formularen eller i dens forespørgsel, ikke begge steder.
Avatar billede dsj1972 Juniormester
21. oktober 2024 - 12:14 #6
Hej igen,

Sorry var lige på en lille efterårs ferie med ungerne.

Nu skriver du som forslag at jeg skal sortere i posterne enten på formular eller forspørgsel.

Nu ville jeg jo helst gerne at der ingen sortering var, således at posterne på underformular forbliver i den rækkefølge som jeg har indtastet dem.

Du skrev tidligere at hvis man ikke angiver en sortering/filter så vises posterne i uforudsigelig orden, kan man ikke angive at access slet ikke skal gøre noget ved indtastning?
Avatar billede Gustav Ekspert
21. oktober 2024 - 12:35 #7
Normalt - og især hvis der er få poster - vil Access vise posterne i den rækkefølge, de er tilføjet - der er bare ingen garanti for det, for en database er ikke et regneark.

Så hvis du vil have en garanteret rækkefølge, må du angive den og så sortere efter den.
I praksis vil man sætte og bruge et positionsnummer på linjen og så sortere efter det. Det vil også tillade nemt at ændre rækkefølgen, når man lige har glemt en linje.

Hvordan det kan gøres, kan du se i min artikel:

https://www.experts-exchange.com/articles/33069/Sequential-Rows-in-Microsoft-Access.html?preview=GaU3/YU%2BQm8%3D

i afsnittet:

3. Priority Numbers

Fuld kode:

https://github.com/GustavBrock/VBA.RowNumbers
Avatar billede dsj1972 Juniormester
19. november 2024 - 13:26 #8
Hej ,

Nu har jeg kigget på din artikel og prøvet at lege lidt med det, men kan ikke helt få det til at virke, den brokker sig lidt med funktionen RowNumber, som jeg tænkte ville bruge, da jeg tænker at ved at bruge det i en forspørgsel, vil jeg bedre kunne bruge det på rapporter. Men den skriver at funktionen RowNumber ikke er defineret når jeg prøver at kører forspørgsel.
Avatar billede Gustav Ekspert
19. november 2024 - 13:46 #9
Du skal enten have kopieret og indsat funktionen i et modul eller - måske enklere - importere hele modulet RowEnumeration.bas.
Der er også en demo, du kan downloade og eksperimentere med.
Avatar billede dsj1972 Juniormester
19. november 2024 - 13:53 #10
Jeg prøvede faktisk noget lign, ved at bruge OrdreDetalje ID Og det virker sådan set fint nok, men tænker det nok ikke er den bedste måde, hvis man sletter eller indsætter poster og Jeg kan egentlig godt lide tanken om RowNumber særlig GroupRowNumber som du viser i OrderDetail query .
Avatar billede Gustav Ekspert
19. november 2024 - 14:10 #11
Ellers - hvis du i vinduet vil flytte poster op/ned i listen - er det måske RowPriority, du skal kigge på.
Den er noget anderledes, og du skal nok starte med demoen for at se den fungere. Men er det, hvad du efterlyser, er den virkelig smart.
Avatar billede dsj1972 Juniormester
19. november 2024 - 14:41 #12
I din Demo RowNumbers den nyeste, har du en Query Order Details Row Numbers
Hvor du bruger den henne kan jeg ikke se, men grunden til at jeg kigger på den er at den passer meget godt med det jeg skal bruge, da min sub Form netop er lavet på min OrdreDetalje Query og derfra kan jeg jo sortere på mine rapporter ud fra GroupRowNumber.

Som jeg ser det er din demo lavet over tabellen Products og det er en enkelt form.
Men jeg har jo en hoved form "Ordre" med en subform "OrdreDetaljer"
Og på hoved form har jeg så knapper til at kalde/udskrive forskellige rapporter som Faktura, Følgeseddel og Ordre Bekræftelse og I disse rapporter skulle det gerne stilles op i den række følge som det er tastet ind og det mener jeg godt det kan ved sortering på rapporterne efter GroupRowNumber, Men jeg bøvler som sagt med at få funktionen til at virke, det virker som om den ikke bliver kaldt og nu har jeg prøvet med hele enumkoden i modul. Men jeg har så også opdaget at jeg ikke kan få feltet" RowNumber in på min SubForm, men det skyldes jo nok at funktionen ikke "findes" som Acces hævder
Avatar billede Gustav Ekspert
19. november 2024 - 15:05 #13
OK.
Men det fungerer på helt samme måde med en underformular, dog skal du naturligvis bruge underformularens recordset, og det er heri, RowNumber skal bruges i et udtryk.
Avatar billede dsj1972 Juniormester
20. november 2024 - 13:20 #14
Det driller stadig,

Men tror dog at jeg har fået løst problemet, det ser ihvertfald fint ud forløbig.
Men kom gerne med bemærkning hvis du mener det kan få konsekvens på en eller anden måde.

Jeg brugte DCount i de relevante forspørgelser, sådan her:

NR: IIf(IsNull([Ordre_Detalje_ID]);Null;Nz(DCount("Ordre_Detalje_ID";"OrdreDetaljerT";"OrdreDetaljerT.Ordre_ID=" & [OrdreDetaljerT].[Ordre_ID] & " AND Ordre_Detalje_ID<" & [Ordre_Detalje_ID]);0)+1)

Og så sortere jeg bare efter NR i de relevante rapporter.

spm skal jeg indsætte .refresh eller requery ved delete eller indsættelse på form?
Avatar billede Gustav Ekspert
20. november 2024 - 13:44 #15
Det er da fint, hvis det virker. Fidusen med RowNumber er, at den cacher data, så den kun behøver læse recordsettet én gang, men hvis du kun har få poster, gør det næppe nogen synlig forskel.
En test vil hurtigt afsløre, om du behøver at genforespørge.
Avatar billede dsj1972 Juniormester
20. november 2024 - 14:00 #16
Jeg skal nok lege lidt mere med RowNumber funktionen og se om jeg kan få den til at virke på en test db.

Med få poster, mener du så i subformularen? eller det samlede antal poster i Ordredetalje tabel/query

på sub formular bliver der vel indtastet max 15-20 poster pr Ordre.
Avatar billede Gustav Ekspert
20. november 2024 - 14:15 #17
Det var de 15-20.
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