webForumDet fria alternativet

Spara tomt till databas

ASPur ASP

13 svar · 333 visningar · startad av Meng

Medlem sedan feb. 2003549 inlägg
Frågan#1

Hej jag har denna koden för att spara mitt formulär:

If Request.Querystring("action")= "spara" Then

y = Request.Form("ar") 
m = Request.Form("man") 
d = Request.Form("dag") 
 
If y = "" Or m = "" Or d = "" Then 
 dato = null 
Else 
 dato = DateSerial(y, m, d) 
End If

a = Request.Form("udar") 
n = Request.Form("udman") 
m = Request.Form("uddag") 
 
If a = "" Or n = "" Or m = "" Then 
 udgaet = null 
Else 
 udgaet = DateSerial(a, n, m) 
End If

   Navn          = Fixa(Request.Form("navn"))
   Dato          = dato
   Udgaet        = udgaet
   Betegnelse    = Fixa(Request.Form("betegnelse"))
   Afd           = Fixa(Request.Form("afd"))
   Kh            = Fixa(Request.Form("kh"))
   Af            = Request.Form("af")
   Rev           = Request.Form("rev")

   Conn.Execute("INSERT INTO dok(Navn,Dato,Udgaet,Betegnelse,Afd,Kh,Af,Rev) VALUES('" & Navn & "','" & Dato & "','" & Udgaet & "','" & Betegnelse & "','" & Afd & "','" & Len(Kh) & "','" & Af & "','" & Rev & "')")
   Response.Redirect "admin.asp?do=inne"
End If

när dato och udgaet är toma, alltså utan input så kan jag inte spara formuläret utan får fel:
**Microsoft JET Database Engine error '80040e07'

Data type mismatch in criteria expression.

/teknisk/admin.asp, line 418**

Linje 418:

   Conn.Execute("INSERT INTO dok(Navn,Dato,Udgaet,Betegnelse,Afd,Kh,Af,Rev) VALUES('" & Navn & "','" & Dato & "','" & Udgaet & "','" & Betegnelse & "','" & Afd & "','" & Len(Kh) & "','" & Af & "','" & Rev & "')")

Hur ska jag göra så jag fortfarande kan spara formuläret fast det endast är Navn som har någon input?

Medlem sedan nov. 20017 144 inlägg
#2

Du måste tillåta nullvärden i dina databaskolumner "dato" och "udgaet".
Ta bort fnuttar runt dessa värden i sql:en och testa min nygjorda funktion.

Function MakeNull(ByVal str)
	if not isdate(str) then str="null" else str="'"& str &"'"
	MakeNull=str
End function
Medlem sedan feb. 2003549 inlägg
#3

Förlåt men hur skal jag använda denna funktionen och var? eller räker det med att den ligger på sidan?! man måste väl kalla den? Databasen är inställd från början på att tillåta null värden i dessa fälten.

Vad menar du med fnuttar? :)

Medlem sedan feb. 2003549 inlägg
#4

De två fälten stå på designvisnings läget i databasen till att vara "Dato og klokkes" på danska, vet inte vad det heter på svenska men det är väl något i stil med datum och klockslag.. ska jag kanske ta bort detta och göra dem till vanliga text fält också? för jag använder ju bara 2004-12-01 och det skriver användaren själv in via select boxar..

Medlem sedan nov. 20017 144 inlägg
#5

Jag menar typ så här:

If Request.Querystring("action")= "spara" Then

y = Request.Form("ar") 
m = Request.Form("man") 
d = Request.Form("dag") 
 
dato = y &"-"& m &"-"& d 

a = Request.Form("udar") 
n = Request.Form("udman") 
m = Request.Form("uddag") 
 
udgaet = a &"-"& n &"-"& m 

Function MakeNull(ByVal str)
	if not isdate(str) then str="null" else str="'"& str &"'"
	MakeNull=str
End function

Navn          = Fixa(Request.Form("navn"))
Betegnelse    = Fixa(Request.Form("betegnelse"))
Afd           = Fixa(Request.Form("afd"))
Kh            = Fixa(Request.Form("kh"))
Af            = Request.Form("af")
Rev           = Request.Form("rev")

Conn.Execute("INSERT INTO dok(Navn,Dato,Udgaet,Betegnelse,Afd,Kh,Af,Rev) VALUES('" & Navn & "'," & MakeNull(Dato) & "," & MakeNull(Udgaet) & ",'" & Betegnelse & "','" & Afd & "','" & Len(Kh) & "','" & Af & "','" & Rev & "')")
   Response.Redirect "admin.asp?do=inne"
End If

Vanligtvis så har du ju enkelfnuttar runt datum (om du inte har access 97) och nu får du in dem med funktionen i stället.

Medlem sedan feb. 2003549 inlägg
#6

Den funkade utmärkt! verkligen =)

