Avatar billede skindbeni Nybegynder
01. september 2007 - 14:16 Der er 16 kommentarer og
1 løsning

Hente post fra DB afhængig af dato

Hej.

Kan det lade sig gøre at hente en post i en DB afhængig af hvad datoen er?

Min database indeholder en kampkalender med følgende poster
- ID
- Dato
- Tid
- Hjemmehold
- Udehold
- Spillested

Et udpluk af databasen kunne være følgende

1  01/09-07  15.00  Horsens  Vejle  Forum Horsens
2  05/09-07  13.00  Vejle    AGF    Vejle Stadion
3  10/09-07  19.00  FCK      Vejle  Parken

Mit mål er hele tiden at vise den "næste kamp"

Er datoen i dag fx d. 3/9-07 så skulle følgende vises:

Vejle - AGF
D. 5/9-07
Kl. 13.00
Vejle Stadion

Jeg udvikler i asp.net (vb.net) og med en access database.
Avatar billede hmortensen Nybegynder
01. september 2007 - 14:22 #1
Nu er jeg ikke så stærk i Access dato syntaks, men noget ala det her:
SELECT TOP 1 * FROM KampKalender WHERE Dato >= NOW() ORDER BY Dato
Avatar billede skindbeni Nybegynder
01. september 2007 - 15:36 #2
Der skulle ikke meget til ;o)

Dato og tid giver mig lidt proglemer:

Jeg henter dataene fra databasen og vil indsætte i en label:
lblDato.Text = Reader("Dato").ToString.Trim()

Men i stedet for at skrive "5. september 2007" som jeg godt kunne tænke mig skriver den (selvfølgelig) "02-09-2007 00:00:00"

Det samme er gældende for tiden, hvor jeg ønsker "13:00" men i stedet skrives "30-12-1899 15:00:00"

Er det muligt at finde ugedagen ud fra datoen og få skrevet dansk ugedag?
Avatar billede neoman Novice
01. september 2007 - 15:59 #3
1. I access har du ikke en DATO som sådan men en DateTime, så du kunne egentligt nøjes med en variabel til at gemme både dato og tid
2. Her er en oversigt af de forskellige datoformater: http://msdn2.microsoft.com/en-us/library/8kb3ddd4(VS.80).aspx
3. Du kan bruge dem sådan her f.eks.:
lblDato.Text = Reader("Dato").ToString.Trim("dddd dd. MMMM yyyy"), hvor dddd så leverer dagens navn
4. Den SELECT som anført 14:22:03 skal lige have en "DESC" i rumpen, ellers leverer den ikke den næste kamp, men den som har den "højeste" dato større end Now
5. I .NET bør den nok også se sådan her ud:
SELECT TOP 1 * FROM KampKalender WHERE Dato >= NOW().Date ORDER BY Dato DESC

fordi den den 5/9 vil om morgenen allerede vil tage fat i 10/09
Avatar billede neoman Novice
01. september 2007 - 16:01 #4
lblDato.Text = Reader("Dato").ToString("dddd dd. MMMM yyyy") skulle der ha' stået
Avatar billede skindbeni Nybegynder
01. september 2007 - 17:15 #5
hehe... det går godt det her.

a) I dit punkt 4 skriver du, at jeg skal putte en DESC ind i min SELECT sætning.

Det er jeg altså ikke sikker på. Jeg kender ikke teorien i det, men min kampkalender består i øjeblikket af kampe fra juli 2007 til marts 2008.

Sætter jeg DESC i rumpen på SELECT sætningen, så vises den sidste kamp i kalenderen - der spilles engang i marts 2008.

Fjerner jeg DESC så vises det korrekt - nemlig den næste kamp som er på søndag.

b) Næste problem er, at den melder fejl hvis jeg bruger
lblDato.Text = Reader("Dato").ToString("dddd dd. MMMM yyyy")

---
Input string was not in a correct format.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.FormatException: Input string was not in a correct format.

Source Error:

Line 94:                lblDato.Text = Reader("Dato").ToString("dddd dd. MMMM yyyy")
Avatar billede neoman Novice
01. september 2007 - 17:39 #6
Line 94: det kan være den ikke kunne tåle "." i formatet, kan ikke helt huske det så læs på det, på det link jeg gav dig.

Det med DESC er blot mig som forvirrede problemet, fordi jeg selv har noget kode som leder efter en sidste dato INDEN min udvalgte dato, så den kopierede jeg lige uden at tænke mig om:-) Sorry about that.
Avatar billede skindbeni Nybegynder
01. september 2007 - 22:39 #7
Jeg må indrømme, at jeg ikke helt kan finde ud af fejlen - ej heller selvom jeg kigger på dit link. På dit link mangler jeg et eksempel hvor jeg kan se, hvordna det sættes sammen.

Når jeg prøver at køre siden fra MS Visual Web Developer 2005 Express, så hedder fejlen:

