Avatar billede dkclajen Juniormester
23. oktober 2015 - 06:48 Der er 17 kommentarer og
1 løsning

Søg igen hel tabel

Jeg vil gerne søge i en tabel, den skal gå ind og finde om der er datoer <date() + 60, hvis nej skal den søge datoer <date() + 30. Den behøver egentlig kun returnere et yes/no eller true/false, men jeg har 4 kolonner den skal tjekke. Returnere den et yes/true skal den så udføre en handling ellers en anden.

Har kigget på dcount, men kommer kun frem til at jeg skal kopier den samme linje for hver kolonne.

Er der en lidt smarter måde at gøre det på? Eller er det bare den tunge vej?
Avatar billede terry Ekspert
23. oktober 2015 - 12:13 #1
You'll need to use some code, first to check <date() + 60 then if no  <date() + 30

And as you say here.

"Har kigget på dcount, men kommer kun frem til at jeg skal kopier den samme linje for hver kolonne. "

If you have more than one field (column) you want to search through then you need to do it for each :-(

Another way, which I dont really think would help, is to make a union query so you get all of your dates into one column then make another query which searches through that one column.
Avatar billede terry Ekspert
23. oktober 2015 - 12:14 #2
With Dcount you can also use more than one criteria


"Date1 < Date() + 60 OR Date2 < Date() + 60 ....."
Avatar billede dkclajen Juniormester
28. oktober 2015 - 06:03 #3
Hej Teddy, havde jo lige håbet på en super kode her. &#128527; Dig har jeg i stedet brugt din ide om en Union som virker yderst fint. Så send du bare et svar så du kan få point.
Avatar billede terry Ekspert
28. oktober 2015 - 09:05 #4
:-)
Avatar billede dkclajen Juniormester
01. november 2015 - 10:36 #5
Hey terry,

Har først haft ordentlig tid til at kigge på det nu, og kan se at den "date + 30" kode jeg bruger til at søge med ikke virker.

Kan vi fortsætte i denne her tråd, eller skal jeg oprette en ny?
Avatar billede terry Ekspert
01. november 2015 - 10:51 #6
Yes go ahead.

What problem are you having?
Avatar billede dkclajen Juniormester
01. november 2015 - 12:59 #7
Jeg bruger følgende kode når min forside loader.

Dim varX As String
Dim varY As String

    varY = DCount("[id]", "datounion", "[kørekort] < #" & Date + 30 & "#")
    If varY > 0 Then
        Me.Farve.BackColor = RGB(230, 5, 5)
    Else
    varX = DCount("[id]", "datounion", "[kørekort] <" & "#" & Date + 30 & "#")  ' & "and [kørekort] <" & "#" & Date + 60 & "#")
            If varX > 0 Then
                Me.Farve.BackColor = RGB(255, 255, 0)
            Else
                Me.Farve.BackColor = RGB(0, 255, 51)
            End If
    End If


/ varY = DCount("[id]", "datounion", "[kørekort] < #" & Date + 30 & "#") \

Denne linje burde finde alle datoer som er mindre end dd + 30, men den finder 0, når jeg fysisk kigger i datounion er der én dato som opfylder dette kriterie. Det virker som om den ikke ved at det er dato en af stederne.?
Avatar billede terry Ekspert
01. november 2015 - 13:21 #8
I would think that this is the problem

Date + 30

DIM a variable of type datetime. Give it the value Date + 30

Then use the format function to format date as YYYYMMDD

In DK the date format is ddmmyyyy but SQL uses US format MMDDYYYY or YYYYMMDD
Avatar billede dkclajen Juniormester
01. november 2015 - 18:08 #9
Er ikke helt sikker på hvad du mener?

For hvis jeg for sjov prøver at lave en linje der hedder;
varX = date + 30
Så viser "varX"  "01-12-2015"
Avatar billede terry Ekspert
01. november 2015 - 18:25 #10
The way dates are stored in the database is always the same but when you "look" at the computers regional settings decides how they look. In DK you will see dates in DD-MM-YYYY format
DD = day
MM = Monnth
YYYY = YYYY


When you use SQL dates have to be formatted in US format MM-DD-YYYY or YYYY-MM-DD

EG:

#" & Format(varX, "YYYY-MM-DD") & "#")
Avatar billede dkclajen Juniormester
01. november 2015 - 19:13 #11
Jeg er helt med på det faktum at datoer skrives forskelligt, men er dog stadig ikke helt sikker på jeg forstår logikken i det her.

Men det gør nu heller ikke noget, for nu ser det ud til at virke. :) Håber jeg det bliver ved med. ;) Så tak for hjælpen.
Avatar billede terry Ekspert
01. november 2015 - 19:34 #12
"...men er dog stadig ikke helt sikker på jeg forstår logikken i det her."!

So you got it to work but you dont understand why?


Ask away ....
Avatar billede terry Ekspert
01. november 2015 - 19:36 #13
The criteria part of dcount has to be formatted the same as the WHERE criteria in an SQL statement.


So if the date is formatted incorrectly in an SQL then you wont get the expected result, which will also be the same as if it were used in the dcount function.
Avatar billede terry Ekspert
01. november 2015 - 19:38 #14
so you could actually make a query and then copy the search criteria part of dcount into the sql query to see if it works there, if it doesn't then you know something is wrong :-)
Avatar billede dkclajen Juniormester
01. november 2015 - 19:45 #15
Problemet var bare at jeg rent faktisk godt kunne gå det til at virke i en forespørgelse ved at skrive "date + 30" :)

Men selvfølgelig, hvis den leder efter en slags datoformat og det er en anden slags som der er i min tabel, så skal det jo selvfølgelig gå galt.
Avatar billede terry Ekspert
01. november 2015 - 19:59 #16
You might have gotten it to work with Date() + 30
Avatar billede terry Ekspert
01. november 2015 - 20:08 #17
without ##

EG

"[kørekort] < Date() + 30")
Avatar billede dkclajen Juniormester
02. november 2015 - 05:50 #18
Ja selvfølgelig med parantes, men dem sletter VBA selv i modsætning til forespørgelsen.
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