Avatar billede pelskee Nybegynder
18. marts 2005 - 09:39 Der er 16 kommentarer og
1 løsning

Sammenligning af dato

hvordan skal jeg smide dato og tid i min mssql database så jeg er sikker på senere at kunne sammenligne dem.
Avatar billede ldanielsen Nybegynder
18. marts 2005 - 15:07 #1
Du skal have et felt i tabellen med datatypen datetime eller smalldatetime. Så fungerer det
Avatar billede pelskee Nybegynder
21. marts 2005 - 10:50 #2
okay. hvordan skal koden jeg ligger i databasen se ud ?

<%=Date()%> ?
<%=Time()%> ?
Avatar billede ldanielsen Nybegynder
21. marts 2005 - 15:06 #3
Du tænker på at opdatere eller indsætte datoer i databasen, ikke?

Det er lidt tricky, for du har to muligheder (mindst)

UPDATE tabel set dtmDato = '01-02-2005' WHERE felt = 34

Det kræver at du formaterer datoen som en tekststreng, der har et format som databasen forstår. Hvis jeg kører ovenstående på min server bliver datoen sat til 2. januar, og det var jo ikke meningen.

Derfor kan du bruge set dateformat, sådan (klar til ASP):

strSQL = "SET DATEFORMAT DMY; UPDATE tabel set dtmDato = '01-02-2005' WHERE felt = 34"

SET DATEFORMAT DMY fortæller at du har tænkt dig at nævne dato, måned, år (Date Month Year) i den rækkefølge.

Den anden mulighed er at bruge ADO, og så lave datoen klar i VBScript

Dim dtmVbDato
dtmVbDato = DateSerial("2005", "1", "2")
Rec("dtmDato") = dtmVbDato
Rec.Update

- hvis du forstår?

Denne metode kan bruges direkte med Date() eller Now():
Rec("dtmDato") = Date()

Time() indeholder ikke oplysninger om datoen, den vil så blive sat til 1/1 1900
Avatar billede pelskee Nybegynder
21. marts 2005 - 15:37 #4
jeg er ikke så god til det så du må undskylde at jeg skal have skåret det ud i pap :) - jeg afsætter 15 point mere så du får 30
jeg tænker på hvis jeg skal indsætte noget i mit smalldatetime eller mit datetime felt - hvordan skal min asp kode så se ud.
jeg laver eks et inputfelt som viser brugeren hvordan formatet skal se ud:
<input name="datatime" type="text" value="<%=Date()%>">

hvis jeg eksempelvis senere skal kunne sortere et udtræk på DateTime DESC hvordan skal asp koden oppe i feltet som jeg ligger i databasen så se ud ?
Avatar billede ldanielsen Nybegynder
21. marts 2005 - 17:30 #5
Først må du lige vise mig et eksempel på hvordan du plejer at gemme data i databasen, så kan jeg lettere skrive noget kode som du kan finde ud af.

Og så lyder det som om du tænker at det er ASP-kode der skal gemmes i databasen. Det er det ikke. Der skal gemmes tekst i tekstfelter, tal i talfelter og datoer i datofelter.

Datofelter er ret specielle, men du kan godt betragte dem som en slags tekstfelter, blot kan du kun gemme i feltet hvis det du prøver at sætte ind er en gyldig dato. Prøver du at sætte 31. feb 2004 ind i et datofelt, så giver det en fejl.
Avatar billede pelskee Nybegynder
22. marts 2005 - 09:12 #6
okay. tak. normalt ser min kode bare sådan ud, men så ligger jeg det i et felt med datatypen text eller memo og det er vist ikke nogen god ide.

<input name="Date" type="text" id="Date" value="<%=date()%>">
Avatar billede ldanielsen Nybegynder
28. marts 2005 - 15:40 #7
Dette har ikke noget med databaser at gøre. Det du viser mig her er den måde du laver et indtastningsfelt.

