13. maj 2006 - 18:21
Der er
43 kommentarer og 1 løsning
error '80040e2f' ved brug af UPDATE
Min kode nedenfor opdaterer min DB som forventet, men afslutter med følgende fejl: Microsoft OLE DB Provider for ODBC Drivers error '80040e2f' [Microsoft][ODBC Microsoft Access Driver] Index or primary key cannot contain a Null value. /SpecialeLogbog/indtastlog02.asp, line 31 Linie 31 indeholder Apparat.UPDATE <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>SpecialeLogbog Indtast i Apparat Tabel</title> </head> <%@LANGUAGE="VBSCRIPT"%> <!--#include file="dbconnect.asp" --> <% Set Apparat = Server.CreateObject("ADODB.Recordset") Apparat.Open "00Apparat", Conn, 2, 2 %> <% Apparat.AddNew Apparat("ID_Model") = Request.QueryString("ID_Model") Apparat("ApparatBetegnelse") = Request.QueryString("ApparatBetegnelse") Apparat("Serienr") = Request.QueryString("Serienr") Apparat("ApparatDokumentation") = Request.QueryString("ApparatDokumentation") Apparat("ID_Pilot") = Request.QueryString("ID_Pilot") Apparat("ID_Funktion") = Request.QueryString("ID_Funktion") Apparat("ID_MinMåleområde") = Request.QueryString("ID_MinMåleområde") Apparat("ID_MaxMåleområde") = Request.QueryString("ID_MaxMåleområde") Apparat("ID_DriftStatus") = Request.QueryString("ID_DriftStatus") Apparat("Bemærkning") = Request.QueryString("Bemærkning") Apparat.UPDATE Response.Redirect("indtastapparat01.asp") %> <body> </body> </html>
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
hvilket felt er primary i databasen ?
Du får lige koden igen: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>SpecialeLogbog Indtast i Log Tabel</title> </head> <%@LANGUAGE="VBSCRIPT"%> <!--#include file="dbconnect.asp" --> <% Set LogBog = Server.CreateObject("ADODB.Recordset") LogBog.Open "26Log", Conn, 2, 2 %> <% LogBog.AddNew LogBog("ID_Apparat") = Request.QueryString("ID_Apparat") LogBog("ID_Person") = Request.QueryString("ID_Person") LogBog("Note") = Request.QueryString("Note") LogBog("Linearitet") = Request.QueryString("Linearitet") LogBog("Repeterbarhed") = Request.QueryString("Repeterbarhed") LogBog("Nøjagtighed") = Request.QueryString("Nøjagtighed") LogBog("ID_Fejl") = Request.QueryString("IID_Fejl") LogBog("ID_Reservedel") = Request.QueryString("ID_Reservedel") LogBog("ID_Forsyningsmedie") = Request.QueryString("ID_Forsyningsmedie") LogBog("ID_KalibreringsKomponent") = Request.QueryString("ID_KalibreringsKomponent") LogBog("ID_Afhjælpning") = Request.QueryString("ID_Afhjælpning") LogBog("Bemærkning") = Request.QueryString("Bemærkning") LogBog.UPDATE Response.Redirect("indtastlog02.asp") %> <body> </body> </html>
Primary faktisk en sammensat nøgle af ID_Timestatmp + ID_Apparat Du kan ikke se ID_Timestatmp i koden, da den opdateres automatisk via NOW()
hvis du åbner databasen i designvisning i access, kan du se en nøgle ud for et felt. Hvilket felt er det ?
Hvor bliver den genereret ?
Genererer den NOW() i access ?
Ja, jeg bruger now()som standardværdi
hmm... det har jeg godtnok aldrig prøvet før. Hvad sker der, hvis du fjerner standard-værdien i access, og tilføjer den i asp ? LogBog("ID_Timestamp") = Now
Altså: LogBog.AddNew LogBog("ID_Timestamp") = Now osv. ?
jeps, og så fjerne standardværdien i access
Den laver samme fejl, altså tabellen opdateres med tid samt mine indtastninger men det hele afsluttes med nævnte fejl
dvs. den indsætter en post i databasen ? Er der et tomt felt ?
Hvad mener du med et tomt felt. Man kan sagtens få udfyldt alle felter ved indsætning Tiden plaseres i ID_Timestamp
Den brokker sig jo over, at der er et indexeret eller primary felt, der bliver tildelt null. altså ingenting. Er der slet ikke noget felt i databasen der er tomt efter indtastning ?
OK, jeg forstod ikke fejlmeddelelsen, jeg kigger lige i DB
Der er ikke noget felt i den tilføjede linie der er tomt, men der er oprettet en extra linie uden indtastninger og ID_Apparat og ID_Person er obligatoriske så måske er det her det går galt. Der oprettes altså en extra linie ved indtastning
et vildt gæt. men prøv lige at indsætte den her før Logbog.Addnew: If Request.QueryString("ID_Apparat") <> "" then og end if, efter Logbog.update
Det virker som om scriptet aldrig afslutter
Prøv lige at copy/paste koden som den ser ud nu
Her er koden: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>SpecialeLogbog Indtast i Log Tabel</title> </head> <%@LANGUAGE="VBSCRIPT"%> <!--#include file="dbconnect.asp" --> <% Set LogBog = Server.CreateObject("ADODB.Recordset") LogBog.Open "26Log", Conn, 2, 2 %> <% If Request.QueryString("ID_Apparat") <> "" then LogBog.AddNew LogBog("ID_Timestamp") = Now LogBog("ID_Apparat") = Request.QueryString("ID_Apparat") LogBog("ID_Person") = Request.QueryString("ID_Person") LogBog("Note") = Request.QueryString("Note") LogBog("Linearitet") = Request.QueryString("Linearitet") LogBog("Repeterbarhed") = Request.QueryString("Repeterbarhed") LogBog("Nøjagtighed") = Request.QueryString("Nøjagtighed") LogBog("ID_Fejl") = Request.QueryString("ID_Fejl") LogBog("ID_Reservedel") = Request.QueryString("ID_Reservedel") LogBog("ID_Forsyningsmedie") = Request.QueryString("ID_Forsyningsmedie") LogBog("ID_KalibreringsKomponent") = Request.QueryString("ID_KalibreringsKomponent") LogBog("ID_Afhjælpning") = Request.QueryString("ID_Afhjælpning") LogBog("Bemærkning") = Request.QueryString("Bemærkning") LogBog.UPDATE end if Response.Redirect("indtastlog02.asp") %> <body> </body> </html>
Det kan jeg ærlig talt ikke se, hvor den skulle fryse ved. Nu bruger jeg normalt ikke selv den metode til at indsætte records på, jeg plejer altid at lave en sql-insert. Så jeg tør ikke sige, om der er noget galt i selve metoden.
Hvordan ville det se ud med INSERT ?
Det mærkelige er jo, at den faktisk udfører indsættelsen
Så skal jeg lige bruge koden fra din dbconnect.asp samt indholdstyper på alle felterne, om det er tal, tekst, dato/tid osv.
DBCONNECT: <head> <meta http-equiv="Content-Language" content="da"> </head> <% Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("/SpecialeLogbog/fpdb/logbog02_08052006_2123_N14.mdb") Conn.Open DSN %><p>SpecialeLogbog</p>
FELTER: ID_Timestamp ID_Apparat ID_Person Note Linearitet Repeterbarhed Nøjagtighed ID_Fejl ID_Reservedel ID_Forsyningsmedie ID_KalibreringsKomponent ID_Afhjælpning Bemærkning
Jeg vil godt give extra points
så mangler jeg bare lige hvilken datatype felterne har, (tal, tekst, notat, dato/tid) altså, hvordan de er oprettet i databasen
ID_Timestamp dato/tid ID_Apparat tal ID_Person tal Note tekst Linearitet tekst Repeterbarhed tekst Nøjagtighed tekst ID_Fejl tal ID_Reservedel tal ID_Forsyningsmedie tal ID_KalibreringsKomponent tal ID_Afhjælpning tal Bemærkning tekst
Først. Lav en backup af din nuværende fil, og erstat hele indholdet med dette: <%@LANGUAGE="VBSCRIPT"%> <!--#include file="dbconnect.asp" --> <% If Request.QueryString("ID_Apparat") <> "" then SQL = "INSERT INTO 26Log (ID_Timestamp, ID_Apparat, ID_Person, Note, Linearitet," SQL = SQL & " Repeterbarhed, Nøjagtighed, ID_Fejl, ID_Reservedel, ID_Forsyningsmedie," SQL = SQL & " ID_KalibreringsKomponent, ID_Afhjælpning, Bemærkning) " SQL = SQL & "VALUES (#" & Now & "#," & Request.QueryString("ID_Apparat") & "," SQL = SQL & Request.QueryString("ID_Person") & ",'" & Request.QueryString("Note") & "','" SQL = SQL & Request.QueryString("Linearitet") & "','" & Request.QueryString("Repeterbarhed") & "','" SQL = SQL & Request.QueryString("Nøjagtighed") & "'," & Request.QueryString("ID_Fejl") & "," SQL = SQL & Request.QueryString("ID_Reservedel") & "," & Request.QueryString("ID_Forsyningsmedie") & "," SQL = SQL & Request.QueryString("ID_KalibreringsKomponent") & "," & Request.QueryString("ID_Afhjælpning") & ",'" SQL = SQL & Request.QueryString("Bemærkning") & "')" set Create = Server.CreateObject("ADODB.Command") Create.ActiveConnection = DSN Create.CommandText = SQL Create.CommandType = 1 Create.CommandTimeout = 0 Create.Prepared = true Create.Execute() Response.Redirect("indtastlog02.asp") end if %> --------- Se hvad den så siger... Jeg er ikke helt sikker på hvordan den accepterer æøå i feltnavne. Generelt bør du undgå dette. Men prøv at se om den kommer med en fejl efter det her
Den laver fejl i linie 29: SpecialeLogbog Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement. /SpecialeLogbog/indtastlog02.asp, line 29
hmmm... Sæt lige de to her ind inden set Create = Server.CreateObject("ADODB.Command") Response.Write SQL Response.End() Og copy paste hvad den returnerer
INSERT INTO 26Log (ID_Timestamp, ID_Apparat, ID_Person, Note, Linearitet, Repeterbarhed, Nøjagtighed, ID_Fejl, ID_Reservedel, ID_Forsyningsmedie, ID_KalibreringsKomponent, ID_Afhjælpning, Bemærkning) VALUES (#5/14/2006 12:14:01 AM#,5,3,'1','1','1','1',1,3,1,1,1,'1')
aahhh... :) Note er et reserveret ord, og må ikke bruges... omdøb note feltet i databasen til notat evt. og husk at rette linien: SQL = "INSERT INTO 26Log (ID_Timestamp, ID_Apparat, ID_Person, Note, Linearitet," til SQL = "INSERT INTO 26Log (ID_Timestamp, ID_Apparat, ID_Person, Notat, Linearitet,"
Sagen er BØF TAK Send et svar
Værsgo' :) Det kan være din originale kode virker også så... hvis du ændrer note til notat... Det kan du jo prøve dig frem til... Men for din egen skyld, så undgå altid ÆØÅ i databaser og kodning generelt.. Det er bare min egen erfaring. Det kan give problemer..
Hov kan man forresten øge points ?
Aner det ikke... Det behøver du heller ikke, jeg skal ikke bruge dem til noget :)
Kurser inden for grundlæggende programmering