Avatar billede steen_hansen Forsker
11. september 2016 - 22:05 Der er 33 kommentarer og
3 løsninger

Ugedag og dato ønskes udtrukket for hver dag

Jeg har en bunke data, der bliver logget hver dag. Her imellem er der også ugedag og dato,

Alle ugedage og datoer bliver sammen med de øvrige data trukket ud i rækker gennem en løkke:

If Not RSLog1.EOF Then
    Do Until RSLog1.EOF

[Ugedag] [Dato] [Data1] [Data2] [Data3] [Data4] [Data5]

    RSLog1.MoveNext
    Loop
End If

For at gøre det lidt mere overskueligt, kunne jeg godt tænke mig at adskille alle disse data delt op for hver dag.

Da der kommer en ny søndag om en uge, vil jeg gerne have sat datoen på bag hver ugedag, så det i stedet kommer til at se sådan her ud:


Søndag den 11. september 2016

    If Not RSLog1.EOF Then
        Do Until RSLog1.EOF

        [Data1] [Data2] [Data3] [Data4] [Data5]

        RSLog1.MoveNext
        Loop
    End If

Mandag den 12. september 2016

    If Not RSLog1.EOF Then
        Do Until RSLog1.EOF

        [Data1] [Data2] [Data3] [Data4] [Data5]

        RSLog1.MoveNext
        Loop
    End If

Tirsdag den 13. september 2016

    If Not RSLog1.EOF Then
        Do Until RSLog1.EOF

        [Data1] [Data2] [Data3] [Data4] [Data5]

        RSLog1.MoveNext
        Loop
    End If

Onsdag den 14. september 2016

    If Not RSLog1.EOF Then
        Do Until RSLog1.EOF

        [Data1] [Data2] [Data3] [Data4] [Data5]

        RSLog1.MoveNext
        Loop
    End If


Osv.

Dvs. der køres en løkke med ugedag/dato, og inde i den løkke køres der en ny løkke med de unikke data for den unikke dag.

Jeg har prøvet med alle mulige forsøg, som f.eks. SELECT DISTINCT ugedag, dato, relation til en tabel: SELECT child WHERE weekdayID = 1 (for mandag)

weekdayID    weekdayname
1            Mandag
2            Tirsdag
3            Onsdag
4            Torsdag
5            Fredag
6            Lørdag
7            Søndag

Men det bliver en gang rod. Hvordan gør jeg?
Avatar billede steen_hansen Forsker
11. september 2016 - 22:13 #1
Jeg kan se, at jeg ikke har illustreret det perfekte billede. Men Jeg vil gerne have det stillet således op:

Onsdag den 14. september 2016
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]

Tirsdag den 13. september 2016
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]

Mandag den 12. september 2016
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]

Søndag den 11. september 2016
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]
[Data1] [Data2] [Data3] [Data4] [Data5]
Avatar billede steen_hansen Forsker
11. september 2016 - 22:18 #2
I stedet for