Jeg vil gerne se det der sker når brugeren sender det indtastede ind, dvs. den fil der står som action i formen.
Avatar billede pelskee Nybegynder
29. marts 2005 - 11:40 #8
jeg ville bare ligge værdien fra input feltet direkte i databasen uden at omformattere det eller lign
Avatar billede ldanielsen Nybegynder
29. marts 2005 - 14:48 #9
Ja, og hvordan vil du gøre det? Jeg går udfra at du allerede har fundet ud af at gemme i databasen, hvordan gør du det med et tekstfelt?

Er det her helt sort? Har du overhovedet gemt noget som helst i databasen? Er der noget kode du ikke vil vise mig?

Dette er mit bud på hvordan det kan gøres, men der en MASSE ting der skal på ploads for at det bliver sikkert. Ser dette bekendt ud?:


option explicit
Dim Con, Com, Rec, ID

ID = 33 ' eller hvad det nu skal være

call openCon

Com.CommandText = "SELECT dtmDato FROM tabelNavn WHERE ID = " & ID
Rec.Open Com, , 3, 3

if not Rec.BOF then
    Rec("dtmDato") = Cdate(Request.Form("dtmDato"))
    Rec.Update
end if
   
Rec.Close
call closeCon

Sub openCon
    Set Con = Server.CreateObject("ADODB.Connection")
    Con.Open = "<din connectionstring>"
    Set Com = Server.CreateObject("ADODB.Command")
    Com.ActiveConnection = objCon.Con
    Set Rec = Server.CreateObject("ADODB.RecordSet")
end sub

Sub closeCon
    Set Rec = Nothing
    Set Com = Nothing
    Con.Close
    Set Con = Nothing
end sub
Avatar billede pelskee Nybegynder
30. marts 2005 - 10:37 #10
her indsætter jeg 3 felter i databasen: (men igen med dato)
<%
' *** Edit Operations: declare variables

Dim MM_editAction
Dim MM_abortEdit
Dim MM_editQuery
Dim MM_editCmd

Dim MM_editConnection
Dim MM_editTable
Dim MM_editRedirectUrl
Dim MM_editColumn
Dim MM_recordId

Dim MM_fieldsStr
Dim MM_columnsStr
Dim MM_fields
Dim MM_columns
Dim MM_typeArray
Dim MM_formVal
Dim MM_delim
Dim MM_altVal
Dim MM_emptyVal
Dim MM_i

MM_editAction = CStr(Request.ServerVariables("SCRIPT_NAME"))
If (Request.QueryString <> "") Then
  MM_editAction = MM_editAction & "?" & Server.HTMLEncode(Request.QueryString)
End If

' boolean to abort record edit
MM_abortEdit = false

' query string to execute
MM_editQuery = ""
%>
<%
' *** Insert Record: set variables

If (CStr(Request("MM_insert")) = "form1") Then

  MM_editConnection = MM_claims_conn_STRING
  MM_editTable = "dbo.tblAccount"
  MM_editRedirectUrl = "account_overview.asp"
  MM_fieldsStr  = "number|value|active|value|description|value"
  MM_columnsStr = "Number|none,none,NULL|Active|none,'Y','N'|Description|',none,''"

  ' create the MM_fields and MM_columns arrays
  MM_fields = Split(MM_fieldsStr, "|")
  MM_columns = Split(MM_columnsStr, "|")
 
  ' set the form values
  For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
    MM_fields(MM_i+1) = CStr(Request.Form(MM_fields(MM_i)))
  Next

  ' append the query string to the redirect URL
  If (MM_editRedirectUrl <> "" And Request.QueryString <> "") Then
    If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0 And Request.QueryString <> "") Then
      MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString
    Else
      MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString
    End If
  End If

End If
%>
<%
' *** Insert Record: construct a sql insert statement and execute it

Dim MM_tableValues
Dim MM_dbValues