---
InvalidCastException was unhandled by user code
Conversion from string "dddd dd. MMMM yyyy" to type 'Integer' is not valid.
---
Avatar billede neoman Novice
01. september 2007 - 23:07 #8
Det virker hos mig. Brug de eksmepler på linket - smid f.eks. alt ud og tilføj et element ad gangen:
lblDato.Text = Reader("Dato").ToString()
lblDato.Text = Reader("Dato").ToString("dddd") og derpå resten
Avatar billede skindbeni Nybegynder
01. september 2007 - 23:36 #9
Det er underligt.

lblDato.Text = Reader("Dato").ToString() virker fint nok, men så snart jeg retter til fx lblDato.Text = Reader("Dato").ToString("dddd") så kommer fejlen.

Har du tilføjet noget andet - fx i Imports?
Avatar billede neoman Novice
01. september 2007 - 23:53 #10
Nope.
I stedet for de her custom formats se om nogen standardformater virker. De er givet her
http://msdn2.microsoft.com/en-us/library/az4se3k1(VS.80).aspx
Avatar billede neoman Novice
02. september 2007 - 00:01 #11
Hvis de heller ikke virker, så prøv lige de forskellige formater på en lokal Now i stedet for noget hentet fra db'en:
lblDato.Text= Now.ToString("dddd dd. MMMM yyyy")

Hvis det virker, så er der noget galt med db'en - hvad type har Dato derinde ?
Avatar billede skindbeni Nybegynder
02. september 2007 - 00:18 #12
Der fandt vi problemet.

Prøver jeg at køre formateringen med Now.ToString... funger det fint, men så snart jeg henter fra min Access database ender det i problemer.

Og jeg aner ikke hvorfor, for i Access har jeg valgt feltet DATO som værende af typen "dato og klokkeslæt" med formatet "langt datoformat" (jeg har også prøvet "kort datoformat" for den sags skyld)
Avatar billede neoman Novice
02. september 2007 - 00:28 #13
langt/kort datoformat har intet at sige : det er kun en måde at vise de selvsamme data på, som internt opbevares på samme måde uanset.

Eftersom det ser ud til at du kører med en dansk access, så ville jeg foreslå at undgå feltnavne som kan være reserverede ord - "dato" er garanteret blandt dem. Kald den f.eks. kampDato og se om det hjælper.

Hvis det ikke hjælper, copy/paste hertil den løkke som din reader kører i.
Avatar billede skindbeni Nybegynder
02. september 2007 - 00:41 #14
Jeg har kopieret hele min vb fil herind.

Imports System.Data
Imports System.Data.OleDb

Partial Class Master_Standard
    Inherits System.Web.UI.MasterPage

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim connection As OleDbConnection = New OleDbConnection(ConfigurationSettings.AppSettings("strConnKampe"))

        Dim Reader As OleDbDataReader
        Dim Command As OleDbCommand

        Dim mySQL As String = ""
        mySQL = "SELECT TOP 1 ID, Turnering, Hjemmehold, Udehold, KampDato, Tid, Spillested FROM kampe WHERE KampDato >= NOW() ORDER BY KampDato"
        Command = New OleDbCommand(mySQL, connection)

        connection.Open()
        Reader = Command.ExecuteReader()
        If Reader.Read = True Then
            Do
                lblHjemmehold.Text = Reader("Hjemmehold").ToString.Trim()
                lblUdehold.Text = Reader("Udehold").ToString.Trim()
                lblTurnering.Text = Reader("Turnering").ToString.Trim()
                'nedenstående kode virker
                'lblDato.Text = Reader("KampDato").ToString.Trim()
                'nedenstående kode virker ikke
                lblDato.Text = Reader("KampDato").ToString("dddd")
                'nedenstående kode virker
                'lblDato.Text = Now.ToString("dddd dd. MMMM yyyy")
                lblTid.Text = Reader("Tid").ToString.Trim()
                lblSpillested.Text = Reader("Spillested").ToString.Trim()
            Loop While Reader.Read
        Else
        End If
        Reader.Close()
        connection.Close()
    End Sub

End Class
Avatar billede neoman Novice
02. september 2007 - 00:58 #15
Kan ikek se noget forkert.

Prøv dette inde i løkken:
.....
Dim myTime as DateTime = Reader.GetDateTime("KampDato")
lblDato.Text = myTime.ToString("dddd dd. MMMM yyyy")
.....


hvis det virker, så kan du prøve at skære i det til der er noget minimum virkende tilbage.

hvis det ikke virker, så giver jeg op for nu. Jeg har selv noget jeg skal have fra hånden desværre
Avatar billede skindbeni Nybegynder
02. september 2007 - 09:52 #16
Desværre - heller ikke bid.

Men jeg vil godt give point alligevel for den hjælp jeg har fået indtil nu og arbejdsindsatsen.
Avatar billede skindbeni Nybegynder
05. september 2007 - 16:50 #17
Så fik jeg et guldkorn gennem en nyhedsgruppe.

Jeg vil lige poste det rigtige svar til orientering for andre, der evt. kan have samme problem:

-----
...Men jeg kunne gætte på at den ikke bryder sig om
ToString med 1 argument - og at du bør prøve:

llblDato.Text = CType(Reader("KampDato"), DateTime).ToString("dddd dd.
MMMM yyyy")
...
-----
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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