Meddelande

Minska
No announcement yet.

Datumfunktion

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Datumfunktion

    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:


    [KOD]
    <%

    strseason = Request.Querystring("Season")
    curryear = Year(now)

    If strseason = "" Then
    strseason = curryear
    Else
    strseason = strseason
    End If

    %>
    [/KOD]

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

    [KOD]
    <% 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 %>
    [/KOD]

    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

  • #2
    Hej!

    Typ nåt sånt härnt:

    [kod]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")

    [/kod]Välkommen hit!

    mvh
    @aviddevguy

    Kommentera


    • #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.

      [KOD]
      <% 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 %>
      [/KOD]

      Kommentera


      • #4
        vad matar du in i CompDate?
        "det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck

        Kommentera


        • #5
          i CompDate matar jag in datumet i formatet 2013-09-06

          Kommentera


          • #6
            Om du matar in 2013 så borde den ju läggas in i 2013 access databasen

            [kod]<%
            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
            %>[/kod]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?
            "det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck

            Kommentera


            • #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é?

              Kommentera


              • #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)
                Last edited by rhdf; 2013-09-07, 05:00.

                Kommentera


                • #9
                  [kod]<%
                  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>[/kod]
                  ge mig 2010 (http://voigt.se/sandbox/wf/kolsyra)

                  prova sätt
                  [kod]session.lcid = 1053[/kod] kanske?


                  Även jag håller med rhdf, det hade varit enklare att ha en databas och filtrera ut med datum endast
                  "det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck

                  Kommentera


                  • #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.

                    Kommentera

                    Working...
                    X