Søke gjennom records i query ved hjelp av verdi i tekstboks
En problemstilling jeg ikke klart å løse: En rekke med tekstbokser innholder datoer, starter med dagens dato og stiger med en dag per tekstboks: 01.01.2011 02.01.2011 03.01.2011 og forsetter sånn til jeg nådd 14 dager.
Nedenfor har jeg en query som viser dette (Subform): Fra Til 01.01.2011 05.01.2011 10.01.2011 13.01.2011 17.02.2011 03.03.2011
Det jeg nå ønsker er: Hvis tekstboks 1 ligger innenfor noen av datoene, dvs. mellom 01.01 til 05.01 ,mellom 10.01 til 13.01 eller 17.02 til 03.03 skal den bli f.eks. rød, det samme gjelder for alle tekstbokser frem til den 14 dagen (tekstboksen). Hvis tekstboksen med dato ikke får noen "treff" forblir den uforandret. Jeg har testet med "Conditional formatting" for tekstboksen og det fungerer OK med "value between", men hvordan får jeg boksen å søke igjennom alle records i queryen?
Det enkleste vil være at oprette 14 hjælpe-controls, som tjekker datoen. Selve datofeltet kan så formateres via hjælpefeltets værdi. Altså:
1. I et vilkårligt modul lægger du koden, der skal tjekke datoen (ret selv tabel- og feltnavne):
Function Hit(Datoen As Date) As Boolean Dim DummyRst As Recordset
Hit = False Set DummyRst = CurrentDb.OpenRecordset("FraTilDatoer", dbOpenSnapshot) With DummyRst Do Until Hit Or .EOF If (Datoen >= !FraDato) And (Datoen <= !TilDato) Then Hit = True .MoveNext Loop .Close End With Set DummyRst = Nothing End Function
2. Opret 14 tekstbokse (her kaldet T1 - T14)
3. Sæt ControlSource for T1 til =Hit([D1]), sæt T2 til =Hit([D2]) osv. Samme fremgangsmåde for de 12 andre felter. (I eksemplet her kaldes datofelterne D1 - 14) Nu vil T1 - T14 vise, om de tilknyttede datoer ligger i et af intervallerne.
4. Formatér D1 via Conditional formatting. Betingelsen skal være: Expression Is: [T1]=True Samme fremgangsmåde for de 13 andre felter.
En stund siden jeg fikk sett på dette, men ditt forslag fungerer aldeles utmerket :-)). Går det å videreutvikle dette? I mitt tilfelle kjører jeg en query som resulterer i forskjellige navn og forskjellige datoer. Resultatet kommer ut på en continious form. Med din løsning vil alle få samme "HIT" på datoer uansett hvem fra til datoen tilhører. Er det en løsning så man knytter de forskjellige "hiten" til forskjellige personer.
Ole har fri på D1 D2 D3
Nils har fri på D3 D4 D5
Resultatet med din løsning blir til at både Ole og Nils har fri på D1 til D5 .
Du skal naturligvis få dine points for den første løsningen.
- Du har en continious form. Har du her de 14 datofelter (og de 14 hjælpefelter) på hver eneste linje?
- Du har også en subform, som viser dato-intervallerne.
Jeg kan ikke helt se din løsning for mig. Vil du forklare lidt mere?
---
Hvis det kun er et spørgsmål om at udvide hit-rutinen, vil det se sådan ud:
Function Hit(Datoen As Date, Medarb as String) As Boolean Dim DummyRst As Recordset
Hit = False Set DummyRst = CurrentDb.OpenRecordset("FraTilDatoer", dbOpenSnapshot) With DummyRst Do Until Hit Or .EOF If (Datoen >= !FraDato) And (Datoen <= !TilDato) And (!Medarbejder=Medarb) Then Hit = True .MoveNext Loop .Close End With Set DummyRst = Nothing End Function
Har nå 3 utfordringer til, hvis du muligvis har en løsning på det og? 1. Hvis jeg har lagt in flere perioder på en person dvs. 01.06.11 til 03.06.11 og 09.06.11 til 15.06.11 så vises det helt riktig sånn som du har gjort det, men navnet vises en gang for hver periode i formen, altså i dette tilfelle kommer navnet opp 2 ganger og med begge periodene markert på begge steder.
2. Trenger også legge til et par element til "conditional formatting", i tillegg til "HIT" så har jeg 3 forskjellige status som betyr forskjellige ting, eks. datoen skal bli rød ved status 1, grønn status 2, gul status 3. Dette er et tall man legger inn i tillegg til dato rangen. eks. datofra datotil statusX.
3. I formen som er en continious så vil det alltid følge med en tom post til slutt, eller det vill alltid vises en tom post når det ikke finnes noen data, er det en løsning på dette og?
Ad 1) Forstår jeg ikke. Jeg kan stadig ikke forestille mig din formular. Du må nok forklare lidt mere om hvordan du har kombineret forms og subforms.
Ad 2) Hvis jeg opfatter det korrekt, må du vel skulle rette Conditional formatting til: Condition 1 = Expression Is: [T1]=True AND [StatusX]=1 Condition 2 = Expression Is: [T1]=True AND [StatusX]=2 Condition 3 = Expression Is: [T1]=True AND [StatusX]=3
Ad 3) På formularens Properties vindue, fanen Data retter du AllowAdditions til False.
For å forklare litt om prosjektet mitt, dette er en oversikt over tilgjengelighet på service personell. Jeg har en form hvor jeg legger inn alle data om service personer, navn, telefon, kompetanse osv. Denne formen har også en subform hvor alle fravær eller tilgjenglighet registeres i fra og til datoer. Dette kan gjelde sykdom, opptatt med andre jobber, møter, kurs eller annet, dette gir en så kalled tilgjenglighet status i 4 kategorier, 1, 2, 3 eller 4. Denne formen kan kun brukes av adm. personer som legger inn disse data. Denne har jeg allerede laget.
Neste skritt i prosjektet er det vi snakker om, det gjelder personer som til daglig fordeler jobber når kunder ringer inn en bestilling. De må kunne se om en serviceperson er tilgjengelig. Her har jeg laget en ny form basert på en query, for å få frem kun de data som er nødvendig for jobb fordeler. Har først en combobox i form header hvor du velger hvilken region du søker etter, eks byer i Norge hvor det forskjellige service personellet jobber. I form header har jeg også alle rubrikker til de forskjellige kolonnene, navn, telefon..... I form header har jeg også lagt inn 14 dagers dato rubrikker, med start, alltid fra dagen dato, over her har jeg også ukenummer og måned . Dette blir lagt opp når man åpner formen. Derfor vil det ikke fungere med å sette AllowAdditions til False, har prøvd det, finnes det en annen løsning? I selveste formen, som er continous får jeg da frem alle person data, og i tillegg fravær med forskjellig status, med fra og til datoer. Dette presenteres i en linje per person, kan altså ha et fravær fra dag 1 til 4 og et kurs fra dag 9 til 13. Vises med forskjellige farver i tekst bokser bak alle andre data på samme linje.
Så langt har du løst problemstillingen utmerket, det som nå gjenstår er: hvis en person har flere intervaller i datoer, dukker det opp en ny linje for hver ‌intervall, men alle periodene er helt riktig presentert i hver linje, får altså dubletter av det jeg fikk opp første gangen jeg fikk en hit på en person. Jeg trenger kun en linje per person med alle dato intervaller presentert.
OK. Hvis der er tale om reelle dubletter, kan du forhindre det ved at ændre forespørgslens egenskaber/properties. Se evt. forklaring her: http://technologytraining.psu.edu/node/99
Må først takke for din tålmodighet med meg, jeg er ganske ny på dette. Har nå prøvd ditt siste forslag, men får da en annen feil i formen min, er det mulig for meg å få sendt dette over til deg, litt lettere enn at jeg forklarer hva som skjer?
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.