16. februar 2010 - 21:27Der er
18 kommentarer og 1 løsning
dynamisk søgefunktion med dobbelt kriterie
Nedenstående kode udsøger alle medarbejdere der er ansat pr. den dato der skrives i [oplysninger pr.]. Koden virker fint på de medarbejdere der er fratrådt, men ikke på dem der ikke er fratrådt. Koden skal derfor udsøge de medarbejdere hvor ansættelsesdatoen er mindre eller lig med [oplysninger pr] OG fratrædelsesdato er blank ELLER fratrædelsesdato er større end [oplysninger pr] Hvordan kringles den ?
If Me![oplysninger pr] <> "" Then SQLStr = SQLStr & "[ansættelsesdato] <= #" & Format(Me![oplysninger pr], "yyyy-mm-dd") & "# and " End If If Me![oplysninger pr] <> "" Then SQLStr = SQLStr & "[fratrædelsesdato] >= #" & Format(Me![oplysninger pr], "yyyy-mm-dd") & "# and " End If
>> Christian. Blander mig lige. Du mangler en lille (ikke ubetydelig) krølle.
Bemærk spm: ...hvor ansættelsesdatoen er mindre eller lig med [oplysninger pr] OG fratrædelsesdato er blank ELLER fratrædelsesdato er større end [oplysninger pr]
Din løsning medtager kun poster, hvor ansættelses- og fratrædelsesdatoerne begge er udfyldt.
Se i mit svar #2. Her er udtrykket: ansættelsesdatoen er mindre eller lig med [oplysninger pr] OG fratrædelsesdato er blank ELLER fratrædelsesdato er større end [oplysninger pr]
Sorry, havde ikke set dit svar. Vi er tæt på. Men af en eller anden grund tager din kode også data med hvor [oplysninger pr] ligger før ansættelsesdatoen. Det gør koden i #6 ikke.
Til oplysning skal det nævnes at jeg har smidt SQLStr = SQLStr & "[medarbejdernummer] like '*" & Me!Medarbejdernummer & "*' And " ind på hver sin side af OR
fdata, de indlaeg vi sendte med 4 minutters mellemrum (du foerst mens jeg skrev mit) har det til faelles at de fjerner det dobbelte IF END IF hvilket synes at vaere hovedproblemet i koden i det oprindelige spoergsmaal.
dane022 (og fdata), det jeg konstaterede er at den kode du i #6 siger virker og som du synes at vaere tilfreds med svarer til mit indlaeg.
fdata synes saa at sige at du ikke burde vaere tilfreds med koden i #t6 (og med min kode) fordi de ikke tester for blanke dater, og i #9 siger du saa det samme.
Lad mig lave to kommentarer: (1) Jeg er selv i gang med at laere Access (startede for cirka to maaneder siden) og det er tilfredsstillende og jeg giver mig selv interne points for at jeg kunnet se hovedproblemet og foreslaa en loesning der virker.
(2) Det er ved at vaere sengetid i Belgien hvor jeg bor. Nu hvor du har en loesning paa det problem du stillede synes jeg at du boer lukke spoergsmaalet og uddele points som du skoenner. Jeg kikker paa traaden i morgen tidlig.
Og saa igen, #11 blev sendt mens jeg skrev min #12. Jeg stopper. Held og lykke med at fastlaegge hvilken kode du vil bruge.
Synes godt om
Slettet bruger
17. februar 2010 - 09:49#14
Her er et eksempel for at vise princippet, der kan give dig din løsning:
qFraTraadt: SELECT tblAnsatte.Navn, tblAnsatte.Fratraadt FROM tblAnsatte WHERE (((tblAnsatte.Fratraadt)<=[DinDato:]));
...og endelig forespørgsel:
SELECT tblAnsatte.Navn, tblAnsatte.Ansat, tblAnsatte.Fratraadt FROM tblAnsatte LEFT JOIN qFraTraadt ON tblAnsatte.Navn = qFraTraadt.Navn WHERE (((tblAnsatte.Ansat)<=[DinDato:]) AND ((qFraTraadt.Navn) Is Null));
Jeg er glad for de mange input, det er godt at være omgivet af eksperter.
Christian: Jeg skriver i #1 at koden skal udsøge de medarbejdere der er aktive på den gældende dato. Din kode i #4 er egentlig bare en gentagelse af den jeg havde i forvejen, men uden dobbelt IF og END IF. De gør ingen forskel, men er selvfølgelig unødvendige.
Den kode der kom tættest var #2. Den havde kun den fejl, at var fratrædelsesdatoen udfyldt og udsøgningsdatoen lå før ansættelsesdatoen, kom medarbejderen stadig frem. Fdata får derfor point. Den tilrettede kode: If Me![oplysninger pr] <> "" Then SQLStr = SQLStr & "[medarbejdernummer] like '*" & Me!Medarbejdernummer & "*' And " SQLStr = SQLStr & "(([ansættelsesdato] <= #" & Format(Me![oplysninger pr], "yyyy-mm-dd") & "# AND [fratrædelsesdato] Is Null)" SQLStr = SQLStr & " OR " SQLStr = SQLStr & "[medarbejdernummer] like '*" & Me!Medarbejdernummer & "*' And " SQLStr = SQLStr & "[ansættelsesdato] <= #" & Format(Me![oplysninger pr], "yyyy-mm-dd") & "# and " SQLStr = SQLStr & "([fratrædelsesdato] >= #" & Format(Me![oplysninger pr], "yyyy-mm-dd") & "#)) and " End If
fdata, jeg har først lige set dine indlæg fra idag. Håber du med mit sidste indlæg forstod hvad jeg mente, men det vigtige er jo at det er løst. Koden blev måske bare lidt længere end du selv ville have gjort den til, men for mig er det vigtigste at det virker
No sweat. Din løsning er jo i runde tal magen til mit forslag. Takker for point ;o)
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.