26. april 2003 - 15:29Der er
41 kommentarer og 1 løsning
Udskriv 10 datoer og derefter tjek måned
Hej. Det er egentlig 2 spørgsmål det her: 1: Jeg mangler en kode så når den har udskrevet 10 datoer laver den et break of forstsætter på den nye linie!!
2: Den indskriver i databasen under dato 04-07-2003, kan man ikke lave et script der læser 07 og derefter finder ud af hvad 07 er for en måned med en if sætning (som jeg godt selv kan lave :) )
1. taeller=0 do while not rs.eof if taeller=10 then Response.Write "<br>" taeller=0 end if response.Write dato rs.MoveNext loop
2. Hvis det er en dato du har i databasen, er det også en dato når du lægger det over i en variabel. Herefter kan du bruge Month funktionen til at aflæse måneden, og så evt monthname (som regel på engelsk) eller et array til at få navnet. Datoen=rs("datoen").value Response.Write MonthName(Month(Datoen)) if Month(Datoen)=12 then Response.Write " Det er koldt der ude" end if
1. Mangler lige at tælle op ;-) taeller=0 do while not rs.eof taeller=taeller+1 if taeller=10 then Response.Write "<br>" taeller=0 end if response.Write dato rs.MoveNext loop
Angående 10 datoer og break, så gør dette: x=1 for rowcounter = 0 to Ubound(myData) <--- eller hvordan du nu henter data Response.Write strDato & " " x=x+1 if x=11 then x=1 Response.Write "<BR>" end if Next
Angående det med hvordan dato skal være, så har jeg lavet dette lille script som jeg har lagt i en include fil, som hjælper mig en del:
' #### BEGIN ####################### ' ## Generat "Full Date"-function ## ' ################################## function FullDate(whichDateTime, whichLanguage, whichFormat) ' ######################################################################################### ' ## whichDateTime = The date which is to be converted ## ' ## whichLanguage = 1: Danish, 2: English - names for month & weekdays ## ' ## whichFormat = String with filter: ## ' ## %WD = Weekday, %D = Day, %MS = Monthname (Short), %ML = Monthname (Long) ## ' ## %M = Month, %Y = Year, %TH = Hour, %TM = Minutes, %TS = Seconds ## ' ## Example: strTime=FullDate(Now(),2,"%D. %ML, %Y") returns "12. July, 2001" ## ' ######################################################################################### Func_Temp_Date="" whichLanguage = CInt(whichLanguage) If Not whichDateTime&""="" AND Not whichFormat&""="" AND IsDate(whichDateTime&"")=true AND (whichLanguage=1 OR whichLanguage=2) Then whichDateTime=MediumDateTime(whichDateTime,1) If whichLanguage=1 Then Func_Temp_Date=Replace(whichFormat, "%WD",Const_Var_Weekday(Weekday(whichDateTime),1),1,-1,1) Func_Temp_Date=Replace(Func_Temp_Date, "%MS",Left(Const_Var_Month(Month(whichDateTime),1),3),1,-1,1) Func_Temp_Date=Replace(Func_Temp_Date, "%ML",Const_Var_Month(Month(whichDateTime),1),1,-1,1) else Func_Temp_Date=Replace(whichFormat, "%WD",Const_Var_Weekday(Weekday(whichDateTime),2),1,-1,1) Func_Temp_Date=Replace(Func_Temp_Date, "%MS",Left(Const_Var_Month(Month(whichDateTime),2),3),1,-1,1) Func_Temp_Date=Replace(Func_Temp_Date, "%ML",Const_Var_Month(Month(whichDateTime),2),1,-1,1) end if Func_Temp_Date=Replace(Func_Temp_Date, "%D",Day(whichDateTime),1,-1,1) Func_Temp_Date=Replace(Func_Temp_Date, "%M",Month(whichDateTime),1,-1,1) Func_Temp_Date=Replace(Func_Temp_Date, "%Y",Year(whichDateTime),1,-1,1) Func_Temp_Date=Replace(Func_Temp_Date, "%TH",FixedNumbers(Hour(whichDateTime),2),1,-1,1) Func_Temp_Date=Replace(Func_Temp_Date, "%TM",FixedNumbers(Minute(whichDateTime),2),1,-1,1) Func_Temp_Date=Replace(Func_Temp_Date, "%TS",FixedNumbers(Second(whichDateTime),2),1,-1,1) else Func_Temp_Date="*invalid date/time*" end if FullDate=Func_Temp_Date end function ' #### END ######################### ' ## Generat "Full Date"-function ## ' ##################################
' #### BEGIN ####################### ' # Add x Zeros in front of number # ' ################################## Function FixedNumbers(whichNumber, amountDigitals) ' ##################################################### ' # whichNumber = What number to check/convert # ' # amountDigitals = How many numbers should be shown # ' ##################################################### Func_Temp_Number=whichNumber If Not Len(Func_Temp_Number&"")>=amountDigitals Then Func_Temp_Number=String(amountDigitals-Len(Func_Temp_Number),"0")&Func_Temp_Number end if FixedNumbers=Func_Temp_Number End Function ' #### END ######################### ' # Add x Zeros in front of number # ' ##################################
UBound returnerer hvor mange elementer der er i et array. mcgreed bruger normalt getRows til at hente hele recordsettet på en gang over i et array. Du skal kun bruge uBound hvis du gør det på samme måde
conn.Open Set rs=Conn.Execute(strSQL) myData=rs.getRows for rowcounter = LBound(myData) to Ubound(myData)
Hmm jeg gav dig da kun 10 point, strange.. Kan du ikke dele dem med mcgreed når jeg har fået det til at virke ?? Nå okay, men mit script ser nu sådan her ud: <% Const adOpenKeyset = 1 Const adLockOptimistic = 3 Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("hits.mdb") & ";UID=admin;PWD=;"
Set rs = Server.CreateObject("ADODB.RecordSet") strSQL = "Select * From datehits" rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic %>
Du bruger rowcounter (fx) til at læse rækker via indeks 2, og kolonner via indeks 1. (Kan se jeg lige fik byttet om på det ovenfor - jeg skriver lige så godt som du læser)
MyData(0,rowcounter) giver første kolonne. MyData(1,rowcounter) giver anden kolonne.
Hmm kan ikke helt rigtigt se logikken i det der med datoen.. Hvis jeg nu har en kolonne hvor der står 08-02-2003 hvordan får jeg den så lagt ind under februar ??
Hmm jeg får også den fejl at den kun udskriver 3 fra min db og alle de andre..!! Kan man ikke lave <% for rowcounter = 0 to Ubound(myData) %> om til <% for rowcounter = 0 to Ubound(rs) %> eller lignende ??
Jeg viser den lige med do while not rs.EOF, da det er lidt nemmere at vise:
strSQL = "Select * From datehits ORDER BY Dato" rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic CurMonth=0 Response.Write "<table>" Do while not rs.EOF if CurMonth<>Month(rs("Dato").Value) then Response.Write "<tr><td>" & MonthName(Month(rs("Dato").Value)) & "</td>" CurMonth=Month(rs("Dato").Value) end if Response.Write "<td>" & rs("Dato").Value & ": " & rs("Hits").Value & "</td>" rs.MoveNext loop Response.Write "</table>" rs.Close
MonthName giver dig "system-navnet" for måneden. Hvis det er på engelsk, og du gerne vil have det på dansk, skal du selv lave et array med månederne: MaanedNavne = Split("januar,Februar,marts,April,....",",") og Response.Write "<tr><td>" & MaanedNavne(Month(rs("Dato").Value)) & "</td>"
Okay godt nok, meen har bare stadig det problem at der skal laves et break når den når et vis antal for ellers kommer der scroll på og går ud over siden.. Har prøvet at indsætte break men kan ikke lige finde ud af hvor jeg skal sætte x værdierne henne
Hvis du holder dig til det med at have det i en tabel, så kunne du nulstille tælleren hver måned, som fx:
strSQL = "Select * From datehits ORDER BY Dato" rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic CurMonth=0 Response.Write "<table>" Do while not rs.EOF if CurMonth<>Month(rs("Dato").Value) then Response.Write "<tr><td>" & MonthName(Month(rs("Dato").Value)) & "</td>" CurMonth=Month(rs("Dato").Value) Taeller=0 end if Taeller=Taeller+1 if Taeller=11 then Response.Write("<tr><td></td>") Taeller=1 end if Response.Write "<td>" & rs("Dato").Value & ": " & rs("Hits").Value & "</td>" rs.MoveNext loop Response.Write "</table>" rs.Close
Hmm ved godt at jeg fik det til at virke, men scriptet kom jeg til at overskrive (ikke så smart) og nu bruger jeg så koden: CurMonth=0 Response.Write "<table>" Do while not rs.EOF if CurMonth<>Month(rs("Dato").Value) then Response.Write "<tr><td>" & MonthName(Month(rs("Dato").Value)) & "</td>" CurMonth=Month(rs("Dato").Value) end if Response.Write "<td>" & rs("Dato").Value & ": " & rs("Hits").Value & "</td>" rs.MoveNext loop Response.Write "</table>" rs.Close
Jow - de står som hits den 5. Juli, 5. August, 5. September.
Du indsætter sikkert datoen som #07-05-2003#, men det opfattes af databasen som 5. juli. Vend det om (manuelt) og skriv det som #2002-05-07# ... #" & Year(Datoen) & "/" & Month(Datoen) & "/" & Day(Datoen) & "#...
Eller lad databasen selv klare det: rs=Conn.Execute("SELECT ID FROM DateHits WHERE Dato=Date") if rs.EOF then Conn.Execute("INSERT INTO DateHits (Hits,Dato) VALUES (1,Date)") else Conn.Execute("UPDATE DateHits SET Hits=Hits+1 WHERE Dato=Date") end if rs.Close
Hits.asp ----------- <% DBPath = "DBQ=" & server.mappath("hits.mdb") DBPath = "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath set MyConn = server.createobject("ADODB.connection") MyConn.Open DBPath Dim total,dag,dagt,dags,dage SQL = "Select * from Total" SQL1 = "Select Hits from DateHits where Dato = #" & date & "#" SQL2 = "Select sum(Hits) as summen from DateHits where Dato > #" & date-2 & "#" SQL7 = "Select sum(Hits) as summen from DateHits where Dato > #" & date-8 & "#" SQL31 = "Select sum(Hits) as summen from DateHits where Dato > #" & date-32 & "#" Set rs = MyConn.execute(SQL) if NOT rs.EOF OR NOT rs.BOF then total = rs("Total") else total = 0 end if rs.close set rs = Nothing Set rs = MyConn.execute(SQL1) if NOT rs.EOF OR NOT rs.BOF then dag = rs("Hits") else dag = 0 end if rs.close set rs = Nothing Set rs = MyConn.execute(SQL2) if NOT rs.EOF OR NOT rs.BOF then dagt = rs("summen") else dagt = 0 end if rs.close set rs = Nothing Set rs = MyConn.execute(SQL7) if NOT rs.EOF OR NOT rs.BOF then dags = rs("summen") else dags = 0 end if rs.close set rs = Nothing Set rs = MyConn.execute(SQL31) if NOT rs.EOF OR NOT rs.BOF then dage = rs("summen") else dage = 0 end if 'rs.close 'set rs = Nothing 'MyConn.Close 'Set MyConn = Nothing %>
Global.asa ------------- <SCRIPT LANGUAGE=VBSCRIPT RUNAT=SERVER> Sub Application_OnStart End Sub Sub Application_OnEnd End Sub
SQL = "SELECT * FROM TOTAL" Set rs = MyConn.execute(SQL) Application("Total") = rs("Total") rs.close Set rs = Nothing SQL = "UPDATE Total SET Total = " & (Application("Total")+1) MyConn.execute(SQL)
SQL = "SELECT * from DateHits WHERE Dato = #" & date() & "#" Set rs = MyConn.execute(SQL) if NOT rs.EOF OR NOT rs.BOF then Application("Hits") = rs("Hits") else Application("Hits") = 0 SQL = "INSERT INTO DateHits (Dato,Hits) VALUES (#" & date() & "#, 0)" MyConn.execute(SQL) end if rs.close Set rs = Nothing
SQL = "UPDATE DateHits SET Hits = " & (Application("Hits")+1) & " WHERE Dato = #" & date() & "#" MyConn.execute(SQL) Dim overmaaned overmaaned = DateAdd("d", -32, date()) SQL = "DELETE FROM DateHits Where Dato < #" & overmaaned & "#" MyConn.execute(SQL) MyConn.Close Set MyConn = Nothing Application.Unlock End Sub Sub Session_OnEnd End Sub </SCRIPT> -------------------- Skal lige siges der også er en login tjek i mener den står øverst..
SQL = "SELECT * FROM TOTAL" Set rs = MyConn.execute(SQL) Application("Total") = rs("Total") rs.close Set rs = Nothing SQL = "UPDATE Total SET Total = " & (Application("Total")+1) MyConn.execute(SQL)
SQL = "SELECT * from DateHits WHERE Dato = Date()" ' Rettet Set rs = MyConn.execute(SQL) if NOT rs.EOF OR NOT rs.BOF then Application("Hits") = rs("Hits") else Application("Hits") = 0 SQL = "INSERT INTO DateHits (Dato,Hits) VALUES (Date(), 0)" ' Rettet MyConn.execute(SQL) end if rs.close Set rs = Nothing
SQL = "UPDATE DateHits SET Hits = Hits+1 WHERE Dato = Date()" ' Rettet MyConn.execute(SQL) Dim overmaaned overmaaned = DateAdd("d", -32, date()) SQL = "DELETE FROM DateHits Where Dato < DateAdd('d',-32,Date()) 'Rettet MyConn.execute(SQL) MyConn.Close Set MyConn = Nothing Application.Unlock End Sub Sub Session_OnEnd End Sub </SCRIPT> --------------------
Hits.asp ----------- <% DBPath = "DBQ=" & server.mappath("hits.mdb") DBPath = "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath set MyConn = server.createobject("ADODB.connection") MyConn.Open DBPath Dim total,dag,dagt,dags,dage SQL = "Select * from Total" SQL1 = "Select Hits from DateHits where Dato = Date()" SQL2 = "Select sum(Hits) as summen from DateHits where Dato > DateAdd('d',-2,Date())" SQL7 = "Select sum(Hits) as summen from DateHits where Dato > DateAdd('d',-8,Date())" SQL31 = "Select sum(Hits) as summen from DateHits where Dato > DateAdd('d',-32,Date())" Set rs = MyConn.execute(SQL) if NOT rs.EOF OR NOT rs.BOF then total = rs("Total") else total = 0 end if rs.close set rs = Nothing Set rs = MyConn.execute(SQL1) if NOT rs.EOF OR NOT rs.BOF then dag = rs("Hits") else dag = 0 end if rs.close set rs = Nothing Set rs = MyConn.execute(SQL2) if NOT rs.EOF OR NOT rs.BOF then dagt = rs("summen") else dagt = 0 end if rs.close set rs = Nothing Set rs = MyConn.execute(SQL7) if NOT rs.EOF OR NOT rs.BOF then dags = rs("summen") else dags = 0 end if rs.close set rs = Nothing Set rs = MyConn.execute(SQL31) if NOT rs.EOF OR NOT rs.BOF then dage = rs("summen") else dage = 0 end if 'rs.close 'set rs = Nothing 'MyConn.Close 'Set MyConn = Nothing %>
Det var først global.asa og derefter hits.asp, hvor jeg bare har flyttet datoerne ind i sql-sætningen. I global.asa har jeg skrevet hvor der er rettet.
Men det kan jeg jo altid rette i DB.. Men tak for hjælpen "genie" ;)
Synes godt om
Ny brugerNybegynder
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.