[Onsdag] [14-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Onsdag] [14-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Onsdag] [14-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Onsdag] [14-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Onsdag] [14-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Onsdag] [14-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Onsdag] [14-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Onsdag] [14-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Onsdag] [14-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Onsdag] [14-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Tirsdag] [13-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Tirsdag] [13-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Tirsdag] [13-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Tirsdag] [13-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Mandag] [12-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Mandag] [12-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Mandag] [12-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Mandag] [12-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Mandag] [12-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Mandag] [12-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Mandag] [12-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Mandag] [12-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Søndag] [11-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Søndag] [11-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Søndag] [11-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Søndag] [11-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Søndag] [11-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
[Søndag] [11-09-2016] [Data1] [Data2] [Data3] [Data4] [Data5]
Avatar billede arne_v Ekspert
12. september 2016 - 01:41 #3
Det problem skal ikke loeses i SQL men i din applikation!
Avatar billede arne_v Ekspert
12. september 2016 - 01:44 #4
Altsaa:

SELECT dato,... FROM ... WHERE ... ORDER BY dato DESC

Og saa pseudo kode:

olddato = ""
If Not RSLog1.EOF Then
    Do Until RSLog1.EOF
        dato = RSLog1("dato")
      If dato <> olddato Then
            ' output dato header
            olddato = dato
      End If
        ' output alle de andre felter (men ikke dato og ugedag)
    RSLog1.MoveNext
    Loop
End If
Avatar billede steen_hansen Forsker
12. september 2016 - 09:20 #5
Arne, skal

olddato = ""

ikke med gennem en løkke udenom løkken?
Avatar billede steen_hansen Forsker
12. september 2016 - 09:21 #6
Ah, sorry. Jeg kan se idéen. Jeg prøver
Avatar billede steen_hansen Forsker
12. september 2016 - 10:59 #7
Jeg er alligevel ikke helt med.

olddato = ""

Den skal vel ikke være blank? Og den skal også køres gennem en løkke?
Avatar billede arne_v Ekspert
12. september 2016 - 15:27 #8
Den skal vaere en vaerdi som ikke er i databasen.

Og den skal vaere udenfor loekken - den bliver aendret inde i loekken.

Logikken er at man skriver header naar data aendrer sig.

Den foerste dato fra databasen er en "aendring".
Avatar billede steen_hansen Forsker
13. september 2016 - 20:15 #9
Jeg prøver. Vender snart tilbage
Avatar billede steen_hansen Forsker
13. september 2016 - 20:47 #10
I tabellen har jeg gemt dato og klokkeslæt således: Recordset "dato": 4/9/2016 18:35:16

Det gør jeg mere præsentabelt således (funktionen addZ sætter et 0 foran, hvis tallet er mindre end 10, så der kommer til at stå 07 i stedet for 7)

Dim adminAt, adminAtDate, adminAtTime
adminAt = RSLog("dato")
adminAtDate = addZ(day(adminAt)) & "-" & addZ(month(adminAt)) & "-" & year(adminAt)
adminAtTime = addZ(hour(adminAt)) & ":" & addZ(minute(adminAt)) & ":" & AddZ(Second(adminAt))

Når der logges data (fra en anden side), logges ugedagen således:

Wday = WeekdayName(Weekday(date))
SQL = "INSERT INTO lbloguser (weekdayname) VALUES ('" & Wday & "')
Conn.Execute SQL

Skal weekdayname ikke benyttes?

Præcis sådan her står det nu:

    <%
    'Set RSLog = Conn.Execute("SELECT * FROM lbloguser ORDER BY userlogID DESC") <- Denne er den oprindelige. Jeg sorterede efter userlogID DESC, så de blev listet kronologisk efter ID
    Set RSLog = Conn.Execute("SELECT * FROM lbloguser ORDER BY dato DESC")' <- Her har jeg ændret userlogID til dato. Men det vil jo nok ikke virke ........?

    olddato = ""

        If Not RSLog.EOF Then

            Do Until RSLog.EOF

            Dim adminAt, adminAtDate, adminAtTime
            adminAt = RSLog("dato")
            adminAtDate = addZ(day(adminAt)) & "-" & addZ(month(adminAt)) & "-" & year(adminAt)
            adminAtTime = addZ(hour(adminAt)) & ":" & addZ(minute(adminAt)) & ":" & AddZ(Second(adminAt))

            If adminAtDate <> olddato Then
                olddato = adminAtDate
            End If

    %>

        <div class="divLogContainer <%=bbckr%>">
            <div class="divLogs<% If RSLog("moved") <> RSLog("mover") Then %> bluePlainText<% End If %>">
                <div class="divLogs1"><%=adminAtTime%></div>
                <div class="divLogs4"><%=RSLog("moved")%></div>
                <div class="divLogs3">er</div>
                <div class="divLogs5">blevet rykket af <%=RSLog("mover")%></div>
                <div class="divLogs6">fra</div>
                <div class="divLogs7"><%=RSLog("fromstatus")%></div>
                <div class="divLogs6">til</div>
                <div class="divLogs7"><%=RSLog("tostatus")%></div>
                <div class="clearBoth"></div>
            </div>
        </div>

    <%

            If bbckr = "fobg1" Then
                bbckr = "fobg2"
            Else
                bbckr = "fobg1"
            End If

            RSLog.MoveNext
            Loop

        End If

    %>

Det virker ikke. Jeg har godt nok taget datoen ud. Men jeg får én kang liste med alle data, helt nøjagtigt som før.

Jeg håber du kan finde rundt i det her.
Avatar billede arne_v Ekspert
13. september 2016 - 21:04 #11
Du skal udskrive dato header naar dato aendrer sig og ikke for hver raekke.

Noget a la:


          If adminAtDate <> olddato Then
                Response.Write "<div class=""divLogs1"">" & adminAtTime & "</div>" ' <---- flyttet herop
                olddato = adminAtDate
            End If

    %>

        <div class="divLogContainer <%=bbckr%>">
            <div class="divLogs<% If RSLog("moved") <> RSLog("mover") Then %> bluePlainText<% End If %>">
                <!-- slettet her -->
                <div class="divLogs4"><%=RSLog("moved")%></div>
                <div class="divLogs3">er</div>
Avatar billede steen_hansen Forsker
13. september 2016 - 21:14 #12
Klokkeslættet for hver række data skal jo gerne stå i starten af hver række, så man kan se det eksakte tidspunkt, korrekt? Klokkeslættet angiver jo præcist hvornår en hændelse bliver logget

Tirsdag den 13. september 2016
09:01:48 [Data1] [Data2] [Data3] [Data4] [Data5]
08:16:49 [Data1] [Data2] [Data3] [Data4] [Data5]
08:16:23 [Data1] [Data2] [Data3] [Data4] [Data5]
08:16:02 [Data1] [Data2] [Data3] [Data4] [Data5]
Avatar billede steen_hansen Forsker
13. september 2016 - 21:15 #13
Onsdag den 14. september 2016
09:01:48 [Data1] [Data2] [Data3] [Data4] [Data5]
08:16:49 [Data1] [Data2] [Data3] [Data4] [Data5]
08:16:23 [Data1] [Data2] [Data3] [Data4] [Data5]
08:16:02 [Data1] [Data2] [Data3] [Data4] [Data5]

Tirsdag den 13. september 2016
09:01:48 [Data1] [Data2] [Data3] [Data4] [Data5]
08:16:49 [Data1] [Data2] [Data3] [Data4] [Data5]
08:16:23 [Data1] [Data2] [Data3] [Data4] [Data5]
08:16:02 [Data1] [Data2] [Data3] [Data4] [Data5]
Avatar billede steen_hansen Forsker
13. september 2016 - 21:17 #14
Klokkeslættene vil variere meget fra dag til dag. Jeg gad bare ikke rette kun for at illustrere :)
Avatar billede arne_v Ekspert
13. september 2016 - 21:18 #15
saa:


