Avatar billede _petrucci Nybegynder
18. december 2001 - 14:43 Der er 3 kommentarer og
2 løsninger

Datoformat ved update af SQL database

Hejsa :)

Er ved at blive lidt træt af at arbejde med dato\'er der ikke vil, hvad jeg vil. Problemet:

SQL tabellen har et datetime felt, hvor der er værdier som 27-05-2001. De kan fint udtrækkes til et inputfelt, men problemet opstår når jeg prøver at opdatere feltet via asp.

Ved indtastning 28-05-2001 får jeg denne fejl:

[Microsoft][ODBC SQL Server Driver][SQL Server]The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

Hvis jeg derimod indtaster 10-05-2001 går den fint igennem...men værdien i db-feltet bliver til gengæld så 05-10-2001 - altså det engelske format.

Hvordan får jeg fikset at når brugeren indtaster 28-05-2001....så får den konverteret det så den rigtige værdi bliver tilføjet i tabellen?

Har iøvrigt prøvet med Session.LCID = 1030 i toppen af alle siderne.
Avatar billede flytier Nybegynder
18. december 2001 - 16:26 #1
Det er fordi SQL-serveren er sat til engelsk dato-format, så du er skal validere din datoer før du indsætter dem i databasen, altså søge for at der står mm/dd/yy og ikke dd/mm/yy. Jeg bruger altid
select-boxe til dato angivelse og checker med en onSubmit i min form om datoen er valid.
Her er min client-side funktion som jeg bruger:

<script language=\"javascript\">
var MaanedArr = new Array();
    MaanedArr = [31,28,31,30,31,30,31,31,30,31,30,31];
   
    function checkStartDate(tObj){
       
        var yObj = tObj.startYear;
        var mObj = tObj.startMonth;
        var dObj = tObj.startDay;
       
        var year = parseInt(yObj.value);
        if(isNaN(year))
        {
            return false;
        }else
        {
        if(year<1900) year=1900;
       
            yObj.value = year;
            var month = mObj.value;
            if(month==2)
            {
                if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
                {
                    MaanedArr[1] = 29;
                }
            }
            if(dObj.value>MaanedArr[month-1])
            {
                dObj.options[MaanedArr[month-1]-1].selected=true;
            }
            return true;
        }
       
        MaanedArr[1] = 28;
    }
</script>

Og her er HTML\'en:

<table border=\"0\">
<form name=\"minForm\" method=\"post\">
<tr>
        <td><b>StartDate:</b></td>
        <td>
            <select name=\"startDay\" class=\"iframeInput\" onChange=\"checkStartDate(this.form);\">
<%
        var Y = 2000;
        var Year = new Array();
        for(i=0;i<=50; i++)
        {
            Year[i] = Y;
            Y++;
        }
        var dateNumber = [\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'10\',\'11\',\'12\',\'13\',\'14\',\'15\',\'16\',\'17\',\'18\',\'19\',\'20\',\'21\',\'22\',\'23\',\'24\',\'25\',\'26\',\'27\',\'28\',\'29\',\'30\',\'31\'];
        var MonthNumber = [\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'10\',\'11\',\'12\'];
        var Month = [\'Jan\',\'Feb\',\'Mar\',\'Apr\',\'May\',\'Jun\',\'Jul\',\'Aug\',\'Sep\',\'Oct\',\'Nov\',\'Dec\'];
        var toDay = new Date();
        var startDay = \"\"+toDay.getDate();
        var startMonth = toDay.getMonth();
        var startYear = toDay.getYear();
        //Response.write(startDay+\"-\"+startMonth+\"-\"+startYear);
        //Response.write(\"\");
        for(i=0; i<dateNumber.length; i++)
        {
            if(dateNumber[i] == startDay)
            {
%>
                <option value=\"<%=dateNumber[i] %>\" selected><%=dateNumber[i] %>
<%
            }
            else
            {
%>
                <option value=\"<%=dateNumber[i] %>\"><%=dateNumber[i] %>
<%
            }
        }
%>
            </select>
            &nbsp;
            <select name=\"startMonth\" class=\"iframeInput\" onChange=\"checkStartDate(this.form);\">
<%
        for(i=0; i<MonthNumber.length; i++)
        {
            if(MonthNumber[i] == (startMonth + 1))
            {
%>
                <option value=\"<%=MonthNumber[i] %>\" selected><%=Month[i] %>
<%
            }
            else
            {
%>
                <option value=\"<%=MonthNumber[i] %>\"><%=Month[i] %>
<%
            }
        }
%>
            </select>
            &nbsp;
            <select name=\"startYear\" class=\"iframeInput\" onChange=\"checkStartDate(this.form);\">
<%
                for(i=0;i<Year.length;i++)
                {
                    if(parseInt(Year[i]) == parseInt(startYear))
                    {
%>
                        <option value=\"<%=Year[i] %>\" selected><%=Year[i] %>
<%
                    }
                    else
                    {
%>
                        <option value=\"<%=Year[i] %>\"><%=Year[i] %>
<%
                    }
                }
%>
            </select>
        </td>
        <td></td>
    </tr>
</form>
</table>

Michael
Avatar billede thb Nybegynder
19. december 2001 - 01:06 #2
igen grund til sådan lang kode.. :0)

Du laver 3 text felter, et til dag, måned og år...
Felterne kalder du dag,maned og ar..

og så kan du køre denne kode...

<%
dag = request.form(\"dag\")
maned = request.form(\"maned\")
ar = request.form(\"ar\")

dato = dateserial(year(ar),month(maned),day(dag))

\' Og så indsætter du det i din datebase...
%>

Dette kræver at dit felt i databasen er en datofelt.

Når du skal udskrive det, så vil det se sådan ud:

<%
\' her er der blevet åbnet til din db.
  response.write day(rs(\"dato\")) & \".\" & month(rs(\"dato\")) & \".\" & year(rs(\"dato\"))
%>

Håber at du forstår

Thomas
Avatar billede _petrucci Nybegynder
19. december 2001 - 08:06 #3
Hej igen,

fine alternative muligheder. Nu er det i mellemtiden sådan, at jeg bruger 2 input felter til hver dato. Eks:

<%= formatdatetime(STARTDATO, 2) %>  (27-05-2001)
og
<%= formatdatetime(STARTDATO, 4) %> (14:00:00)

Hvis jeg skulle vælge den løsning at lave 3 felter til henholdsvis dag/måned/år...og så lave et 4. felt med tidspunktet...hvordan får jeg så dette ind i tabellen i det rigtige format?

(Som nævnt...jeg hader dato\'er i asp/sql så det er lidt frustrende) :(
Avatar billede _petrucci Nybegynder
19. december 2001 - 08:29 #4
Never mind - fandt lige ud af det. Points til begge for de alternative løsninger som jeg måske også vil gøre brug af :)
Avatar billede thb Nybegynder
19. december 2001 - 11:24 #5
hvis du skal have tid ind i samme format, så skal du bruge samme funkton...

tid = Serialtime(hour(time),minute(minut),second(sekund))

Thomas
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Roskilde Universitet

AV Tekniker

Forsvarsministeriets Materiel- og Indkøbsstyrelse

IT-Sikkerhedsrådgiver til Cyberdivisionen i Hvidovre

Capgemini Danmark A/S

AI Data Architect