sandra: formularfeld in eine datenbank übertragen

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

  1. Hallo,

    inhalt = trim(request.form("gb_name"))
    'noch auf verbotene zeichen testen ' "

    strInsert = "INSERT INTO test(Name) VALUES (" & inhalt & ")"

    Odium

    1. 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...

      1. 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

        --
        "Experience is something you don't get until just after you need it."
         by Steven Wright
        1. 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

          1. 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

            1. Vielen Dank an alle. Ich werde eure Vorschläge in Ruhe ausprobieren. Bin gerade auf http://www.asp-database.de und lese mich durch.

              1. Es klappt!!! Vielen Dank an Euch alle, ihr habt mir sehr geholfen!!! Es lag an der Spalte(name).
                mfG

                1. 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

          2. 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

      2. 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