Avatar billede dane022 Seniormester
08. februar 2010 - 23:50 Der er 9 kommentarer og
1 løsning

Datoudsøgning af ikraftdato mellem 2 datoer

I min tabel er der en oversigt over medarbejderdata og 2 datoer for oplysningernes start- og slutdato.
Der er ikke noget datooverlap.

Det kunne f.eks. så sådan ud:
Medarbejdernr  startdato    slutdato
1              1-1-2009    31-12-2009
1              1-1-2010
2              1-4-2009    30-06-2009
2              1-7-2009
osv

Hvis jeg ønsker at udsøge medarbejderdata (på medarbejdernr) pr. en bestemt dato, så jeg får vist data som var gældende på den dato, hvordan gøres det så i vba?
Avatar billede Slettet bruger
11. februar 2010 - 00:17 #1
dette giver medarbejdernr:

with currentdb.openrecordset("select * from <tabel> where <searchdato> >= startdato and <searchdato> <= slutdato")
while not .eof
debug.print !medarbejdernr
.movenext:wend:end with
Avatar billede dane022 Seniormester
11. februar 2010 - 22:10 #2
"Der er syntaksfejl i FROM-delsætningen"
Kode: Private Sub Kommandoknap33_Click()
With CurrentDb.OpenRecordset("select * from <stamoplysninger> where <ret oplysninger pr> >= <oplysninger start> and <ret oplysninger pr> <= <oplysninger slut>")
While Not .EOF
Debug.Print !medarbejdernr
.MoveNext: Wend:
End With
End Sub
Avatar billede Slettet bruger
12. februar 2010 - 18:19 #3
Du skal ikke bruge vinkelparentes omklamring - det er blot noget jeg tilføjede for at illustrere ting 'der skal hedde noget andet i virkeligheden'

Feltnavne, med mellemrum, som 'ret oplysninger pr', skal omklamres i kantparenteser.

Der kan være en god ide først at lave forespørgslen i databasevinduet->forespørgsler - chekke at resultatet er som ønsket og derefter bruge sql udtrykket i vba koden.
Avatar billede dane022 Seniormester
12. februar 2010 - 18:35 #4
"Der er for få parametre, der var ventet 1"
kode: With CurrentDb.OpenRecordset("select * from stamoplysninger where [ret oplysninger pr] >= [oplysninger start] and [ret oplysninger pr] <= [oplysninger slut]")
While Not .EOF
Debug.Print !Medarbejdernummer
.MoveNext: Wend:
Avatar billede Slettet bruger
12. februar 2010 - 20:30 #5
'ret oplysninger pr' er nok ikke et feltnavn så.

Hvis 'oplysninger start' og 'oplysninger slut' er feltnavne, skal du sammenligne med noget der kan konverteres til dato streng.

dato="4-1-2009" ' bemærk, 1. april, amerikansk dato: mm-dd-yyyy

sql = "select * from stamoplysninger where #" & dato & "# >= [oplysninger start] and #" & dato & "# <= [oplysninger slut]"

with currentdb.openrecordset(sql)
...



Nu ønsker man jo ofte en dato som parameter - indeholdt i en variabel eller et argument til funktion og denne vil, på datoer der kan mistolkes, på en computer med danske sproginstillinger, blive til en forkert datostreng overfor sql database funktionaliteten.

Derfor anvender jeg ofte denne funktion:

Function amrDate(dat As Date)
    amrDate = "#" & Format(dat, "mm-dd-yyyy") & "#"
End Function
Avatar billede dane022 Seniormester
12. februar 2010 - 21:46 #6
Der er noget vigtigt jeg har glemt at fortælle dig. De data der skal hentes frem i søgningen, skal hentes til en ubundet formular, så man ikke retter i den eksisterende record, men kun retter de ubundne data som til sidst bliver til en ny record i tabellen.

Jeg er ikke ekspert, men jeg ved at denne nye oplysning gør det en del sværere. Jeg kan sagtens smide flere point i, hvis det er nødvendigt. Er det noget du kan hjælpe mig med, eller er vi derude hvor vi må opgive?
Avatar billede dane022 Seniormester
13. februar 2010 - 01:08 #7
Jeg har fået løst mit problem, men du må gerne få pointene for ihærdighed, hvis du smider et svar
Avatar billede Slettet bruger
13. februar 2010 - 09:23 #8
Skriver ikke for at hjælpe men for at belyse - i #2, hvor lidt der skal til for at 'loop through recordset'
Generelt er det ikke interessant at en spørger har fået løst problemet, men hvordan.
Avatar billede dane022 Seniormester
13. februar 2010 - 20:01 #9
Måden det er løst på, er at combo boxen "oplysninger pr", får rowsource fra den record hvor medarbejdernr matcher.

Med f.eks. [Oplysninger start] = [oplysninger pr].Column(2) i comboens afterupdate, henter man indhold frem til de ubundne felter

Hvad gør jeg med point?
Avatar billede dane022 Seniormester
16. februar 2010 - 21:21 #10
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