Avatar billede mortency Nybegynder
01. juni 2004 - 13:27 Der er 15 kommentarer og
1 løsning

Convert dato problem i MS SQL Database

Jeg skal sette inn og hente datoer flere ganger i et script. Hvordan kan jeg få formatet til å bli likt på alle sammen? Så jeg slipper å konvertere datoen hver eneste gang jeg skal sette den inn?

Noen ganger blir 03.01.2004 til 01.03.2004

//Morten

<%
'Fant denne på eksperten...
Function ConvertToSqlDate(dato)
    dim SQLYear,SQLMonth,SQLDay
 
    SQLYear = Year(dato)
    SQLMonth = Month(dato)
    SQLDay = Day(dato)
    If SQLDay < 10 Then
        SQLDay = 0&SQLDay
    End if
   
    If SQLMonth < 10 Then
        SQLMonth = 0&SQLMonth
    End If
    ConvertToSqlDate = SQLYear&SQLMonth&SQLDay
End Function
%>

<%
Option Explicit

Server.ScriptTimeout = 500

Session.LCID = 1033
%>
<!--#include file ="../include/global_variables.asp"-->
<!--#include file ="../user_include/check_import_login.asp"-->
<!--#include file ="include/sjekk_loggin.asp"-->
<!--#include file ="../include/include_dbconn.asp"-->
<%
strConn = "Provider=SQLOLEDB;Initial Catalog=import_biler; Server=;User ID=;Password="

dim adoCn
dim strSQL
set adoCn = Server.CreateObject("ADODB.Connection")
adoCn.Open strConn
%>     
<!--#include file ="../include/include_dbconn_error.asp"-->
<%
'----------------------------------------------------------------------------------------------------------------------------------------
'HENTER PREMIE - START
'----------------------------------------------------------------------------------------------------------------------------------------
strSQL = "SELECT Premie FROM tbl" & strKundeNavn & "Premie WHERE PID='1'"
set adoRs = adoCn.Execute(strSQL)
               
If not adoRs.EOF Then
    strAarspremie = adoRs("Premie")
End if
           
strPremie = 1
               
adoRs.Close
Set adoRs = Nothing
'----------------------------------------------------------------------------------------------------------------------------------------
'HENTER PREMIE - SLUTT
'----------------------------------------------------------------------------------------------------------------------------------------

strFil = Trim(Request.Form("txtFile"))
strPath = strLoggOKPath & strFil

Set FSO = CreateObject("Scripting.FileSystemObject")

If not FSO.FileExists(strPath) Then
        Response.Redirect "step1.asp?MSG=Filen eksisterer ikke lenger, last opp ny fil(S4)"
        Response.End
End if

Filespec = strPath
Set F = FSO.OpenTextFile(Filespec,1)

error = ""

i = 0
iNew = 0
iUpdate = 0
iNoUpdate = 0
iDelete = 0
iNoDelete = 0

