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
13 svar · 276 visningar · startad av mattiasnordin
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
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
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.
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
Annars kan du ju ha ett fiktivt datum istället;
if sform_fix_date = "" then
sform_fix_date = #1970-01-01#
end if
Mvh
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?
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...
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
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 & "')"
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
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
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 & ") "
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
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)
%>