Avatar billede leif7 Nybegynder
20. december 2000 - 14:58 Der er 11 kommentarer og
1 løsning

SQL Server 7.0 og Insert dato

Jeg vil gerne kunne indsætte en dato i et felt på en SQL database. Datoen kommer fra en form, og feltet er af typen smalldatetime.

1. Hvordan skal SQL stringen se ud?
2. I hvilket format skal datoen skrives i formen?
Avatar billede leif7 Nybegynder
20. december 2000 - 15:13 #1
Microsoft OLE DB Provider for ODBC Drivers error \'80040e07\'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting character string to smalldatetime data type.

/test/test.asp, line 20
Avatar billede sjensen Nybegynder
20. december 2000 - 16:36 #2
MSSQL har problemer med at acceptere de forskellige datetime formater når data er formateret som date og lign. Jeg ville derfor først flytte datoen over i en strend således at den har samme format som dato for den maskine den kører på. Både MSSQL og Windows bruger Dato-indstillingerne under \"internationale\" i kontrolpanelet.

Du kan derfor konvertere datoen fra formen til en streng ved hjælp af standard konverteringer, f.eks. for Delphi: Datostr := datetostr(formdate);

Derefter kan du opbygge SQL sætningen direkte:

\'insert into table (tabeldato) values (\'+datostr+\')\'

eller

\'update table set tabeldato = \'+datostr+\' where key = \'+keyvalue

På denne måde omsætter MSSQL selv datoen til det format den har brug for fra den streng den kommer i, og fordi du bruger standard konverteringen fra date-format til strengformat vil datoen altid have det format MSSQL forventer.

I øvrigt er der nogle indstillinger i selve MSSQL, endda i ODBC driver opsætningen, hvor du kan afgøre om MSSQL ska anvende standard windows indstillinger/formater.
Avatar billede leif7 Nybegynder
20. december 2000 - 16:38 #3
Øv er juleferien allerede begyndt? :(

Start        = DateValue(\"12-12-2000\") 
Launch      = DateValue(\"12-12-2000\")

MSQL = \"Insert Into Projects (StartDate, LaunchDate) Values (\'\" & Start & \"\',\'\" & Launch & \"\')\"

Lige så snart en af datoerne når over 12 får jeg denne fejl:

Microsoft OLE DB Provider for ODBC Drivers error \'80040e07\'

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

/test/test.asp, line 22

I don\'t get it???
Avatar billede sjensen Nybegynder
20. december 2000 - 16:44 #4
Check lige datoformatet på maskinen (kontrolpanel, internationale). Jeg gætter på at den er sat til engelsk hvor måneder kommer før dag, altså: mm-dd-yyyy eller lign.

Ved at rette dette til dansk (dd-mm-yyyy) vil det virke.
Avatar billede leif7 Nybegynder
20. december 2000 - 17:04 #5
Dette virker ikke:

Start      = DateValue(\"13-12-2000\") 
Launch      = DateValue(\"12-12-2000\")

og dette virker ikke:

Start        = DateValue(\"12-13-2000\") 
Launch      = DateValue(\"12-12-2000\")

men dette virker???

Start        = DateValue(\"12-12-2000\") 
Launch      = DateValue(\"12-12-2000\")

Vi har en IIS40 der kører dansk instillinger, en SQL 7,0 med amerikansk opsætning, og diverse computere med forskellige opsætninger der kobler op med deres web browser. Disse opsætninger kan ikke ændres der så vil være andre programmer der ikke virker. :(

Hved du hvordan jeg kan konvertete i v.h.a ASP/VB?


Avatar billede sjensen Nybegynder
20. december 2000 - 17:13 #6
jeg er ikke sikker men jeg mener det hedder CDate(). Dette skulle konvertere fra en date til en streng.

Men prøv engang at skrive følgende og test om du kan få datoerne ind i MSSQL:

MSQL = \"Insert Into Projects (StartDate, LaunchDate) Values (\'13-12-2000\',\'24-12-2000\')\"

NB! Jeg er ikke helt sikker på om datoerne (som jo er en streng i mit eks.) skal omkarnses af enkelt eller dobbeltanførselstegn. Jeg har vise det med enkelt anførselstegn

Avatar billede leif7 Nybegynder
20. december 2000 - 17:14 #7
forsøger imorgen - foreløbigt tusind tak!
Avatar billede sjensen Nybegynder
20. december 2000 - 17:19 #8
ok, og hvis det ikke virker så prøv at ændre datoerne til hhv. 12-13-2000 og 12-24-2000 og se om det løser dt.

Hvis det virker, uanset hvilken vej datoen er vendt, så ved du at MSSQl kan acceptere datoerne i strengformat selvom felterne i DB\'en egentligt er smalldatetime eller datetime felter og så er det bare at sørge for at konvertere datoer til strenge eller tage dem direkte fra formen som strenge.
Avatar billede tandpine Nybegynder
20. december 2000 - 18:09 #9
jeg mener faktisk at du skal skrive # foran og efter datoen :)
Avatar billede ricardo Nybegynder
21. december 2000 - 10:36 #10
Forkert! \"#\" er noget crap Access har fundet på.

Plinger =>> \'\' <<= er den korrekt delimiter.

Man skal bruge

SetLocale(1033) og bruge Cdate([...her er din dato...]) for at konvertere til den LCID som din SQL server bruger - sikkert 1033.

CAST kan også bruges i T-SQL:

MSQL = \"Insert Into Projects (StartDate, LaunchDate) Values ((cast \'13-12-2000\' as smalldatetime),(cast \'24-12-2000\' as smalldatetime))\"

Avatar billede leif7 Nybegynder
21. december 2000 - 10:36 #11
jubii!!! Så blev det alligevel jul!

session.lcid = 1033  => at Cdate laver datoen i det rigtige format, nemlig \'12-24-2000\'

Så det bliver:
session.lcid = 1033
MSQL = \"Insert Into Projects (StartDate, LaunchDate) Values (\'\" &CDate(Request(\"StartDate\"))& \"\',\'\" &CDate(Request(\"Launchdate\"))& \"\')\"

Og det virker!
Takker for hjælpen sjensen
Tandpine-># det er vidst kun i access databaser :)
Avatar billede leif7 Nybegynder
21. december 2000 - 10:42 #12
Okay ricardo der tror jeg lige vi ramte knappen på samme tid :)

Men det ser jo ud som vi er nået frem til næsten det samme?




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