men när jag sparar med datum på båda alltså dato och udgaet så kommer inte dato med utan bara udgaet.. kanske ska göra en funktion till varje?

Sen provade jag hade göra om den man ändrar med också och det gick inte lika bra

If Request.Querystring("action") = "andrat" Then

y = Request.Form("ar") 
m = Request.Form("man") 
d = Request.Form("dag") 
 
dato = y &"-"& m &"-"& d 

a = Request.Form("udar") 
n = Request.Form("udman") 
m = Request.Form("uddag") 
 
udgaet = a &"-"& n &"-"& m 
 
Function MakeNull(ByVal str)
	if not isdate(str) then str="null" else str="'"& str &"'"
	MakeNull=str
End function

   Navn          = Fixa(Request.Form("navn"))
   Betegnelse    = Fixa(Request.Form("betegnelse"))
   Afd           = Fixa(Request.Form("afd"))
   Kh            = Fixa(Request.Form("kh"))
   Af            = Fixa(Request.Form("af"))
   Rev           = Fixa(Request.Form("rev"))

<!-- [blue]linje 444[/blue] -->  Conn.execute("Update dok Set Navn='" & Navn & "', Dato='" & MakeNull(Dato) & "', Udgaet='" & MakeNull(Udgaet) & "', Betegnelse='" & Betegnelse & "', Afd='" & Afd & "', Kh='" & Len(Kh) & "',Af='" & Af & "', Rev='" & Rev & "'  Where id = "& Request.Querystring("id"))
   Response.Redirect "admin.asp?do=inne"
End If

Den kommer med fel:
Microsoft JET Database Engine error '80040e14'

Syntax error (missing operator) in query expression '''2000-1-13'''.

/teknisk/admin.asp, line 444

Medlem sedan nov. 20017 144 inlägg
#7

Misstänker att det är ettan(som borde vara "01") plus att du deklarerar variabeln "m" två gånger med olika saker.

z = Request.Form("uddag")
dato = y &"-"& right("0"& m, 2) &"-"& right("0"& d, 2) 

udgaet = a &"-"& right("0"& n, 2) &"-"& right("0"& z, 2)
Medlem sedan feb. 2003549 inlägg
#8

Det funkade utmärkt på "spara". Alltså göra en ny post. Men så fort jag ska ändra i en post t ex nu porvade jag att göra en post med endast udgaet datum, utan dato datum. och gick sen in för att ändra och skriva in ett datum så kom den med fel:

Microsoft JET Database Engine error '80040e14' 

Syntax error (missing operator) in query expression '''2002-03-24'''. 

/teknisk/admin.asp, line 450

Just nu har jag kod på både ändra och spara:

If Request.Querystring("action")= "spara" Then

y = Request.Form("ar") 
m = Request.Form("man") 
d = Request.Form("dag") 
a = Request.Form("udar") 
n = Request.Form("udman") 
Z = Request.Form("uddag") 
 
dato = y &"-"& right("0"& m, 2) &"-"& right("0"& d, 2) 

udgaet = a &"-"& right("0"& n, 2) &"-"& right("0"& z, 2)

Function MakeNull(ByVal str)
	if not isdate(str) then str="null" else str="'"& str &"'"
	MakeNull=str
End function

Function MakeBull(ByVal str)
	if not isdate(str) then str="null" else str="'"& str &"'"
	MakeBull=str
End function

Navn          = Fixa(Request.Form("navn"))
Betegnelse    = Fixa(Request.Form("betegnelse"))
Afd           = Fixa(Request.Form("afd"))
Kh            = Fixa(Request.Form("kh"))
Af            = Request.Form("af")
Rev           = Request.Form("rev")

Conn.Execute("INSERT INTO dok(Navn,Dato,Udgaet,Betegnelse,Afd,Kh,Af,Rev) VALUES('" & Navn & "'," & MakeNull(Dato) & "," & MakeBull(Udgaet) & ",'" & Betegnelse & "','" & Afd & "','" & Len(Kh) & "','" & Af & "','" & Rev & "')")
   Response.Redirect "admin.asp?do=inne"
End If
If Request.Querystring("action") = "andrat" Then

y = Request.Form("ar") 
m = Request.Form("man") 
d = Request.Form("dag") 
a = Request.Form("udar") 
n = Request.Form("udman") 
z = Request.Form("uddag")

dato = y &"-"& right("0"& m, 2) &"-"& right("0"& d, 2) 

udgaet = a &"-"& right("0"& n, 2) &"-"& right("0"& z, 2)
 
Function MakeNull(ByVal str)
	if not isdate(str) then str="null" else str="'"& str &"'"
	MakeNull=str
End function

Function MakeBull(ByVal str)
	if not isdate(str) then str="null" else str="'"& str &"'"
	MakeBull=str
