webForumDet fria alternativet

Får man inte skicka en tom sträng till ett datumfält i access 2002?

Databaser & SQL

13 svar · 276 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Frågan#1

När variabeln fix_date är tom så fungerar inte frågan. Kan jag ställa in databasen (access 2002) så att den accepterar att fältet är tomt? Får man inte skicka med en tom variabel till ett fält som är i datumformat?
Obs! Fältet är inte satt som recuired i databasen.

Så fort variabeln fix_date innehåller ett datum så fungerar frågan.

??? ¿¿¿


Query = "INSERT INTO T_system_status "
	Query = Query & "(Status, reported_date, host_info, system_error, fix_date, error_location, sysadmin) VALUES "
	Query = Query & "('" &sform_status &"','" &sform_reported_date &"','" &sform_host_info &"','" &sform_system_error &"','" &sform_fix_date &"','" &sform_error_location &"','" &sform_sysadmin  &"')"
 Response.Write (Query)
Connect.Execute( Query )

INSERT INTO T_system_status (Status, reported_date, host_info, system_error, fix_date, error_location, sysadmin) VALUES ('1','2003-09-23 15:46','192.9.201.217','lll','','lll','lll') 
Microsoft JET Database Engine error '80040e07' 

Data type mismatch in criteria expression. 

/script_system_status/button_redirect.asp, line 37
Medlem sedan juni 200032 967 inlägg
#2

Nej, du får inte skicka en tom sträng ('') om datatypen är datum. Antingen får du strunta i att ha med fältet i din fråga, eller använd värdet null.

Mvh

Medlem sedan maj 20012 080 inlägg
#3

Nu lärde jag mig något nytt.!

Hur använder jag mig av null?
Provade

if sform_fix_date = "" then
sform_fix_date = null
end if

men det gav samma fel.

Medlem sedan juni 200032 967 inlägg
#4

Du får inte ha apostrofer runt null, då tolkas det som en vanlig sträng med ordet null. Utan apostrofer blir det värdet null.

Mvh

Medlem sedan juni 200032 967 inlägg
#5

Annars kan du ju ha ett fiktivt datum istället;

if sform_fix_date = "" then
sform_fix_date = #1970-01-01#
end if

Mvh

Medlem sedan maj 20012 080 inlägg
#6

Det fungerar inte något bra att använda ett datum för jag använder en annan funktion där jag sorterar allt som har fix_date. Visserligen kan jag få den att ignorera detta datum.
Varför fungerade inte null enligt mitt exempel ovan? Jag använde inte några apostrofer. Eller menar du i sql frågan?

Medlem sedan maj 20012 080 inlägg
#7

Jag fixade en workaround med att ge ett speciellt datum i det fall där jag ville att tabellen skulle vara null. Det fungerar bra.

Tack...

Medlem sedan juni 200032 967 inlägg
#8

Varför fungerade inte null enligt mitt exempel ovan? Jag använde inte några apostrofer. Eller menar du i sql frågan?

Det blev väl det till slut i SQL-frågan? Det är där det är intressant hur det ser ut.

Bra att det löste sig.

Mvh

Medlem sedan dec. 20003 887 inlägg
#9

Det kanske kan fungera med hjälp av IIf() istället för din workaround?

Query = "INSERT INTO T_system_status " & _
        "(Status, reported_date, host_info, system_error, fix_date, error_location, sysadmin) " & _
        "VALUES ('" & sform_status & "','" & sform_reported_date & "','" & sform_host_info & "','" & _
        sform_system_error & "', IIf('" & sform_fix_date & "' = '', NULL, '" & sform_fix_date & "'),'" & _
        sform_error_location & "','" & sform_sysadmin  & "')"
Medlem sedan juli 2003162 inlägg
#10

Hmm, man kan visst använda tomma strängar i access! När du redigerar din databastabell, i design, kan du välja om access ska acceptera tomma strängar! :e

Medlem sedan maj 20012 080 inlägg
#11

Nu bubblar min fråga upp igen. Denna gången måste jag komma förbi detta.

I en update fråga är det ju enkelt att modifiera frågan men hur gör jag med en insertfråga?

