webForumDet fria alternativet

Visa nästa "datum"

ASPur ASP

18 svar · 459 visningar · startad av boilwater

Medlem sedan juni 200476 inlägg
Frågan#1

Hej!

Denna koden använder jag för att hämta nästa match:

Set objRs = objConn.Execute("SELECT TOP 1 * FROM matchertr WHERE datum & tid > now() ORDER BY datum ASC")

I posten "datum" är det hela datumet, alltså t.ex. 2005-03-18

I mars finns det flera än en match, men när det första datumet i mars är "över" klarar den inte av att hämta flera i mars månad, utan går vidare till nästa månad och första matchen/datumet där.

Finns det något sätt att fiksa detta, eller måste jag göra om databasen så jag har en post för dag, en för månad och en för år ?

På förhand tack för hjälpen!

Medlem sedan juni 200476 inlägg
#2

Nu har jag gjort en "ar", "manad", "dag" post och tagit bort "datum". Jag tror jag kommit på hur jag kan göra det, men nu är problemet att jag inte kan skriva dag och månad som med två siffer om datumet är lägre än 10, alltså t.ex. 05. Och eftersom jag inte får till det, sorteras matcherna inte rätt.

Hur gör jag det så att det alltid går att skriva två siffror?

Är det rätt at göra dag,månad,år som tall i databasen?

Hoppas någon kan och vill hjälpa mig :)
Tack igjen

Medlem sedan apr. 20031 660 inlägg
#3

HEJ!

Datum ska lagras hela i 99,9% i fallen.

Jag förstår inte vad du menar med "den inte klarar att hämta fler datum"?
Varför går den vidare till april?
Får du träff i mars, borde du ta nästa datum, och jämföra till den blir sann, oavsett månadsskiften.

Tror du inte ska använda TOP, utan hämta de poster som finns.
Sedan jämför du till första träffen är rätt, hoppar till nästa post och fortsätter jämföra.

Medlem sedan juni 200476 inlägg
#4

Hej!

Ja, du...Varför den går vidare till april vet jag inte, det är därför jag skriver här ;)

Alltså jag är inte så bra på det här, så det är mycket möjligt detta är enkelt för många, men inte för mig. :)

Jag kan skriva hela koden här, är den rätt? Vad skall jag skriva om TOP inte skall vara med?

<%
Dim objConn
Set objConn = Server.CreateObject("adodb.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/mapp/databasen.mdb")

Dim objRs
Set objRs = objConn.Execute("SELECT TOP 1 * FROM matchertr WHERE datum & tid > now() ORDER BY datum ASC")

Do until objRs.EOF
     
	 %>
              <tr valign="top" class="text">
                <td width="9%"><strong>Tr.m.</strong></td>
                <td width="27%"><% Response.Write (objRs("hemma")) %>
-
  <% Response.Write (objRs("borta")) %></td>
                <td width="21%"><div align="left">
                    <% Response.Write (objRs("datum")) %>
                </div></td>
                <td width="13%"><div align="right">
                    <% Response.Write (objRs("tid")) %>
                </div></td>
                <td width="30%"><div align="right">
                    <% Response.Write (objRs("plan")) %>
                </div></td>
              </tr>
              <% objRs.MoveNext
Loop

Set objRs = Nothing
Set objConn = Nothing
%>

Det var så jag hade det förut, databasen består av datum (datum/klocka, kort), tid (datum/klocka, kort), + andra poster som inte hör till denna frågan.

Och vad jag menade med det du "frågar", J.N., är att den inte hämtar nästa match (låt oss kalla den match nr. 2) i mars efter match nr 1 i samma månad är färdig, utan går till match nr1 i april.

Medlem sedan juni 200476 inlägg
#5

