24. maj 2007 - 22:22Der er
29 kommentarer og 2 løsninger
Giv db-felt Null-værdi
Hej
Hastesag!
Måske et dumt spørgsmål...
Jeg har en formular hvor der blandt andet er en textbox til dato.
Det skal ikke være nødvendigt at udfylde den textbox - altså ingen validering på det felt.
Men hvis der så ikke indtastes noget og man lægger det i databasen, laver den fejl.
Jeg tænkte derfor på at lave nogle if-sætninger.. altså hvis der ikke står noget i den textbox, skal det være Null. Ellers skal den bare smide den dato ind som står i feltet.
Hvordan gør jeg?
Håber i forstår. Og spørg endelig hvis i ikke fatter det.
Hehe - jeg har haft kæmpe slåskamp om samme emne med MS SQL siden jeg flyttede fra den meget mere tolerante access. Jeg ved ikke hvordan folk plejer at gøre, men på nette fandt jeg et forslag til i stedet for null at bruge den mindste dato som systeet vil anerkende og betragte den som null værdi.
Eftersom jeg selv bruger smalldatetime, så bruger jeg denne her til det formål: Dim sqlFix As New DateTime(1900, 1, 2) - hvis jeg har null i min textbox så får databasen denne værdi at spise, og omvendt, hvis jeg får den tilbage fra DB'en så lader jeg min textbox stå tom.
Kan være der er en mere elegant løsning, men dette her virker. Og DateTime har meget større range end smalldatetime, men det kunne tæneks datoer fra før 1900 ikke har den store interesse :) så kunne du bare bruge denne.
"min" theDate er en string, men den "sættes ind" i din inline sql, hvis du bruger storedprocedures kan du lave din "@datovariabel = NULL" (parametre), hvis den ikke bliver sat bliver det NULL
sidste spørgsmål: Hvis man opretter en record i db'en - hvad skal man så fortælle den den skal have af default for datetime ? fordi den DBNULL den får nu får den til at gå amok.
jaja - det kan du sagtens sige til een som har brugt 48 timer på at at tilpasse en access db til allede "smarte features" i MS SQL :)
Men som sagt - hvis du opretter en record i DBén - hvad bruger du så som default ? Frodi da jeg prøvede med dens eget forslag - DBNULL - så brokkede den sig.
Og sorry radiohead, at jeg har kidnappet din tråd lidt:) - A1 skal ha points, not me:)
ps.: hvis du ikke skulle vide det kan du få (og bruge) ms sql server express gratis, dog et max på 4gb pr database (og en cpu(multicore skulle tælle for en), kan max bruge 1 gb ram)
ps: brug altid amerikansk (iso sql) datoformat (åååå-mm-dd) så virker det altid, ligegyldigt hvilken server du ligger det på...(år-måned-dato)
Har selv brugt denne funktion mange gange:
Function DateToDB(ByVal sdate) Dim sout sout = "NULL" If Not isNull(sdate) Then If isDate(sdate) Then sout = "'" & Year(sdate) & "-" & Month(sdate) & "-" & Day(sdate) & " " If Hour(sdate) > 0 Or Minute(sdate) > 0 Then sout = sout & " " & Hour(sdate) & ":" & Minute(sdate) & ":00" End If sout = sout & "'" End If End If DateToDB = sout End Function
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.