UPDATE:

	Query = "UPDATE T_order_n_tracking SET "
	Query = Query & " orderreferens = '" &sOrderreferens &"'"
	Query = Query & ", ordernummer = '" &sOrdernummer  &"'"
	Query = Query & ", kundnamn = '" &sKundnamn  &"'"
	Query = Query & ", produkt = '" &sProdukt  &"'"
	if levdatum <> "" then
	Query = Query & ", levdatum = '" &sLeveransdatum  &"'"
	end if
	Query = Query & ", orderdatum = '" &sOrderdatum  &"'"
	Query = Query & ", transportreferens = '" &sTransportreferens  &"'"
	Query = Query & ", post_skapad_av = '" &sCreatedBy &"'"
	Query = Query & ", post_editerad_datum = '" &now() &"'"
	Query = Query & " WHERE ID = " &varSelectedId  &""

INSERT:

??

Det känns ju jätteknöligt att man inte får låta ett datumfält vara tomt. Grrrr....

PS Engine^, jag får inte ditt exempel att fungera DS

Medlem sedan juni 200032 967 inlägg
#12

Först och främst:

Wickmark skrev:

Hmm, man kan visst använda tomma strängar i access! När du redigerar din databastabell, i design, kan du välja om access ska acceptera tomma strängar! :e

Nej, inte i datumfält. Datumfält innehåller antingen ett giltigt datum eller null. Inget annat.

- - - - - -

Något sånt här?

strSQL = "INSERT INTO tabellen (fält1, fält2"
if variabel <> "" then strSQL = strSQL & ", fält3"
strSQL = strSQL & ") VALUES ('värde1, 'värde2'"
if variabel <> "" then strSQL = strSQL & ", 'värde3'"
strSQL = strSQL & ") "
Medlem sedan juni 200032 967 inlägg
#13

Ett annat alternativ är att inkludera funktionen IIF i sin ASP-sida. Att den funktionen inte ingår i VBScript är ett mysterium.

Function Iif(condition, truecase, falsecase)
     if (condition) then
           Iif = truecase
     else
           Iif = falsecase
     end if
End function

Sedan:

strSQL = "INSERT INTO tabellen (fält1, fält2, fält3) VALUES ('värde1', 'värde2', " & Iif (variabel <> "", "'" & variabel & "'", "NULL") &")"

mvh

Medlem sedan maj 20012 080 inlägg
#14

Tack @nders. Du fick in mig på rätt spår. Iif förstod jag inte riktigt så jag körde den klassiska lösningen istället.

<% sub subAddDataIntoDatabase() 
 ' Lägg till i databasen '
	Query = "INSERT INTO T_order_n_tracking "
	Query = Query & "(orderreferens, ordernummer, kundnamn, produkt, "
		if sLeveransdatum <> "" then 
		Query = Query & " levdatum, "
		end if
	Query = Query & " orderdatum, transportreferens, post_skapad_av, post_skapad_datum) VALUES "
	Query = Query & "('" &sOrderreferens 
	Query = Query &"','" &sOrdernummer 
	Query = Query &"','" &sKundnamn
	Query = Query &"','" &sProdukt
		if sLeveransdatum <> "" then 
		Query = Query &"','" &sLeveransdatum
		end if
	Query = Query &"','" &sOrderdatum
	Query = Query &"','" &sTransportreferens
	Query = Query &"','" &sCreatedBy
	Query = Query &"','" &now()
	Query = Query & "')"
	'response.write Query
	connect.execute(Query)  
	response.redirect("show_order.asp")
end sub %>
	
<% sub subUpdateDataInDatabase(num) 
 	' Updatera databasen '
	varSelectedId = num
	Query = "UPDATE T_order_n_tracking SET "
	Query = Query & " orderreferens = '" &sOrderreferens &"'"
	Query = Query & ", ordernummer = '" &sOrdernummer  &"'"
	Query = Query & ", kundnamn = '" &sKundnamn  &"'"
	Query = Query & ", produkt = '" &sProdukt  &"'"
	if sLeveransdatum <> "" then
	Query = Query & ", levdatum = '" &sLeveransdatum  &"'"
	end if
	Query = Query & ", orderdatum = '" &sOrderdatum  &"'"
	Query = Query & ", transportreferens = '" &sTransportreferens  &"'"
	Query = Query & ", post_skapad_av = '" &sCreatedBy &"'"
	Query = Query & ", post_editerad_datum = '" &now() &"'"
	Query = Query & " WHERE ID = " &varSelectedId  &""
	'response.write Query
	connect.execute(Query)  
	%>
265 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)