19. juni 2004 - 21:45Der er
14 kommentarer og 1 løsning
Udsøgning med "betingede" kriterier
Hejsa,
jeg har en formular hvorpå jeg indtaster kriterier til en forespørgsel. Jeg har bl.a. felterne:
PostNrFra og PostNrTil StillingsbetegnelseFra StillingsbetegnelseTil
Jeg vil nu gerne have det sådan, at hvis jeg f.eks. kun indtaster en værdi i PostNrTil, så skal forespørgslen udsøge * Alle postnumre op til værdien i PostNrTil * Alle stillingsbetegnelser
Altså hvis jeg ikke taster noget i felterne, skal forespørgslen bare vælge alt, men hvis jeg taster noget i et af felterne skal den tage feltet i betragtning under søgningen.
I forespørgslen har jeg disse kriterier:
PostNummerfelt: >[Forms]![KriterieForm]![PostNummerFra] AND <[Forms]![KriterieForm]![PostNummerTil]
StillingsbetegnelseFelt: >[Forms]![KriterieForm]![StillingsbetegnelseFra] AND <[Forms]![KriterieForm]![StillingsbetegnelseTil]
Men man kan jo ikke gøre en del af en WHERE clause betinget ?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Du kan i din formular indsætte nogle filtrer, der begrænser udvalget af poster. Du kan herefter f.eks udskrive en rapport med formularens filter, så rapporten er en afspejling af din formular.
Thomas Jepsen har lavet et fremragende esempel, som jeg selv har brugt i flere sammenhænge. Kan downloades her og hedder noget med filter og søgning:
i sandhed smart det Thomas har lavet der, men det er ikke lige det jeg skal bruge. Jeg har en opdateringsforespørgsel, som udsøger nogle data og opretter disse i en tabel.
Til denne forespørgsel, har jeg som sagt en form, hvor jeg kan aflevere nogle kriterier.
I Thomas' eksempel, er det jo et filter i en form, hvorfor man nemt kan ændre på kriterierne, ved at bygge en helt ny SELECT sætning, og fodre formen med denne.
Men, man kan jo, så vidt jeg ved, ikke ændre på en forespørgsels kriterier runtime kan man ?
Til dagligt koder jeg i Axapta (x++). I dette sprog kan man runtime bygge en query (forespørgsel), og anvende denne til hvilket som helst formål. Kan dette lade sig gøre i Access ?
Jeg ved ikke om det er det nemmeste men det kan gøres ved at: lave et modul med
Public strPostnummer as string Public strStilling as string
function GetPostnummer()¨ getpostnummer = strpostnummer end function
function GetStilling() getstilling = strstilling end function
Og i din formulars kommandoknap at skrive: if me!postnummerfra = "" or isnull(me!postnummerfra) then if me!postnummertil = "" or isnull(me!postnummertil) then strpostnummer = null else strpostnummer = "<" & me!postnummertil else if me!postnummertil = "" or isnull(me!postnummertil) then strpostnummer = ">" & me!postnummerfra else strpostnummer = ">" me!PostNummerFra & " AND < " & me!PostNummerTil endif
if me!Stillingsbetegnelsefra = "" or isnull(me!Stillingsbetegnelsefra) then if me!Stillingsbetegnelsetil = "" or isnull(me!Stillingsbetegnelsetil) then strStilling = null else strStilling = "<" & me!Stillingsbetegnelsetil else if me!Stillingsbetegnelsetil = "" or isnull(me!Stillingsbetegnelsetil) then strStilling = ">" & me!Stillingsbetegnelsefra else strStilling = ">" me!StillingsbetegnelseFra & " AND < " & me!StillingsbetegnelseTil endif
Du kan herefter hente dine kriterier ved at skrive hhv = getpostnummer() og = getstilling() i dine kriteriefelter
Der var et par småfejli formularkoden. Den skal være:
If me.postnummerfra = "" or isnull(me.postnummerfra) then If me.postnummertil = "" or isnull(me.postnummertil) then strpostnummer = null Else strpostnummer = "<" & me.postnummertil End if Else If me.postnummertil = "" or isnull(me.postnummertil) then strpostnummer = ">" & me.postnummerfra Else strpostnummer = ">" me.PostNummerFra & " AND < " & me.PostNummerTil End if End if
If me.Stillingsbetegnelsefra = "" or isnull(me.Stillingsbetegnelsefra) then If me.Stillingsbetegnelsetil = "" or isnull(me.Stillingsbetegnelsetil) then strStilling = null Else strStilling = "<" & me.Stillingsbetegnelsetil End if Else If me.Stillingsbetegnelsetil = "" or isnull(me.Stillingsbetegnelsetil) then strStilling = ">" & me.Stillingsbetegnelsefra Else strStilling = ">" me.StillingsbetegnelseFra & " AND < " & me.StillingsbetegnelseTil End if End if
Jeg har prøvet at få Heklas metode til at virke, og jeg har også prøvet din Terry. Men jeg synes ikke jeg kan få det til at virke :(. Jeg vil prøve igen i aften, simpelthen ved at bygge queryen dynamisk, og så hører I lige fra mig igen. Håber det er i orden ?
Jeg fik det til at virke. Med "CurrentDb.QueryDefs("QueryNameGoesHere").Sql = "..." fremgangsmåden. Et spørgsmål m.h.t. dette. I et flerbrugermiljø, kan der da opstå problemer, hvis flere brugere tilgår queryen med forskellige SQL-sætninger ???
In relation to your last question. "I et flerbrugermiljø ....." I would have to answer NO to this, because if a multi-user system was made correctly, then each user (in my oppionion) should have a copy of the front-end database, and this contains forms, reports and also TEMP tables and queries. So each user will only have access to their own TEMP tables and queries. The back-end database which is located on a file server contains "global" tables and queries.
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.