Do While not F.AtEndOfStream

    FilArr = Split(F.Readline, ";")
   
    'Henter data fra txtfil
    strEier = Trim(filArr(0))
    strRegnr = UCASE(Trim(filArr(1)))
    strFabrikat = Trim(filArr(2))
    strModell = Trim(filArr(3))
    strType = Trim(filArr(4))
    strArsmodell = Trim(filArr(5))
    strMotor = Trim(Replace(filArr(6),".","," ))'Fjerner punktum og setter inn et komma.
    strListePris = Trim(filArr(7))
    strPremie = Trim(filArr(8))'Denne hentes automatisk ut fra systemet, det er kun en premie.
    strAvdeling = Trim(filArr(9))
    strRegAv = Trim(filArr(10))'Denne kan godt settes til fast siden den ikke skal tukles med
    strGjelderFra = Trim(Replace(filArr(11),".","/" ))
    strAktiv = Trim(filArr(12))
    strSiOppForsikringFra = Trim(Replace(filArr(13),".","/" ))
               
    strDato2 = strGjelderFra
               
    strDay2 = Day( strdato2 )
    if len(strDay2) = 1 then
        strDay2 = "0" & strDay2
    end if
                           
    strMonth2 = Month( strdato2 )
    if len(strMonth2) = 1 then
        strMonth2 = "0" & strMonth2
    end if
                       
    strYear2 = Year( strdato2 )
    if len(strYear2) = 1 then
        strYear2 = "0" & strYear2
    end if
                       
    strGjelderFra =  strDay2 & "/" & strMonth2    & "/" & strYear2   
   
    '----------------------------------------------------------------------------------------------------------------------------------------
    'REGNER PERIODE PREMIE - START
    '----------------------------------------------------------------------------------------------------------------------------------------                       
    strSisteDag = year(Date()) & "/12/31"
               
    strGetDager = DateDiff("Y", strGjelderFra, strSisteDag)

    strDagerIaar = DateDiff("Y", year(Date()) & "/01/01", year(Date()) & "/12/31")
               
    strPeriodePremie = Cstr(strAarspremie) / strDagerIaar * Cstr(strGetDager)
           
    If Int(formatnumber((strPeriodePremie),0)) > Int(strAarsPremie) Then
        strPeriodePremie = strAarsPremie
    End if
    '----------------------------------------------------------------------------------------------------------------------------------------
    'REGNER PERIODE PREMIE - SLUTT
    '----------------------------------------------------------------------------------------------------------------------------------------   
     
    strSQL = "SELECT BID FROM tblHertzkorttidsleieBiler WHERE RegNr='" & Trim(FilArr(1)) & "'"
    set adoRs = adoCn.Execute(strSQL)
     
    If adoRs.EOF Then
        strSQL = ""
        strSQL = "INSERT INTO tbl" & strKundeNavn & "Biler (FKEier,Regnr,FKFabrikat,FKModell,FKType,Arsmodell,Motorstorrelse,ListePris,FKPremie,PeriodePremie,FKBRAvdeling,OppRettetDato,FKRegAv,GjelderFra,Aktiv,EndretDato) VALUES " &_
                        "(" & strEier & ",'" & strRegnr & "'," & strFabrikat & "," & strModell & "," & strType & "," & strArsmodell & ",'" & strMotor & "'," & strListePris & "," & strPremie & "," & Clng(strPeriodePremie) & "," & strAvdeling & ",'" & now() & "'," & strRegAv & ",'" & ConvertToSqlDate(strGjelderFra) & "','" & strAktiv & "','" & now() & "')"
        adoCn.Execute(strSQL)
                                                   
        iNew = iNew + 1               
    Else
        strBID = adoRs("BID")
        'Bilen blir oppdatert eller slettet
        strSQL = ""
       
        strSQLOLD = ""
       
        'Henter gamle data
        set adoRsOLD = Server.CreateObject("ADODB.Recordset")
        strSQLOLD = "Select DISTINCT AID,Anavn,BID,FKEier,RegNr,FKFabrikat,FKModell,FKType,ArsModell,MotorStorrelse,ListePris,Premie,PeriodePremie,FKBRAvdeling,OpprettetDato,GjelderFra,Eier,Aktiv FROM tbl" & strKundeNavn & "Eier, tbl" & strKundeNavn & "Biler, tbl" & strKundeNavn & "Fabrikat,tbl" & strKundeNavn & "Type,tbl" & strKundeNavn & "Premie,tbl" & strKundeNavn & "Avdeling,tbl" & strKundeNavn & "Modell WHERE FKEier=EID AND Regnr='" & strRegnr & "' AND FKFabrikat=FID AND FKModell=MID AND FKType=TID AND FKBRAvdeling=AID and FKPremie=PID"
       
        set adoRsOLD = adoCn.Execute(strSQLOLD)
       
        If not adoRsOLD.EOF then
            strOLDAID = adoRsOLD("AID")
            strOLDANavn = adoRsOLD("ANavn")
            strOLDBID = adoRsOLD("BID")
            strOLDEID = adoRsOLD("FKEier")
            strOLDEierNavn = adoRsOLD("Eier")
            strOLDRegNr = adoRsOLD("RegNr")
            strOLDFKFabrikat = adoRsOLD("FKFabrikat")
            strOLDFKModell = adoRsOLD("FKModell")
            strOLDFKType = adoRsOLD("FKType")
            strOLDArsModell = adoRsOLD("ArsModell")
            strOLDMotorstorrelse = adoRsOLD("MotorStorrelse")
            strOLDListePris = adoRsOLD("Listepris")
            strOLDPremie = adoRsOLD("Premie")
            strOLDPeriodePremie = adoRsOLD("PeriodePremie")
            strOLDGjelderFra = adoRsOLD("GjelderFra")
            strOLDAktiv = adoRsOLD("Aktiv")
        End If
       
        adoRsOLD.Close
        set adoRsOLD = nothing
           
        If strAktiv = "JA" Then               

            error = ""                                                               
   
            UpdateCar = False
            If Cint(strAvdeling)=Cint(strOLDAID) AND Cint(strEier)=Cint(strOLDEID) AND strRegnr=strOLDRegNr AND Cint(strFabrikat)=Cint(strOLDFKFabrikat) AND Cint(strModell)=Cint(strOLDFKModell) AND Cint(strType)=Cint(strOLDFKType) AND Cint(strArsModell)=Cint(strOLDArsModell) AND strMotor=strOLDMotorstorrelse AND Cint(strListePris)=Cint(strOLDListePris) AND Trim(strGjelderFra)=Trim(strOLDGjelderFra) Then
                iNoUpdate = iNoUpdate + 1
                UpdateCar = True
            End if
       
            If UpdateCar = False Then
                strSQL = "SELECT BID,RegNr FROM tbl" & strKundeNavn & "Biler WHERE Regnr=" & "'" & strRegnr &"' AND Aktiv='JA'"
                set adoRsFind = adoCn.Execute(strSQL)
                   
                InserOK = false
                if not adoRsFind.EOF then
                    if CInt(strOLDBID) = CInt(adoRsFind("BID")) then 
                    'Regnr finnes men det er samme bruker.
                    InserOK = true
                  end if
                else
                  InserOK = true 'Nytt Regnr finnes ikke.
                end if

                If error <> "" Then
                    Response.Clear
                    %><html>
                    <body onload="window.alert('En feil oppstod! \n<% =error %>');
                            window.history.back();">
                    &nbsp;</body></html><%
                    Response.End
                End If
   
                strDato = "now()"
   
                if InserOK = true then
       
                strSQL = ""       
                strSQL = "UPDATE tbl" & strKundeNavn & "biler Set FKEier=" & strEier &_
                                ", FKFabrikat = " & strFabrikat &_
                                ", FKModell = " & strModell &_
                                ", FKType = " & strType &_
                                ", ArsModell = " & strArsModell &_
                                ", MotorStorrelse = '" & strMotor &_
                                "', ListePris = " & strListePris &_
                                ", FKPremie = " & strPremie &_
                                ", PeriodePremie = " & Clng(strPeriodePremie) &_
                                ", FKBRAvdeling = " & strAvdeling &_
                                ", FKRegAv = " & strRegAv &_
                                ", GjelderFra = '" & ConvertToSqlDate(strGjelderFra) &_
                                "', Aktiv = '" & strAktiv &_
                                "', EndretDato = '" & now() &_
                                "' WHERE Regnr='" & strRegnr &"'"
                               
                adoCn.Execute(strSQL)               
                               
                '----------------------------------------------------------------------------------------------------------------------------------------
                'LOGG ENDRINGER - START
                '----------------------------------------------------------------------------------------------------------------------------------------   
                Set oRS=Server.CreateObject("ADODB.Recordset")
                oRS.CursorLocation = 2 ' adUseServer
                oRS.CursorType = 2 ' adOpenDynamic
                oRS.LockType = 3 ' adLockOptimistic   
       
                strSQL = ""       
                strSQL = "SELECT EndreFKBID,NyEier,GammelEier,NyRegNr,GammelRegNr,NyFabrikat,GammelFabrikat,NyModell,GammelModell,NyType,GammelType,NyArsmodell,GammelArsmodell,NyMotorStorrelse,GammelMotorStorrelse,NyListePris,GammelListePris,NyPremie,GammelPremie,NyPeriodePremie,GammelPeriodePremie,NyAvdeling,GammelAvdeling,NyGjelderFra,GammelGjelderFra,EndretAv,EndretDato FROM tbl" & strKundeNavn & "LoggEndringer"
                oRS.Open strSQL, strConn, , , &H0001 ' adCmdText
                           
                oRS.AddNew
                oRs("EndreFKBID") = strOLDBID
                oRs("NyEier") = strEier
                oRs("GammelEier") = strOldEID
                oRS("NyRegnr") = strRegNr
                oRS("GammelRegnr") = strOldRegNr
                oRS("NyFabrikat") = strFabrikat
                oRS("GammelFabrikat") = strOLDFKFabrikat
                oRS("NyModell") = strModell
                oRS("GammelModell") = strOLDFKModell
                oRS("NyType") = strType
                oRS("GammelType") = strOLDFKType
                oRS("NyArsmodell") = strArsmodell
                oRS("GammelArsmodell") = strOldArsmodell
                oRS("NyMotorStorrelse") = strMotor
                oRS("GammelMotorStorrelse") = strOLDMotorstorrelse
                oRS("NyListePris") = strListePris
                oRS("GammelListePris") = strOldListePris
                oRS("NyPremie") = strAarspremie
                oRS("GammelPremie") = strOldPremie
                oRS("NyPeriodePremie") = Clng(strPeriodePremie)
                oRS("GammelPeriodePremie") = strOldPeriodePremie
                oRS("NyAvdeling") = strAvdeling
                oRS("GammelAvdeling") = strOldAID
                oRS("NyGjelderFra") = ConvertToSqlDate(strGjelderFra)
                oRS("GammelGjelderFra") = ConvertToSqlDate(strOldGjelderFra)
                oRS("EndretAv") = strRegAv
                oRS("EndretDato") = now()
                oRS.Update
                '----------------------------------------------------------------------------------------------------------------------------------------
                'LOGG ENDRINGER - SLUTT
                '----------------------------------------------------------------------------------------------------------------------------------------   
                   
                oRS.Close
                Set oRS = Nothing                               
                                   
                else
                    error = error & " Regnr er benyttet før eller så er bilen aktiv i databasen! Regnr på bilen var" & strRegnr & " - Feilen var i linje " & i & "\n"
                end if
       
                If error <> "" Then
                    Response.Clear
                    %><html>
                    <body onload="window.alert('En feil oppstod! \n<% =error %>');
                            window.history.back();">
                    &nbsp;</body></html><%
                    Response.End
                End If

                iUpdate = iUpdate + 1
            End if
           
        ElseIf strAktiv = "NEI" Then
       
            If strOLDAktiv <> "NEI" Then
       
                strSQL = ""       
                strSQL = "UPDATE tbl" & strKundeNavn & "biler Set Aktiv='" & strAktiv &_
                                "', SlettetAv = " & strRegAv &_
                                ", SlettetDato= '" & now() &_
                                "', SiOppForsikringFra = '" & ConvertToSqlDate(strSiOppForsikringFra) &_
                                "', EndretDato = '" & now() &_
                                "' WHERE Regnr='" & strRegnr &"'"
                                       
                adoCn.Execute(strSQL)
   
                If error <> "" Then
                    Response.Clear
                    %><html>
                    <body onload="window.alert('En feil oppstod! <% =error %>');
                            window.history.back();">
                    &nbsp;</body></html><%
                    Response.End
                End If        
   
                'Hvis alt går i orden uten feil så lages loggen...........
                'LOGG START
                '**********************************************************
                strSQL = "INSERT INTO tbl" & strKundeNavn & "LoggSlettinger (SlettetFKBID,SlettetEier,SlettetRegnr,SlettetAvdeling,SlettetAv,SlettetDato,SlettetSiOppForsikringFra) VALUES " &_
                                "(" & strBID & "," & strEier & ",'" & strRegnr & "'," & strAvdeling  & "," & strRegAv & ",'" & now() & "','" & ConvertToSqlDate(strSiOppForsikringFra) & "')"
                adoCn.Execute(strSQL)               
               
                '**********************************************************
                'LOGG SLUTT
   
                If error <> "" Then
                    Response.Clear
                    %><html>
                    <body onload="window.alert('En feil oppstod! <% =error %>');
                            window.history.back();">
                    &nbsp;</body></html><%
                    Response.End
                End If    
               
                iDelete = iDelete + 1
            Else
                iNodelete = iNodelete + 1
            End if
                   
        End if
   
    End if
   
    adoRs.Close
    Set adoRs = Nothing
   
