formularfeld in eine datenbank übertragen
sandra
- asp.net
hi,
ich habe eine html seite mit einem formularfeld, der inhalt wird an eine asp-seite weitergeleitet und von der asp-seite soll der formularfeldinhalt in eine datenbank geschrieben werden. hier der code:
HTML:
<html>
<head>
</head>
<body>
<form action="insertinto.asp" method="post">
<input type="text" name="gb_name" size="40"><br>
<input type="submit" value="Insert" name="gb_submit">
<input type="hidden" name="insert" value="true">
</form>
</body>
</html>
ASP
<%
'----------- Connection-Objekt instanziieren
set conn = server.CreateObject("ADODB.Connection")
Conn.CONNECTIONSTRING = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("/neu/db1.mdb") & ";"
'----------- Connection öffnen
conn.Open strConn
strInsert = "INSERT INTO test(Name) VALUES ('test')"
'----------- Datensatz hinzufügen
conn.Execute strInsert
'----------- Objekte zerstören
set conn = nothing
%>
die db-verbindung habe ich schon.
mein problem ist dass ich beim INSERT INTO .... VALUES('test') nur diesen festen wert übermitteln kann, also in diesem fall das wort test und nicht den tatsächlichen formularfeldinhalt. ich weiss nicht wie ich weiter vorgehen soll da ich eine anfängerin auf diesem gebiet bin. ich denke mal den formularfeld als variable deklarieren???
wie mach ich das der tatsachliche inhalt des formularfeldes über asp an die db übermittelt wird?
ich hoffe jemand kann mir weiter helfen...
thx
Hallo,
inhalt = trim(request.form("gb_name"))
'noch auf verbotene zeichen testen ' "
strInsert = "INSERT INTO test(Name) VALUES (" & inhalt & ")"
Odium
vielen dank aber jetzt krieg ich folgende fehlermeldung:
Microsoft JET Database Engine-Fehler '80040e14'
Syntaxfehler in der INSERT INTO-Anweisung.
/neu/insertinto.asp, Zeile 16
es handelt sich um conn.Execute strInsert zeile. ich baue aber die verbindung mit der datenbank nicht mit dem Microsoft JET... sondern mit:
Conn.CONNECTIONSTRING = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("/neu/db1.mdb") & ";"
auf
wenn ich die zeile auskommentiere und diese Microsoft.Jet.OLEDB als db aufbau benutze kommt die selbe fehlermeldung...
Hi Sandra, hi Odium
vielen dank aber jetzt krieg ich folgende fehlermeldung:
Microsoft JET Database Engine-Fehler '80040e14'
Syntaxfehler in der INSERT INTO-Anweisung.
/neu/insertinto.asp, Zeile 16
Der Fehler ist tatsächlich in der Insert-Anweisung. Ihr habt die beiden ' (einfache Anführungszeichen) im VALUES-Teil nicht gemacht. Folgendermassen funktionierts:
strInsert = "INSERT INTO test(Name) VALUES ('" & inhalt & "')"
Diese musst du immer machen, wenn ein Wert ein String ist.
MfG
Tom2
hi,
jetzt kommt:
Microsoft OLE DB Provider for ODBC Drivers-Fehler '80004005'
[Microsoft][ODBC Microsoft Access Driver] Feld 'test.Name' darf keine Zeichenfolge der Länge Null sein.
/neu/insertinto.asp, Zeile 16
die tabelle heisst test und die tabellenspalte name
Hallo Sandra
die tabelle heisst test und die tabellenspalte name
Vermeide nach Möglichkeit den Spaltennamen
name
wenn Du MS-Access verwendest, weil name eine Eigenschaft des Tabellenobjektes ist. Mit
test.[name]
könnte es klappen.
Gruss,
Vinzenz
Vielen Dank an alle. Ich werde eure Vorschläge in Ruhe ausprobieren. Bin gerade auf http://www.asp-database.de und lese mich durch.
Es klappt!!! Vielen Dank an Euch alle, ihr habt mir sehr geholfen!!! Es lag an der Spalte(name).
mfG
Hi, hallo
zum einen würde ich anmerken dass:
test.name einen Fehler verursacht hat, weil das Feld Name nicht leer (NULL) sein darf in einem Datensatz... kann man unter der Entwurfsansicht der Tabelle an der Einstellung "Darf leere Zeichenfolge enthalten" einstellen...
in deinem Fall war die Variable, die du eingebunden hast, wahrscheinlich leer (EMPTY)
die Aufzählung der Spaltennamen ist nur ein StringArray, welches aus schlüsselwörtern besteht.
ansonsten würden die Werte anhand ihrer Reihenfolge eingefügt, wenn man die Spaltenaufzählung komplett weglassen würde... die Spalten werden über ADO mittels 0-basiertem Index angesprochen.
Wenn man Spaltennamen explizit angibt, versucht ADO anhand des Spaltennamens die Indexnummer herauszufinden und fügt dann die Daten in die richtige Spalte ein. Das kostet etwas (eher unmerklich) Zeit, läßt sich aber mittels geeigneten Scripten recht gut feststellen.
zum anderen, wenn man dringend speziell Spaltenbezeichnungen wie zb. mit leerzeichen verwenden will (nur der Herrgott kennt die Gründe), sollte man den Namen in [] setzen
Es klappt!!! Vielen Dank an Euch alle, ihr habt mir sehr geholfen!!! Es lag an der Spalte(name).
mfG
Der Zugriff auf gängige Datenbanken (wie Access, SQL Server etc) sollte aus Performancegründen immer mittels dem OLEDB-Provider geschehen, ODBC sollte nur eine Ausweichmöglichkeit sein oder nur bei ganz exotischen Sachen (wie ADABAS, DBase, Excel etc) verwendet werden, die kein OLEDB unterstützen.
Tschau, tschüß,
Frank
Hallo Sandra,
jetzt kommt:
Microsoft OLE DB Provider for ODBC Drivers-Fehler '80004005'
[Microsoft][ODBC Microsoft Access Driver] Feld 'test.Name' darf keine Zeichenfolge der Länge Null sein.
1. das request-Objekt, aus welchem Formulareingaben oder Querystrings ausgelesen werden können, übernimmt genau den Namen des Formularelementes. Wenn Du also ein Textfeld <input type="text" name="deintextfeldname"> hast, must du in der .asp genau diesen Namen aus dem request-Objekt heraus nach seinem Wert abfragen:
stEingabe = request.form("deintextfeldname")
Da Du womöglich dieses noch nicht wusstest, hast Du die Codebeispiele wörtlich verwendet und die Nullzeichenfolge erhalten (kein vorhandenes Formularelement).
Ansonsten verfahre wieder gemäss meinen Vorrednern.
2.Eine Spalte namens "name" sollte man in keinem Datenbanksystem verwenden, da "name" ein keyword ist. Wenn Du weitere Probleme vermeiden willst, benenne die Spalte um.
3.Ein hilfreicher Link:
http://www.asp-database.de/aspdatabase/
Grüsse
Uwe
die tabelle heisst test und die tabellenspalte name
Hallo Sandra,
Microsoft JET Database Engine-Fehler '80040e14'
Syntaxfehler in der INSERT INTO-Anweisung.
es handelt sich um conn.Execute strInsert zeile. ich baue aber die verbindung mit der datenbank nicht mit dem Microsoft JET... sondern mit:
Conn.CONNECTIONSTRING = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("/neu/db1.mdb") & ";"
MS Access verwendet die JET-Engine, diese führt die SQL-Anweisungen aus.
Deine SQL-Anweisung ist in JET-SQL fehlerhaft, daher die Fehlermeldung.
Tipp:
Lass Dir die SQL-Anweisung in ausgeben.
Falls Du den Fehler nicht gleich findest, so öffne Access und editiere in der SQL-Ansicht (ja, die gibt's) die SQL-Anweisung solange, bis sie funktioniert. Baue anschliessend Deine SQL-Anweisung so zusammen, dass JET sie versteht.
Gruss,
Vinzenz