Avatar billede runberg Nybegynder
26. juni 2010 - 20:59 Der er 11 kommentarer

ASP: String til MSSQL datetime format

Hej alle

I en tabel i en MS SQL database kan jeg hente følgende:

Overskrift
Inhold
Dato

Datoen skrives eksempelvis således: "26-06-2010 20:37:46"

Herefter skal det så være muligt at lave ændring af ovenstående data, hvorefter rækken i tabellen skal opdateres. Selvom jeg ikke ændrer formatet på datoen får jeg dog her en fejl:


Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[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.


Datoen er i tabellen gemt i formatet "datetime". Dette gør det nemt automatisk at få indsat dato og tid, når der oprettes nye inlæg, men giver altså udfordringer når jeg vil opdatere.

Jeg har prøvet at sikre mig at datoen der opdateres er gemt som en dato ved hjælp af CDATE, men dette hjælper heller ikke?

Hvordan sikrer jeg at man kan opdatere dato og tidspunkt?

Håber det hele giver mening! - På forhånd tak!
Avatar billede arne_v Ekspert
26. juni 2010 - 21:23 #1
Brug parameters !
Avatar billede arne_v Ekspert
26. juni 2010 - 21:24 #2
Avatar billede erikjacobsen Ekspert
26. juni 2010 - 21:28 #3
Ikke fordi jeg er uenig med Arne, men man plejer også at kunne indsætte datoer hvis de tekstuelt er på formen:  "2010-06-26 20:37:46"
Avatar billede runberg Nybegynder
26. juni 2010 - 22:25 #4
arne_v >> Jeg er nok nød til at trække endnu en livline her. Hvordan er det du foreslår at jeg skal benytte prameters?

erikjacobsen >> Du har ret - Hvis jeg blot sikrer at formen er som du beskriver, fungerer det. Bare underligt, når jeg trækker datoen ud i et andet format.

Altså output format fra SQL: 26-06-2010 20:37:46
Input format til SQL: 2010-06-26 20:37:46

Gør det lidt mere besværligt at jeg skal skifte sådan frem og tilbage, og ikke "blot" kan smide output i et felt der kan redigeres, og så opdatere med hvad der måtte stå i feltet efterfølgende (forudsat at formatet overholdes)
Avatar billede arne_v Ekspert
26. juni 2010 - 22:36 #5
Andet eksempel fra lageret:

<%
' open
adParamInput = 1
adInteger = 3
adDate = 7
Set con = Server.CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Databases\MSAccess\Test.mdb;;"
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = con
' lige ud af landevejen
con.Execute "INSERT INTO params(id,tid) VALUES(1,'7-JUN-2005')"
' med kommando
cmd.CommandText = "INSERT INTO params(id,tid) VALUES(2,'8-JUN-2005')"
cmd.Execute
' med kommando og parametre
cmd.CommandText = "INSERT INTO params(id,tid) VALUES(@id,@tid)"
cmd.Parameters.Append(cmd.CreateParameter("@id", adInteger, adParamInput))
cmd.Parameters.Append(cmd.CreateParameter("@tid", adDate, adParamInput))
cmd.Parameters("@id") = 3
cmd.Parameters("@tid") = CDate("9-JUN-2005")
cmd.Execute
' close
Set cmd = Nothing
Set con = Nothing
%>
OK
Avatar billede arne_v Ekspert
26. juni 2010 - 22:36 #6
Man kan godt få det til at virke med lietal strings.

Men man bliver skør af at skulle håndtere forskellige dato formater.
Avatar billede runberg Nybegynder
26. juni 2010 - 22:52 #7
Hmm .. Må kigge på det der parameters i morgen - Er blevet for sent, og synes jeg kigger mig blind på det lige nu :)

Hvis der skulle være end der har lyst til at komme med et hurtigt bud, er min nuværende kode her:


'HENT DATA
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={SQL Server};" & _
"Server=XXXXXX;" & _
"Database=XXXXXX;" & _
"Uid=XXX;" & _
"Pwd=XXX;"

strOriginal = "SELECT * FROM XXX"
Set rsOriginal = Conn.Execute(strOriginal)

'DATA PRINTES SÅ UD I NOGLE TEKSTFELTER & ID FRA TABELLEN GEMMES - DENNE DEL HAR JEG IKKE TAGET MED I EKSEMPLET

strOverskrift = Request.Form("OverskriftField")
strInhold = Request.Form("IndholdField")
strDato = CDATE(Reqeust.Form("DatoField")

strSQLUpdate = "UPDATE Tabel SET Dato = '" &  strDato & ', Indhold = '" & strIndhold & "', Overskrift = '" & strOverskrift & "' WHERE ID = strID"

Conn.Execute(strSQLUpdate)

- Måske det giver bedre mening nu?
Avatar billede erikjacobsen Ekspert
27. juni 2010 - 00:11 #8
"Bare underligt, når jeg trækker datoen ud i et andet format." - jah, joh, det er bare MS der ikke har tænkt sig om. Det har vi vænnet os til.

Du kan trække et helt fast format ud fra databasen ved at bruge T-SQL funktionerne YEAR, MONTH, DAY osv. Dermed fjerner man muligheden for fejlfortolkninger.
Avatar billede runberg Nybegynder
30. juni 2010 - 18:42 #9
Fik det til at virke - erikjacobsen, smit et svar og pointene er dine ....
Avatar billede arne_v Ekspert
25. juli 2010 - 22:50 #10
Erik plejer ikke at samle.
Avatar billede erikjacobsen Ekspert
25. juli 2010 - 23:01 #11
Nej tak, jeg samler ikke på point.
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