i = i + 1
Loop

adoCn.Close
set adoCn = nothing

Set F = Nothing

'Oppretter nytt filnavn
FilNavn = now()

strDay = Day( FilNavn )
if len(strDay) = 1 then
    strDay = "0" & strDay
end if
           
strMonth = Month( FilNavn )
if len(strMonth) = 1 then
    strMonth = "0" & strMonth
end if
       
strYear = Year( FilNavn )
if len(strYear) = 1 then
    strYear = "0" & strYear
end if
           
strHour = Hour( FilNavn )
if len(strHour) = 1 then
    strHour = "0" & strHour
end if
       
strMinute = Minute( FilNavn )
if len(strMinute) = 1 then
    strMinute = "0" & strMinute
end if
           
strSecond = Second( FilNavn )
if len(strSecond) = 1 then
    strSecond = "0" & strSecond
end if
       
FilNavn = strDay & "." & strMonth & "." & strYear & " KL " & strHour & "." & strMinute & "." & strSecond & " P-" & i & "_N-" & iNew & "_O-" & iUpdate & "_S-" & iDelete & "_IFS-" & iNoDelete & "_UE-" & iNoUpdate & ".txt"
'Nytt filnavn slutt

'Kopierer filen til logg mappen
strOKPath =strLoggPath & strFil
strOKPath = strLoggPath & FilNavn
FSO.CopyFile strPath,strOKPath