If adminAtDate <> olddato Then
                Response.Write "<div class=""divLogs1"">" & adminADate & "</div>" '                olddato = adminAtDate
            End If

    %>

        <div class="divLogContainer <%=bbckr%>">
            <div class="divLogs<% If RSLog("moved") <> RSLog("mover") Then %> bluePlainText<% End If %>">
                <div class="divLogs1"><%=adminAtTime%></div>
                <div class="divLogs4"><%=RSLog("moved")%></div>
                <div class="divLogs3">er</div>
Avatar billede arne_v Ekspert
13. september 2016 - 21:19 #16
Hvis du faar udskrevet noget i herader naar dato skifter saa tror jeg at du ser lyset og kan lynhurtigt tilrette det som du vil.
Avatar billede steen_hansen Forsker
13. september 2016 - 21:29 #17
Så lykkedes det :)

Dvs jeg får

13-09-2016

Hvordan får jeg konverteret det til

13. september 2016
Avatar billede steen_hansen Forsker
13. september 2016 - 21:30 #18
Hvordan får jeg konverteret det til

Tirsdag den 13. september 2016

?
Avatar billede steen_hansen Forsker
13. september 2016 - 21:36 #19
Jeg har logget alle ugedagene fint i "weekdayname" i tabellen.
Avatar billede arne_v Ekspert
13. september 2016 - 21:38 #20
utestet:

d = CDate(atAdminDate)
s = WeekdayName(Weekday(d)) & " "  Day(d) & " " & MonthName(Month(d)) & " " & Year(d)
Avatar billede arne_v Ekspert
13. september 2016 - 21:39 #21
VBS har en funktion til det.
Avatar billede steen_hansen Forsker
13. september 2016 - 21:40 #22
Der er et eller andet galt. Nu er det listet således:

09-09-2016
08-09-2016
07-09-2016
06-09-2016
05-09-2016
04-09-2016
13-09-2016
12-09-2016
11-09-2016
10-09-2016