End function

   Navn          = Fixa(Request.Form("navn"))
   Betegnelse    = Fixa(Request.Form("betegnelse"))
   Afd           = Fixa(Request.Form("afd"))
   Kh            = Fixa(Request.Form("kh"))
   Af            = Fixa(Request.Form("af"))
   Rev           = Fixa(Request.Form("rev"))

   Conn.execute("Update dok Set Navn='" & Navn & "', Dato='" & MakeNull(Dato) & "', Udgaet='" & MakeBull(Udgaet) & "', Betegnelse='" & Betegnelse & "', Afd='" & Afd & "', Kh='" & Len(Kh) & "',Af='" & Af & "', Rev='" & Rev & "'  Where id = "& Request.Querystring("id"))
   Response.Redirect "admin.asp?do=inne"
Medlem sedan nov. 20017 144 inlägg
#9

1. du behöver inte ha två olika funktioner för samma sak. (det är det som är tanken med en funktion... ;))
2. du måste ta bort enkelfnuttarna där du har fun funktionen.
Dato="& MakeNull(Dato) &" och Udgaet=" & MakeNull(Dato) &"
3. lägg funktionen före dina ifsatser så behöver du inte ta in dem flera gånger.

Medlem sedan nov. 20017 144 inlägg
#10

Testa detta:

y = Request.Form("ar") 
m = Request.Form("man") 
d = Request.Form("dag") 
a = Request.Form("udar") 
n = Request.Form("udman") 
Z = Request.Form("uddag") 
 
dato = y &"-"& right("0"& m, 2) &"-"& right("0"& d, 2) 

udgaet = a &"-"& right("0"& n, 2) &"-"& right("0"& z, 2)

Function MakeNull(ByVal str)
	if not isdate(str) then str="null" else str="'"& str &"'"
	MakeNull=str
End function

Navn          = Fixa(Request.Form("navn"))
Betegnelse    = Fixa(Request.Form("betegnelse"))
Afd           = Fixa(Request.Form("afd"))
Kh            = Fixa(Request.Form("kh"))
Af            = Request.Form("af")
Rev           = Request.Form("rev")

If Request.Querystring("action")= "spara" Then

	Conn.Execute("INSERT INTO dok(Navn,Dato,Udgaet,Betegnelse,Afd,Kh,Af,Rev) VALUES('" & Navn & "',"& MakeNull(Dato) &","& MakeNull(Udgaet) &",'"& Betegnelse &"','" & Afd & "','" & Len(Kh) & "','" & Af & "','" & Rev & "')"),,128
   	
elseIf Request.Querystring("action") = "andrat" Then

   	Conn.execute("Update dok Set Navn='" & Navn & "', Dato=" & MakeNull(Dato) & ", Udgaet=" & MakeNull(Udgaet) & ", Betegnelse='" & Betegnelse & "', Afd='" & Afd & "', Kh='" & Len(Kh) & "',Af='" & Af & "', Rev='" & Rev & "'  Where id = "& Request.Querystring("id")),,128
 
end if

Response.Redirect "admin.asp?do=inne"
Medlem sedan feb. 2003549 inlägg
#11

HAHA Vackert! nu funkar det utmärkt på både spara och ändra :birp

Kunde dock inte använda koden när den var sammanfogad både spara o ändra till en eftersom sidan är byggd så den bara öppnar en if sats i taget. men det gör inget för resten av siten är byggd på samma vis så då blir jag ju inte förvirrad nästa gång jag kommer över denna koden =)

En annan fråga.. jag har en sortering på sidan som jag gärna vill att man ska kunna komma tillbaka til om man t ex tar bort en post eller ändrar en. Den ser ut så här t ex:

http://intranet/teknisk/admin.asp?do=inne&sortby=betegnelse&form=DESC

hur hämtar jag detta när jag kör Response.Redirect? får inte rätt på det nämligen. så jag försökt men som inte funkar eftersom det är fel sätt att skriva det på är så här:

   Response.Redirect "admin.asp?do=inne&sortby=(Request.Querystring("sortby"))&form=(Request.Querystring("form"))"

Föresten vad betyder ",,128" och vad ska det vara bra för?

Annars tack så jätte mycket för hjälpen Jesper

Medlem sedan nov. 20017 144 inlägg
#12

1.

Response.Redirect "admin.asp?do=inne&sortby="& Request.Querystring("sortby") &"&form="& Request.Querystring("form")

2. ,,128 betyder att inget skall returneras. Alltså används i Insert, update och delete. Dock ej i select.

Medlem sedan feb. 2003549 inlägg
#13

Så du menar att jag alltid borde använda ,,128? det laddar långsammare annars?

Medlem sedan maj 200010 687 inlägg
#14

Marginellt. Inget som du kommer märka av.
Dock lite snyggare eftersom att det är korkat att något returneras om man inte hämtar något.

140 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)