'Sjekker om import_files_OK/" & strFil eksisterer og sletter
FSO.DeleteFile(strPath)
strOKFile = False
If Not FSO.FileExists(strPath) Then
    strOKFile = True
End if

'Sjekker om import_files_not_OK/" & strFil eksisterer
strNotOKFile = False
If Not FSO.FileExists(strPath) Then
    strNotOKFile = True
End if

Set FSO = Nothing
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
  <LINK REV=made href="mailto:morten@cyren.no">
  <TITLE><%=strtittel%></TITLE>
  <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
  <META HTTP-EQUIV="Pragma" content="no-cache">
  <META name="robots" content="NOINDEX">
  <META name="Author" content="Morten Marius Cyrèn">
  <META name="Copyright" content="Morten Marius Cyrèn">
  <META name="Publisher" content="Morten Marius Cyrèn">
  <link rel="shortcut icon" href="../../profil/icon/icon.ico">
  <link rel="stylesheet" type="text/css" href="../css/stylesheetIE.css">
</head>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<table width="100%" border="0" cellspacing="0" cellpadding="0" height="100%">
  <tr>
    <td align="center">
        <div align="center" class="text"><b>STEG 4 AV 4 - <font color="green">FILEN ER IMPORTERT!</font></b></div>
        <table style="border-right: rgb(204,204,204) 1px solid; border-top: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; width: 350px; border-bottom: rgb(204,204,204) 1px solid" cellspacing=0 cellpadding=0 border=0>
        <tbody>
        <tr valign=top align="middle">
        <td style="padding-right: 10px; padding-left: 10px; padding-bottom: 10px; padding-top: 10px">
        <table style="padding-right: 3px; padding-left: 3px; padding-bottom: 3px; padding-top: 3px" cellspacing=0 cellpadding=0 border=0>
        <tbody>       
        <tr>
            <td class="text">Antall poster i tekst filen: <b><font color="green"><%=i%></font></b> (P)</td>
        </tr>
        <tr>
        <td class="text">Antall nyregistreringer: <b><font color="green"><%=iNew%></font></b> (N)</td>
        </tr>
        <tr>
            <td class="text">Antall oppdateringer: <b><font color="green"><%=iUpdate%></font></b> (O)</td>
        </tr>
        <tr>
            <td class="text">Antall slettinger: <b><font color="green"><%=iDelete%></font></b> (S)</td>
        </tr>
        <tr>
            <td class="text">Antall ikke fullførte slettinger: <b><font color="red"><%=iNoDelete%></font></b> (Var slettet før!) (IFS)</td>
        </tr>               
        <tr>
            <td class="text">Antall uten endringer: <b><font color="red"><%=iNoUpdate%></font></b> (Like data i databasen og tekstfilen!) (UE)</td>
        </tr>
        <tr>
            <td class="text">
            <%
            If strNotOKFile = True AND strOKFile = True Then
                Response.Write "<font color='green'><b>Filene er slettet og overført til logg mappen!</b> - [ <a href='view_log.asp'>Se logg</a> ]</font>"
            Else
                If strNotOKFile = True Then
                    Response.Write "<font color='red'><b>import_files_not_OK/" & strFil & " er ikke tom</b></font>"
                Elseif strOKFile = True Then
                    Response.Write "<font color='red'><b>import_files_OK/" & strFil & " er ikke tom</b></font>"
                End if
            End if
            %>
            </td>
        </tr>                                                       
        <tr>
            <td class="text" align="middle">[ <a href="step1.asp">Last opp ny fil</a> ]</td>
        </tr>
        </tbody>
        </table>
        </td>
        </tr>
        </tbody>
        </table>   
    </td>
  </tr>