If (CStr(Request("MM_insert")) <> "") Then

  ' create the sql insert statement
  MM_tableValues = ""
  MM_dbValues = ""
  For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
    MM_formVal = MM_fields(MM_i+1)
    MM_typeArray = Split(MM_columns(MM_i+1),",")
    MM_delim = MM_typeArray(0)
    If (MM_delim = "none") Then MM_delim = ""
    MM_altVal = MM_typeArray(1)
    If (MM_altVal = "none") Then MM_altVal = ""
    MM_emptyVal = MM_typeArray(2)
    If (MM_emptyVal = "none") Then MM_emptyVal = ""
    If (MM_formVal = "") Then
      MM_formVal = MM_emptyVal
    Else
      If (MM_altVal <> "") Then
        MM_formVal = MM_altVal
      ElseIf (MM_delim = "'") Then  ' escape quotes
        MM_formVal = "'" & Replace(MM_formVal,"'","''") & "'"
      Else
        MM_formVal = MM_delim + MM_formVal + MM_delim
      End If
    End If
    If (MM_i <> LBound(MM_fields)) Then
      MM_tableValues = MM_tableValues & ","
      MM_dbValues = MM_dbValues & ","
    End If
    MM_tableValues = MM_tableValues & MM_columns(MM_i)
    MM_dbValues = MM_dbValues & MM_formVal
  Next
  MM_editQuery = "insert into " & MM_editTable & " (" & MM_tableValues & ") values (" & MM_dbValues & ")"

  If (Not MM_abortEdit) Then
    ' execute the insert
    Set MM_editCmd = Server.CreateObject("ADODB.Command")
    MM_editCmd.ActiveConnection = MM_editConnection
    MM_editCmd.CommandText = MM_editQuery
    MM_editCmd.Execute
    MM_editCmd.ActiveConnection.Close

    If (MM_editRedirectUrl <> "") Then
      Response.Redirect(MM_editRedirectUrl)
    End If
  End If

End If
%>
Avatar billede ldanielsen Nybegynder
30. marts 2005 - 15:34 #11
Ok, jeg tillader mig at gætte på at du bruger et eller andet program, Dreamweaver eller lignende, til at hjælpe dig. Det betyder sandsynligvis at du ikke har forstand på ASP/Databaser, at du ikke selv har skrevet scriptet herover, og at du heller ikke forstår ret meget af hvad der foregår i det.

Jeg må råde dig til at lære ASP for alvor. Jeg kan ikke hjælpe dig, for ovenstående er overdrevet kompliceret, og hvis vi begynder at pille i det bliver det bare HELT uoverskueligt.

Er der ikke en kategori med folk der arbejder på samme måde som dig, de kan måske hlælpe? Måske er der specielle metoder til at arbejde med datoer, indbygget i dit program.
Avatar billede pelskee Nybegynder
30. marts 2005 - 15:43 #12
nej jeg er desværre ikke den store programmør.

kan du ikke vise mig et eksempel på det datoformat som mssql accepterer så kan jeg selv lege videre med det derfra ?

eks: dd-mm-yyyy ?
Avatar billede pelskee Nybegynder
01. april 2005 - 12:17 #13
MS SQL æder formatet: <%=Now()%> til felter med datatype 'smalldatetime' som bliver formatteret som: 04-01-2005 11:56:00

hvis det betyder at jeg kan sammenligne og sige eksempelvis større eller mindre end datoen så er det jo fint. så skal jeg bare formattere den så den ser rigtig ud når jeg viser den til brugeren
Avatar billede pelskee Nybegynder
01. april 2005 - 12:26 #14
burde jeg så ikke kunne lave et udtræk som kun viser alt fra dags dato

SELECT * FROM Correspondence WHERE Date = "Today ?"

jeg ved bare ikke hvordan jeg skal skrive Today ...
Avatar billede ldanielsen Nybegynder
01. april 2005 - 15:07 #15
SELECT * FROM Correspondence WHERE DATEDIFF(dd, Date, GETDATE()) = 0
Avatar billede pelskee Nybegynder
12. oktober 2005 - 01:52 #16
du skal have point.
tak forhjælpen og undskyld den sene tilbagemelding!
Avatar billede ldanielsen Nybegynder
12. oktober 2005 - 16:13 #17
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

IT-JOB

IT-Universitetet i København

IT-partner til IT-Universitetet i København

Forsvarsministeriets Materiel- og Indkøbsstyrelse

SAP Bruger- og rolleadministrator ved Forsvarsministeriets Regnskabsstyrelse

Politiets Efterretningstjeneste

API-udvikler til PET

Rambøll Management Consulting

Senior Software Engineer