ASP / VbScript / Access: Fehlermeldung 0x80040E2F
Bine
- datenbank
Hi, ich habe folgendes Problem.
Ich muss in eine Datenbank über ASP Werte eingeben können. Nun hab ich aber das Problem, dass die ID (Primärschlüssel) bei der Tabelle ein Autowert ist.
Demnach kann ich die ID nicht über ein HTML-Formular wie die anderen Werte eingeben. Nach einigem hin und her kam nun folgende Fehlermeldung:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E2F)
[Microsoft][ODBC Microsoft Access Driver] Null-Wert in Index oder Primärschlüssel nicht möglich.
/test-bine/Auftrag31.asp, line 29
line 29:
objRs.Update
Ich habe leider absolut keine Idee wie ich hier weiter komme.
Habe auch schon im Archiv und auf anderen Pages gesucht, aber nichts gefunden. Wär nett, wenn mir jemand helfen kann.
Hier nochmal der komplette Code:
<html>
<head>
<title>neuen Auftrag anlegen</title>
</head>
<body>
<%
Const adOpenKeyset = 1
Const adLockOptimistic = 3
mKunID = Request.Form("mKunID")
mAuftragsdatum = Request.Form("Auftragsdatum")
mLieferdatum = Request.Form("Lieferdatum")
mUstSatz = Request.Form("UstSatz")
EnableSessionState = false
SET objConn = Server.CreateObject("ADODB.Connection")
SET objRs = Server.CreateObject("ADODB.Recordset")
objConn.open "FILEDSN=Interaktiv.dsn"
If Error=0 Then
objRs.open "TabAuftraege", objConn, adOpenKeyset, adLockOptimistic
objRs.AddNew
objRs.Fields("KunID")=Request.Form("mKunID")
objRs.Fields("AufAuftragsdatum")=Request.Form("Auftragsdatum")
objRs.Fields("AufLieferdatum")=Request.Form("Lieferdatum")
objRs.Fields("AufUstSatz")=Request.Form("UstSatz")
objRs.Update
Response.Write("Folgender Datensatz wurde gespeichert: <br>")
objRs.MoveLast
Response.Write("<table><tr><td> Auftrags-ID</td>" & objRs.Fields("AufID").Value & "</td> </tr>")
Response.Write("<tr><td> Kunden-ID</td>" & objRs.Fields("AufKunID").Value & "</td> </tr>")
Response.Write("<tr><td> Auftragsdatum</td>" & objRs.Fields("AufAuftragsdatum").Value & "</td> </tr>")
Response.Write("<tr><td> Lieferdatum</td>" & objRs.Fields("AufLieferdatum").Value & "</td> </tr>")
Response.Write("<tr><td> Umsatzsteuer</td>" & objRs.Fields("AufUstSatz").Value & "</td> </tr></table>")
ELSE
Response.Write "Fehler beim öffnen der Datenbank"
END IF
%>
</body>
</html>
Hi Bine,
Microsoft OLE DB Provider for ODBC Drivers (0x80040E2F)
[Microsoft][ODBC Microsoft Access Driver] Null-Wert in Index oder Primärschlüssel nicht möglich.
/test-bine/Auftrag31.asp, line 29
irgendein Feld darf wohl keinen Null-Wert bekommen. Jetzt gilt es rauszukriegen, welches Feld da keinen Wert kriegt.
If Error=0 Then
objRs.open "TabAuftraege", objConn, adOpenKeyset, adLockOptimistic
objRs.AddNew
objRs.Fields("KunID")=Request.Form("mKunID")
objRs.Fields("AufAuftragsdatum")=Request.Form("Auftragsdatum")
objRs.Fields("AufLieferdatum")=Request.Form("Lieferdatum")
objRs.Fields("AufUstSatz")=Request.Form("UstSatz")
objRs.Update
Okay, hier werden die Felder KunID, AufAuftragsdatum, AufLieferdatum und AufUstSatz gesetzt. Gibt Request.Form da auch wirklich Werte zurück, oder ist eins davon Nothing? Das solltest du überprüfen.
Response.Write("<table><tr><td> Auftrags-ID</td>" & objRs.Fields("AufID").Value & "</td> </tr>")
Response.Write("<tr><td> Kunden-ID</td>" & objRs.Fields("AufKunID").Value & "</td> </tr>")
Response.Write("<tr><td> Auftragsdatum</td>" & objRs.Fields("AufAuftragsdatum").Value & "</td> </tr>")
Response.Write("<tr><td> Lieferdatum</td>" & objRs.Fields("AufLieferdatum").Value & "</td> </tr>")
Response.Write("<tr><td> Umsatzsteuer</td>" & objRs.Fields("AufUstSatz").Value & "</td> </tr></table>")
Hier werden die Werte wieder ausgegeben. Inklusive einem Feld AufID. Das scheint ja in der gleichen Tabelle zu stehen. Ist das vielleicht auf not nullable gesetzt? Denn beim Update wird das ja nicht belegt.
Ansonsten poste mal die Definition der Tabelle.
Gruß,
Martin
HI Martin,
irgendein Feld darf wohl keinen Null-Wert bekommen. Jetzt gilt es rauszukriegen, welches Feld da keinen Wert kriegt.
Die Tabelle heißt "TabAuftrag". In ihr sind die Attribute drin, die ihc auch übers Formular hole und zusätzlich das Feld "AufID". Diese Auftrags-ID ist der Primärschlüssel für die Tabelle, klar dass der nicht null sein darf.
Okay, hier werden die Felder KunID, AufAuftragsdatum, AufLieferdatum und AufUstSatz gesetzt. Gibt Request.Form da auch wirklich Werte zurück, oder ist eins davon Nothing? Das solltest du überprüfen.
Ja, alle Werte werden richtig und vollständig aus dem Formular übertragen.
Hier werden die Werte wieder ausgegeben. Inklusive einem Feld AufID. Das scheint ja in der gleichen Tabelle zu stehen. Ist das vielleicht auf not nullable gesetzt? Denn beim Update wird das ja nicht belegt.
Ich dachte mir bei der Sache eigentlich, dass, wenn ich für das Feld AufID keinen Wert ins Formular mache, dass das Feld dann im Datensatz innerhalb der Datenbank automatisch belegt wird (ist ja auch schließlich mit AutoWert definiert). Aber daraufhin kommt eben diese Fehlermeldung.
Mein Problem besteht letztendlich darin, dass ich nicht weiß, wie ich es hinbekomme, dass das Feld AufID automatisch belegt wird.
Hätte mich vielleicht etwas genauer ausdrücken sollen.
Gruß, Bine
Hallo,
in der Erklärung bzw. besser der Problembeschreibung ist irgendetwas faul.
WENN die Tabelle nur EIN Primärschlüsselfeld hat, welches AufID heißt und numerisch ist und zudem noch mit AutoWert gefüllt wird, dann konvergiert die Wahrscheinlichkeit, dass dieser Fehler rein durch die Datenbank MS Access[tm] ausgelöst wird, gegen NULL (0).
Ich habe diese Funktionalität in den letzten 6 Jahren bestimmt 10.000e Male verwendet, dabei ist nie ein Phänomen deiner Beschreibung entsprechend aufgetreten.
Untersuche bitte deine Tabellendefinition GENAUER. Vielleicht gehören aus Versehen mehrere Felder zum Primärschlüssel. Bei Bedarf, poste die Tabellendefinition.
Ja, alle Werte werden richtig und vollständig aus dem Formular übertragen.
Woran siehst du das?
Gruß, Frank
Es tut mir leid, ein riesengroßes Missverständnis. Mein Chef hat an der DB rumgepfuscht und mir nicht gesagt, dass er alle Autowerte rausgenommen hat. Tut mir wirklich leid.
Trotzdem vielen vielen Dank für die Hilfe.
Aber bevor ich wieder am selben Problem hängen bleib:
Wie frage ich den maximalen Attribut-Wert des Feldes AufID ab, erhöhe ihn um 1 und schreibe ihn in die nächste Datensatzzeile?
Es tut mir leid, ein riesengroßes Missverständnis. Mein Chef hat an der DB rumgepfuscht und mir nicht gesagt, dass er alle Autowerte rausgenommen hat.
You're sure? Das macht nicht gerade viel Sinn. Im Wilden Westen[tm] würde man ihn für soetwas erschießen. ;-)
Irgendwie traue ich auch dieser Wendung in deiner Problembeschreibung nicht.
Wie frage ich den maximalen Attribut-Wert des Feldes AufID ab, erhöhe ihn um 1 und schreibe ihn in die nächste Datensatzzeile?
Gruß, Frank