</table>
</body>
</html>
Avatar billede ldanielsen Nybegynder
01. juni 2004 - 14:03 #1
Er det kun et problem for dig at "INSERT"'e og "UPDATE"'e?
Avatar billede mortency Nybegynder
01. juni 2004 - 14:09 #2
Nei problemet er at jeg henter dato fra databasen og setter den inn et annet sted, samt at den kommer fra et form. Jeg vil har lik dato formatering på alle poster kan det la seg gjøre?
Avatar billede ldanielsen Nybegynder
01. juni 2004 - 14:10 #3
Prøv dette:

Sørg for at datoerne kommer ind i INSERT'en som 'yyyy/mm/dd', for eks. '2004/3/8'. De gør du ved at lave funktionen om til at være noget lignende dette:

Function ConvertToSqlDate(dato)
    dim SQLYear,SQLMonth,SQLDay
 
    SQLYear = Year(dato)
    SQLMonth = Month(dato)
    SQLDay = Day(dato)
       
    ConvertToSqlDate = SQLYear & "/" & SQLMonth & "/" & SQLDay
End Function

Og lav så UPDATE'en sådan:

strSQL = "SET DATEFORMAT ymd; UPDATE tbl ..... osv osv "
Avatar billede mortency Nybegynder
01. juni 2004 - 14:12 #4
Kan SET DATEFORMAT bruker på insert og update?
Avatar billede ldanielsen Nybegynder
01. juni 2004 - 14:20 #5
Det diskuteres meget, dette her :o)

