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 ?
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
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.
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.
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.
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?
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? :)
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.
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).
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).
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.
<% 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).
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 ...