webForumDet fria alternativet

Datumfunktion

9 svar · 1 977 visningar · startad av Kolsyra

KolsyraMedlem sedan sep. 201316 inlägg
#1

Hej,

jag har blivit ombedd att försöka hjälpa en förening med deras statistikdatabas (Access) men det var så förbaskat länge sen jag gjorde någon webprogramering nu.

Så jag tänkte höra mig för här om en grej jag går bet på.

Dom har en databas där dom matar in golfrundor bana för bana där dom nu vill kunna lägga in tävlingar som spelades innan dom byggde detta system. Problemet är att dom har byggt upp systemet (och vill ha det så) med en databas struktur som ser ut så här:

resultat_2006.mdb
resultat_2007.mdb
resultat_2008.mdb osv

i admin.asp har dom en funktion som ser ut så här:

<%
	
	strseason = Request.Querystring("Season")
	curryear = Year(now)
	
	If strseason = "" Then
		strseason = curryear
	Else 
		strseason = strseason
	End If 
	
%>

Funktionen för att skapa en tävling ser ut så här:

<% If Request.Querystring("Do") = "SaveComp" then
			
	Set Conn = Server.CreateObject("ADODB.Connection") 
	Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/resultat_"& strseason &".mdb") 

	CompName = Request.Form("CompName")
	Rounds = Request.Form("Rounds")
	CompDate = Request.Form("CompDate")
 
	Conn.Execute("Insert into tbl_comp(CompName,Rounds,CompDate) VALUES ('"& CompName &"','"& Rounds &"','"& CompDate &"')")

	response.redirect "admin.asp?Page=AddComp&Mess=Tävlingen inlagd i databasen!"

End If %>

Datumet i CompDate skrivs in med följande formatering: 2010-09-06

Min fråga är nu om det går att använda sig av årtalet i CompDate för att på så sätt tala om vilken databas resultatet ska sparas i? I detta exempel skulle det då bli att det skulle sparas i resultat_2010 enligt exempelformateringen ovan.

Är det något jag missat i all text så är det bara att fråga så ska jag försöka svara så tydligt jag kan.

Hoppas att någon vänlig själ här kan hjälpa mig att få till detta.

Tack på förhand

@ndersMedlem sedan juni 200032 969 inlägg
#2

Hej!

Typ nåt sånt härnt:

CompDate = Request.Form("CompDate")

if isdate(CompDate) then
     ' CompDate är ett giltigt datum
     iYear = Year(CDate(CompDate))
else
     ' CompDate är inte ett giltigt datum
end if

...

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/resultat_" & iYear & ".mdb")

Välkommen hit! :bire

mvh

KolsyraMedlem sedan sep. 201316 inlägg
#3

Hej Anders,

tack för ett snabbt svar. Dock får jag det inte att fungera, det hamnar i resultat_2013 iaf.

Vet inte om jag gjort rätt så jag klistrar in koden här.

<% If Request.Querystring("Do") = "SaveComp" then
			
	Set Conn = Server.CreateObject("ADODB.Connection") 
	CompDate = Request.Form("CompDate")
  
          if isdate(CompDate) then
          ' CompDate är ett giltigt datum
 
          iYear = Year(CDate(CompDate))
             else
          ' CompDate är inte ett giltigt datum
          end if
			
          Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/resultat_"& iYear &".mdb") 

          CompName = Request.Form("CompName")
	  Rounds = Request.Form("Rounds")
	  CompDate = Request.Form("CompDate")
 
	  Conn.Execute("Insert into tbl_comp(CompName,Rounds,CompDate) VALUES ('"& CompName &"','"& Rounds &"','"& CompDate &"')")

	  response.redirect "admin.asp?Page=AddComp&Mess=Tävlingen inlagd i databasen!"

End If %>
voigtann1Medlem sedan juni 20019 519 inlägg
#4

vad matar du in i CompDate?

KolsyraMedlem sedan sep. 201316 inlägg
#5

i CompDate matar jag in datumet i formatet 2013-09-06

voigtann1Medlem sedan juni 20019 519 inlägg
#6

Om du matar in 2013 så borde den ju läggas in i 2013 access databasen ;)

<%
If Request.Querystring("Do") = "SaveComp" then
	Set Conn = Server.CreateObject("ADODB.Connection") 
	CompDate = Request.Form("CompDate")

	If isdate(CompDate) Then
		CompDate = CDate(CompDate)
	Else
		CompDate = now()
	End If

	iYear = Year(CompDate)

	Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/resultat_" & iYear & ".mdb") 

	CompName = Request.Form("CompName")
	Rounds = Request.Form("Rounds")
	CompDate = Request.Form("CompDate")
 
	Conn.Execute("Insert into tbl_comp(CompName,Rounds,CompDate) VALUES ('"& CompName &"','"& Rounds &"','"& CompDate &"')")
	response.redirect "admin.asp?Page=AddComp&Mess=Tävlingen inlagd i databasen!"
End If
%>

borde fungera ju, dock så få du kanske ha ett max datum (så man inte kan kanske mata in 1970 för du har väl inte en databas för alla år?

KolsyraMedlem sedan sep. 201316 inlägg
#7

Ja absolut skrivs det in i resultat_2013.mdb om man skriver 2013-09-06 men problemet är att även när jag skriver 2010-02-07 så skrivs det in i resultat_2013.mdb istället för resultat_2010.mdb.

Har prövat att kopiera din kod ovan och fortfarande samma problem deessvärre, har du någon annan idé?

rhdfMedlem sedan okt. 2007446 inlägg
#8

Om "databasstrukturen" baseras på separata databaser så misstänker jag att du har en spännande tid framför dig.
Särskilt när du upptäcker att man stavat fel på en spelares namn ett år eller liknande :)

Jag noterar även att datumet för tävlingarna verkar lagras som text.
Jag har många "fina" minnen av såna där system..

Jag antar att man får skapa en kopia med alla tabeller för varje år och ladda upp, eller finns en funktion som skapar en ny databas. Det verkar ju inte finnas kod för att kolla om den databas man vill öppna existerar

Förresten, hur gör man om man vill få fram statistik som spänner över flera år?
;)

Den där strukturen skapar med andra ord en massa praktiska problem jämfört med om man skulle slå samman samtliga till en enskild databas (och kanske flytta över den till MySQL eller liknande)

voigtann1Medlem sedan juni 20019 519 inlägg
#9
<%
If Request.Querystring("Do") = "SaveComp" then
	CompDate = Request.Form("CompDate")

	If IsDate(CompDate) Then
		CompDate = CDate(CompDate)
	Else
		CompDate = now()
	End If

	iYear = Year(CompDate)

	Response.Write iYear

End If
%>

<form action="index.asp?do=SaveComp" method="post">
	<input type="text" value="2010-01-01" name="CompDate">
	<input type="submit">
</form>

ge mig 2010 (http://voigt.se/sandbox/wf/kolsyra)

prova sätt

session.lcid = 1053

kanske?

Även jag håller med rhdf, det hade varit enklare att ha en databas och filtrera ut med datum endast

KolsyraMedlem sedan sep. 201316 inlägg
#10

@voigtann! session.lcid = 1053 gjorde susen

@rhdf Jag har tyvärr inte lyckats övertala dom till att ha allt i samma databas, jag har också lekt med tanken på statistik över fler år.

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