Kort sagt:
At hente en dato er intet problem; du skal blot selv sørge for at datoen bliver vist på den måde du ønsker, fx. med:
Response.Write Day(oRS("Datofeltet")) & "-" &  Month(oRS("Datofeltet")) & "-" &  Day(oRS("Datofeltet"))

Hvis du bruger ADO til at INSERT'e og UPDATE'e er der heller ikke det store problem, ud over det problem at få oversat en tekst til en korrekt dato. Hvis en bruger skriver en dato i et tekstfelt, så skal du kunne finde ud af hvad dag og måned og år han mener. Når det er løst kan du konvertere disse til en VBScript-dato med følgende:

dtmDato = DateSerial(strYear, strMonth, strDay)

og derefter er det blot:

...
oRS("datofeltet") = dtmDato
oRS.Update
...

Hvis du vil update med SQL, så brug metoden fra mit foregående indlæg
Avatar billede ldanielsen Nybegynder
01. juni 2004 - 14:26 #6
Ja, det kan du. Vær opbærksom på ; efter SET DATEFORMAT ymd!!! Det fungerer som GO i T-SQL, ellers vil du få en fejl
Avatar billede mortency Nybegynder
01. juni 2004 - 14:30 #7
datoen som blir hentet er alltid dd.mm.yyyy

  strDato2 = strGjelderFra
               
    strDay2 = Day( strdato2 )
    if len(strDay2) = 1 then
        strDay2 = "0" & strDay2
    end if
                           
    strMonth2 = Month( strdato2 )
    if len(strMonth2) = 1 then
        strMonth2 = "0" & strMonth2
    end if
                       
    strYear2 = Year( strdato2 )
    if len(strYear2) = 1 then
        strYear2 = "0" & strYear2
    end if
                       
    strGjelderFra =  strDay2 & "/" & strMonth2    & "/" & strYear2   

Denne må brukes for at jeg skal kunne kjøre:

    strSisteDag = year(Date()) & "/12/31"
               
    strGetDager = DateDiff("Y", strGjelderFra, strSisteDag)

    strDagerIaar = DateDiff("Y", year(Date()) & "/01/01", year(Date()) & "/12/31")
               
    strPeriodePremie = Cstr(strAarspremie) / strDagerIaar * Cstr(strGetDager)
           
    If Int(formatnumber((strPeriodePremie),0)) > Int(strAarsPremie) Then
        strPeriodePremie = strAarsPremie
    End if
Avatar billede ldanielsen Nybegynder
01. juni 2004 - 14:35 #8
Du skal adskille tingene skarpt, der er mindst 3 måder at en dato kan optræde i ASP:

Som et felt i et recordSet:
oRS("Datofelt")

Som en VBScript Date variabel: kommer fx fra:
DateSerial(strYear, strMonth, strDay)
At bruge Cdate er meget usikkert: Cdate(strDay & "-" & strMonth & "-" strYear) - vil give forskelligt resultat afhængig af den server det kører på.

Som en tekststreng, enten fra en brugers indtastning, eller den tekststreng du selv laver for at vise den frem for brugerne, eller den tekststreng du laver for at bruge den i en SQL INSERT eller UPDATE.

Find nogle faste måder at gøre det på, og brug dem så altid. Hvis du følger mine får du et script der vil kunne køre på engelske, franske og norske servere, uden problemer.
Avatar billede mortency Nybegynder
01. juni 2004 - 14:38 #9
input = "01.05.2003"

input = DateSerial(strYear, strMonth, strDay)

'Blir da?
Input = "2003,05,01"???

Mener du med dette at datoen alltid blir korrekt?
Avatar billede mortency Nybegynder
01. juni 2004 - 14:43 #10
//IDanielsen

