08. februar 2010 - 23:50Der 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?
PCIe Gen 5 – Fremtidig teknologi eller opgradering nu? Lad os gå lidt tilbage i tiden, før vi hopper direkte ind i fremtiden.
12. maj 2025
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
"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
Synes godt om
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.
"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:
Synes godt om
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
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?
Jeg har fået løst mit problem, men du må gerne få pointene for ihærdighed, hvis du smider et svar
Synes godt om
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.
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.