Avatar billede norway Nybegynder
12. april 2011 - 17:45 Der er 13 kommentarer

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?
Avatar billede fdata Forsker
12. april 2011 - 18:45 #1
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.

5. Skjul T1 - T14.

Så burde det funngere :o)
Avatar billede norway Nybegynder
31. maj 2011 - 18:56 #2
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.
Avatar billede fdata Forsker
31. maj 2011 - 22:00 #3
Jeg skal lige forstå dig korrekt.

- 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

Kaldet bliver så: Hit([D1],[Medarb])
Avatar billede norway Nybegynder
01. juni 2011 - 10:54 #4
Knallgodt, fungerer utmerket :-))

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?
Avatar billede fdata Forsker
01. juni 2011 - 13:46 #5
The never ending story ;o)

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.
Avatar billede norway Nybegynder
02. juni 2011 - 22:40 #6
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 &#8204;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.
Avatar billede fdata Forsker
03. juni 2011 - 13:09 #7
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
Avatar billede norway Nybegynder
06. juni 2011 - 09:44 #8
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?
Avatar billede fdata Forsker
06. juni 2011 - 18:31 #9
Jeg tror, vi er tæt på målet. Send en lille database til
  eksperten snabela f-data dot dk
så ser jeg på den.
Avatar billede fdata Forsker
15. juni 2011 - 23:11 #10
Har modtaget db, flyttet en del af data til subform og returneret løsning.
Avatar billede norway Nybegynder
16. juni 2011 - 09:22 #11
Da er vi så nærme en løsning at jeg gir mine 600 points
Avatar billede fdata Forsker
16. juni 2011 - 20:38 #12
Takker for point ;O)
Avatar billede norway Nybegynder
04. juli 2011 - 11:16 #13
Case Closed and point given
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