Alle data som skal importeres kommer ifra en txt fil som kan se slik ut:
26;BP77322;2;18;1;2003;1.6;0;1;181;43;12.01.2004;NEI;12.01.2004
26;CF21245;2;18;1;2003;1.6;0;1;181;43;01.12.2003;NEI;01.12.2003
26;DK52869;2;18;1;2003;1.6;0;1;181;43;10.10.2004;NEI;10.10.2004
38;HB60425;13;73;1;2002;1.2;0;1;181;43;01.03.2003;NEI;01.03.2003
38;FS96790;13;73;1;2002;1.2;0;1;181;43;03.01.2003;NEI;03.01.2003
38;BP70644;13;73;1;2002;1.2;0;1;181;43;09.11.2003;NEI;09.11.2003
38;BP70643;13;73;1;2002;1.2;0;1;181;43;11.09.2003;NEI;11.09.2003

Problemet er at dataene blir forskjellige hvis du ser igjennom scriptet.
11.09.2003 blir 09.11.2003 osv

Det er mange sql`er

        strSQL = "SET DATEFORMAT ymd; INSERT INTO tbl" & strKundeNavn & "Biler (FKEier,Regnr,FKFabrikat,FKModell,FKType,Arsmodell,Motorstorrelse,ListePris,FKPremie,PeriodePremie,FKBRAvdeling,OppRettetDato,FKRegAv,GjelderFra,Aktiv,EndretDato) VALUES " &_
                        "(" & strEier & ",'" & strRegnr & "'," & strFabrikat & "," & strModell & "," & strType & "," & strArsmodell & ",'" & strMotor & "'," & strListePris & "," & strPremie & "," & Clng(strPeriodePremie) & "," & strAvdeling & ",'" & now() & "'," & strRegAv & ",'" & ConvertToSqlDate(strGjelderFra) & "','" & strAktiv & "','" & now() & "')"
        adoCn.Execute(strSQL)

                strSQL = "SET DATEFORMAT ymd; UPDATE tbl" & strKundeNavn & "biler Set FKEier=" & strEier &_
                                ", FKFabrikat = " & strFabrikat &_
                                ", FKModell = " & strModell &_
                                ", FKType = " & strType &_
                                ", ArsModell = " & strArsModell &_
                                ", MotorStorrelse = '" & strMotor &_
                                "', ListePris = " & strListePris &_
                                ", FKPremie = " & strPremie &_
                                ", PeriodePremie = " & Clng(strPeriodePremie) &_
                                ", FKBRAvdeling = " & strAvdeling &_
                                ", FKRegAv = " & strRegAv &_
                                ", GjelderFra = '" & ConvertToSqlDate(strGjelderFra) &_
                                "', Aktiv = '" & strAktiv &_
                                "', EndretDato = '" & now() &_
                                "' WHERE Regnr='" & strRegnr &"'"
                               
                adoCn.Execute(strSQL)   

                oRS.AddNew
                oRs("EndreFKBID") = strOLDBID
                oRs("NyEier") = strEier
                oRs("GammelEier") = strOldEID
                oRS("NyRegnr") = strRegNr
                oRS("GammelRegnr") = strOldRegNr
                oRS("NyFabrikat") = strFabrikat
                oRS("GammelFabrikat") = strOLDFKFabrikat
                oRS("NyModell") = strModell
                oRS("GammelModell") = strOLDFKModell
                oRS("NyType") = strType
                oRS("GammelType") = strOLDFKType
                oRS("NyArsmodell") = strArsmodell
                oRS("GammelArsmodell") = strOldArsmodell
                oRS("NyMotorStorrelse") = strMotor
                oRS("GammelMotorStorrelse") = strOLDMotorstorrelse
                oRS("NyListePris") = strListePris
                oRS("GammelListePris") = strOldListePris
                oRS("NyPremie") = strAarspremie
                oRS("GammelPremie") = strOldPremie
                oRS("NyPeriodePremie") = Clng(strPeriodePremie)
                oRS("GammelPeriodePremie") = strOldPeriodePremie
                oRS("NyAvdeling") = strAvdeling
                oRS("GammelAvdeling") = strOldAID
                oRS("NyGjelderFra") = ConvertToSqlDate(strGjelderFra)
                oRS("GammelGjelderFra") = ConvertToSqlDate(strOldGjelderFra)
                oRS("EndretAv") = strRegAv
                oRS("EndretDato") = now()
                oRS.Update

                strSQL = "SET DATEFORMAT ymd; UPDATE tbl" & strKundeNavn & "biler Set Aktiv='" & strAktiv &_
                                "', SlettetAv = " & strRegAv &_
                                ", SlettetDato= '" & now() &_
                                "', SiOppForsikringFra = '" & ConvertToSqlDate(strSiOppForsikringFra) &_
                                "', EndretDato = '" & now() &_
                                "' WHERE Regnr='" & strRegnr &"'"

                strSQL = "SET DATEFORMAT ymd; INSERT INTO tbl" & strKundeNavn & "LoggSlettinger (SlettetFKBID,SlettetEier,SlettetRegnr,SlettetAvdeling,SlettetAv,SlettetDato,SlettetSiOppForsikringFra) VALUES " &_
                                "(" & strBID & "," & strEier & ",'" & strRegnr & "'," & strAvdeling  & "," & strRegAv & ",'" & now() & "','" & ConvertToSqlDate(strSiOppForsikringFra) & "')"
                adoCn.Execute(strSQL)   

Noen datoer blir henter fra orS("Datofelt") og da er de motsatt igjen!

//Håper du forstår hva jeg mener.

//Morten
Avatar billede ldanielsen Nybegynder
01. juni 2004 - 14:46 #11
Hvis din bruger skriver "01.05.2003", så er det op til dig at hente de rigtige tal ud, den del har jeg ikke løst. Det handler dels om at skrive tydeligt hvilket format du vil have datoen i, og derefter at checkke om det så er en korrekt dato, og ikke fx 31/2.

Og jeg overså i øvrigt at DateSerial skal have tal, så det korrekte vil være
DateSerial(intYear, intMonth, intDay)


Men hvis du ved at formatet er dd.mm.yyyy, så kan du lave dette:

arrDato = Split(input, ".")
intYear = Cint(arrDato(2)
intMonth = Cint(arrDato(1)
intDay = Cint(arrDato(0)
dtmDato = DateSerial(intYear, intMonth, intDay)

- dtmDato vil nu være en VBScript Date variabel, i dette tilfælde 1. Maj 2003

Men som sagt, at sikre et fornuftigt input fra brugeren, det er en diskussion for sig.
Avatar billede ldanielsen Nybegynder
01. juni 2004 - 14:50 #12
Problemet er vist i dit script at du sender en tekststreng til funktionen ConvertToSqlDate. Den funktion antager så at strengen kan forstås som en dato, og bruger fx. Day(dato), hvor dato faktisk stadig er en streng. Det svarer til at bruge Cdate, hvis du forstår.
Avatar billede mortency Nybegynder
01. juni 2004 - 15:00 #13
Alle datoer som ligger i txt filen er i samme format og alltid dd.mm.yyyy

Hvordan mener du jeg skal løse dette med at alle datoen blir korrekte?

    strGjelderFra = Trim(Replace(filArr(11),".","/" ))
    strSiOppForsikringFra = Trim(Replace(filArr(13),".","/" ))

til slik:

    strGjelderFra = Split(filArr(11), ".")
    intYear = Cint(strGjelderFra(2))
    intMonth = Cint(strGjelderFra(1))
    intDay = Cint(strGjelderFra(0))
    strGjelderFra = DateSerial(intYear, intMonth, intDay)
    'strSiOppForsikringFra = Trim(Replace(filArr(13),".","/" ))
    strSiOppForsikringFra  = Split(filArr(13), ".")
    intYear = Cint(strSiOppForsikringFra a(2))
    intMonth = Cint(strSiOppForsikringFra (1))
    intDay = Cint(strSiOppForsikringFra (0))
    strSiOppForsikringFra  = DateSerial(intYear, intMonth, intDay)
Avatar billede ldanielsen Nybegynder
02. juni 2004 - 09:20 #14
Ja, det er rigtigt

strGjelderFra = DateSerial(intYear, intMonth, intDay)

- du skal lige forstå at strGjelderFra nu ikke er en tekststreng, men en VBScript Date (og du burde derfor kalde den dtmGjelderFra, for en ordens skyld).

Ang. at gemme datoerne i databasen:
Bruger du ADO kan du blot sige (på rette sted)
...
oRS("GjelderFra") = dtmGjelderFra
...
oRS.Update
...

Ang. at gemme med SQL (UPDATE eller INSERT):
Du skal lave en tekst, f. eks. yy/mm/dd, men rækkefølgen er sådan set ligegyldig, blot du med SET DATEFORMAT fortæller hvordan datoerne skal læses:

SET DATEFORMAT dmy
SET DATEFORMAT myd
SET DATEFORMAT ydm

eller dym, ymd og mdy.
Avatar billede mortency Nybegynder
02. juni 2004 - 09:30 #15
Takker for utdypende svar... Pointene er dine og scriptet mitt fungerer.
Avatar billede ldanielsen Nybegynder
02. juni 2004 - 10:10 #16
Selv tak. :o)
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

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging