Avatar billede jcool Nybegynder
12. januar 2001 - 12:23 Der er 2 kommentarer og
1 løsning

opslag på felt i form

Hvordan får man en form til at åbne med en max-værdi i et tal-felt, samtidig med at formen er sorteret alfabetisk efter et andet felt ?
Avatar billede janbangm Nybegynder
12. januar 2001 - 12:35 #1
Der er en funktion jeg kan ikke huske hvad den hedder men der en af de funktioner der begynder med stor C. Prøv evt at se under hjælp Funktioner C, der kan konverter fra tekst til tal. Hvis du laver en forspørgsel, kan du godt et sted sortere efter tekst og så bruge Max sammen med den funktion jeg ikke kan huske. Ellers skrivn igen
Avatar billede kru Nybegynder
18. januar 2001 - 14:57 #2
Det er bedst (=mest overskueligt) at bruge to forespørgsler - en til formularen og en til feltet. Hvis det skal være nemt, kan du bruge DlookUp, men den er lidt langsom. Ellers bruger du den samme forespørgsel to gange, men aggregerer den på Maks for den der ligger til grund for feltet. Hvis du skal bruge flere agreggatværdier (Min, Antal, Første, Sum etc..) kan du ændre i forespørgslen, så du henter allesammen på en gang.

Alternativt kan du loope gennem formularens recordset og indsætte maksværdien i et ubundet felt. Dette er det hurtigste, især hvis det er en krævende (langsom) forespørgsel der er datakilde til formularen. Men det er lidt mere besværligt at få banket ind under de rigtige hændelser, og det hele skal skrives i VBA.

Hvis du har brug for et mere specifikt svar, må du skrive lidt om formularens og forespørgslens opbygning iøvrigt.

Håber det hjælper

P.S. Iøvrigt hedder changefunktionerne CStr, CInt, CBool etc.
Avatar billede kru Nybegynder
20. januar 2001 - 15:00 #3
Jeg synes ikke det var en helt fair besvarelse jeg gav, så for at uddybe lidt:

Hvis din formular er simpelt opbygget (=dataene der skal Maks\'es er samme i samme formular og ikke underformular) kan du nøjes med:

=Maks([feltnavn]), som kontrolelementkilde til feltet.

Sorteringen burde ikke gøre nogen forskel.

Er den derimod et virvar af underformularer, så du ikke kan referere direkte til datakilden, kan du evt. lave samme trick med et skjult felt, som du så referer til via:

[Overformular]![Underformular1]![Feltnavn].

Hvis du derimod kun vil have maks for et bestemt udvalg af records kan du bruge en (I dit tilfælde DMax()) funktion som kontrolelementkilde). Der er nemlig mulighed for at angive kriterier, eks.:

=DMax(\"[Pris]\";\"MinTabel\";\"[Navn] = \'\" & [Navnefelt] & \"\'\")

Er DMax for langsom og/eller bryder du dig ikke om skjulte felter (Eller er der mange aggregater der skal udregnes på en gang) kan du køre en ekstra forespørgsel ved åbning af formularen, således:

Private Sub Form_Open(Cancel As Integer)
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(\"SELECT Max(MinTabel.Pris) AS prissum FROM MinTabel;\", dbOpenSnapshot)
Prisfelt = rs!prissum
rs.Close
End Sub

(Bemærk dette er DAO-syntaksen (Access\'97), bruger du ADO (Access2000) er syntaksen lidt anderledes.)
Fordelen ved denne metode er at du kan aggregere mange felter på en gang fremfor først at DMax\'e og derefter DCount, DSum, DMin etc. (Access kører nemlig en lille forespørgsel hver eneste gang du bruger en sådan funktion - det er derfor de er lidt langsomme).

Nu hvor du har givet mig point, skal du også have et ordentligt svar...  :0))
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