Är det ingen som kan hjälpa mig med detta? :(

Medlem sedan juni 2000974 inlägg
#6

Du ska inte behöva "dela upp" ditt datum utan behåll det som vanligt. Lagra det som datum i din databas.
Skriv Select * i din SQL-sats och kolla verkligen så att du har matcher som spelas efter det datumet som du jämför med eller kolla i din databas.

Medlem sedan juni 200476 inlägg
#7

Hej!

Ok, jag har datumet och tiden som vanligt.
Men med denna koden:

Set objRs = objConn.Execute("SELECT * FROM matchertr WHERE datum & tid > now() ORDER BY datum ASC")

hämtas ju alla matcher? Och om jag skriver Select Top 1, kommer et datum som varit.

I mars är första matchen inmatat så här i databasen:
2005-03-07
Nästa match som då skall komma är
2005-03-13
Men problemet som har varit är att första matchen i april hämtas:
2005-04-03

Jag känner mig helt vilsen just nu, fattar ingenting *s*

Finns det ingen mer kod man kan lägga in som specifiserar att den skall kolla hela månaden ut, före den går vidare till nästa?

Medlem sedan apr. 20022 743 inlägg
#8

Vad är det för datatyp på fältet där du sparar datumet? Varför separerar du tid och datum?

Medlem sedan juni 200476 inlägg
#9

Sparar det som Datum/Klocka, om det är det du menar. Och jag trodde jag måste spara datum och tid separat. Det är väl oavsätt inte det som gör problemet? :)

Medlem sedan apr. 20022 743 inlägg
#10

Om du använder

Set objRs = objConn.Execute("SELECT * FROM matchertr WHERE datum & tid > now() ORDER BY datum ASC")

Skrivs det då ut i rätt ordning?

Det går utmärkt att spara datum oc tid i samma fält. Man ska laltid försöka hålla informationen så "hel" som möjligt och inte dela upp den.

Medlem sedan juni 200476 inlägg
#11

Nej, skriver jag den kommer samtliga poster ut, också den "gamla" (fallande ordning, med 8 mars först)

Jag vill ha bara 1 post fram, och det är den kommande (närmaste kommande datum)

Jag får nog börja "om", och göra databasen på nytt. Nu har jag hoppat fram och tillbaka så mycket med den att det mycket möjligt har blivit något fel som jag inte ser eller fattar.

Om ni förstås inte har några flera idéer. :)

Medlem sedan juni 2000974 inlägg
#12

Vad händer om du skriver följande:
Set objRs = objConn.Execute("SELECT * FROM matchertr WHERE datum > now() ORDER BY datum ASC") ?
Alltså skippar tiden.
Då måste den skriva ut alla matcher i den ordningen som du har skrivit (datum ASC).

Medlem sedan juni 200476 inlägg
#13

Hej!

Jo då funkar det, men då ser man inte dagens match om det finns en sådan (alltså om det hade varit en match i dag 11 mars, försvann den då man gick från 10:e till 11:e).

Medlem sedan juni 2000974 inlägg
#14

Då kan du gör en IF-sats som jämför dina datum.
Ex. Om matchen spelas idag, skriv en text med info.
Om du hoppar fram en dag så visas inte matchinfon från matchen den 11:e utan nästa matchs info.

Medlem sedan juni 2000974 inlägg
#15

Du måste ha med WHERE datum >= now()

Medlem sedan juni 200476 inlägg
#16

Du får ursäkta så mycket, men hur skall jag skriva en IF-sats som jämför datum? :)

Medlem sedan juni 200476 inlägg
#17

Har testat det här:

<% if objRS("datum") = now() Then
   response.write FormatDateTime(objRs("datum"),2) 
else
   response.write FormatDateTime(objRs("datum"),2) 
end if
%>

om jag tar bort den första "respons write" och t.ex bara skriver hej, då kommer det fram. Men om jag vill ha fram datumet som koden ovenför visar så kommer den 13 mars, inte dagens testdatum (11.mars).

Medlem sedan juni 2000974 inlägg
#18

Om du har med >= i din SQL-sats så borde den ta med dagens match. Då tar den med dagens och alla matcher efter det datumet. Vill du bara ha med ett datum så skriver du SELECT TOP 1 * FROM ...

Sök på IF-sats här i forumet.;)

Medlem sedan juni 200476 inlägg
#19

Hurra nå tror jag det funkar, jag hade inte helt koll på databasen orkar inte förklara, bara att jag är vimsig :r

Tusen tusen tack för hjälpen Riffles! :birp

140 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)