Det burde være listet således:

13-09-2016
12-09-2016
11-09-2016
10-09-2016
09-09-2016
08-09-2016
07-09-2016
06-09-2016
05-09-2016
04-09-2016

Kan det have noget med ORDER BY dato at gøre?
Avatar billede arne_v Ekspert
13. september 2016 - 21:43 #23
Ja.

Det ser ud som om du har sorteret paa streng vaerdier uden foranstillede nuller.
Avatar billede steen_hansen Forsker
13. september 2016 - 21:43 #24
Jeg rettede ORDER BY dato tilbage til ORDER BY userlogID, oog så kom det på plads :)

Set RSLog = Conn.Execute("SELECT * FROM lbloguser ORDER BY userlogID DESC")
'Set RSLog = Conn.Execute("SELECT * FROM lbloguser ORDER BY dato DESC")
Avatar billede steen_hansen Forsker
13. september 2016 - 21:45 #25
Så mangler jeg "bare" at få rettet

13-09-2016

til

Tirsdag den 13. september 2016

Håber du kan greje den også.
Avatar billede arne_v Ekspert
13. september 2016 - 21:46 #26
Se ide oppe i #20.
Avatar billede steen_hansen Forsker
13. september 2016 - 21:48 #27
Sorry, den så jeg slet ikke. Kigger ....
Avatar billede steen_hansen Forsker
13. september 2016 - 21:55 #28
Så kommer der til at stå

lørdag 30 december 1899

på alle dagene.

Jeg tror jeg har placeret det forkert. Siden ser sådan her ud:

    olddato = ""

        If Not RSLog.EOF Then

            Do Until RSLog.EOF

            Dim adminAt, adminAtDate, adminAtTime, d, s
            adminAt = RSLog("dato")
            adminAtDate = addZ(day(adminAt)) & "-" & addZ(month(adminAt)) & "-" & year(adminAt)
            adminAtTime = addZ(hour(adminAt)) & ":" & addZ(minute(adminAt)) & ":" & AddZ(Second(adminAt))

            If adminAtDate <> olddato Then

            d = CDate(atAdminDate)
            s = WeekdayName(Weekday(d)) & " " & Day(d) & " " & MonthName(Month(d)) & " " & Year(d)

    %>

        <div class="divLogContainer boldText"><%=s%></div>

    <%

                olddato = adminAtDate
            End If

    %>
Avatar billede arne_v Ekspert
13. september 2016 - 21:57 #29
problemet er:

d = CDate(atAdminDate)

atAdminDate er tilsyneladende ikke i det format CDate forventer.
Avatar billede arne_v Ekspert
13. september 2016 - 21:58 #30
virker:

d = adminAt

?
Avatar billede steen_hansen Forsker
13. september 2016 - 22:08 #31
Det virkede med d = adminAt :)

Jeg vil gerne lige plage dig med 2 små detaljer:

1. Kan man skrive ugedagen med stort (det første bogstav), så tirsdag bliver rettet til Tirsdag?

2. Kan man sætte et punktum ind efter DD, og "den" ind efter ugedagen, så der kommer til at stå

Tirsdag den 13. september 2016
Avatar billede steen_hansen Forsker
13. september 2016 - 22:11 #32
Se bort fra nummer 2, "den" og punktum. Den er klaret.
Avatar billede arne_v Ekspert
13. september 2016 - 22:11 #33
proev:

Function Cap(s)
    Cap = UCase(Left(s, 1)) &  Mid(s, 2)
End Function

s = Cap(WeekdayName(Weekday(d))) & " den "  Day(d) & ". " & MonthName(Month(d)) & " " & Year(d)
Avatar billede steen_hansen Forsker
13. september 2016 - 22:13 #34
Men kan man rette ugedagen til stort begyndelsesbogstav? Normalt ville jeg klare det på denne måde:
<div style="text-transform: capitalize"><%=weekday%></div>

Men det er vist ikke metoden her.
Avatar billede arne_v Ekspert
13. september 2016 - 22:14 #35
Det er hvad Cap funktionen boer goere.
Avatar billede steen_hansen Forsker
13. september 2016 - 22:16 #36
Arne, du er hardcore :) Den er i lige i øjet, 1000 tak for hjælpen :)
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

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