Daten aus einer Form in die Access-Datenbank eintragen

M

Meitli

Hi Zusammen

Ich hab ein grösseres Projekt und sitzte seit Stunden am gleichen Problem.

Es lassen sich keine Daten aus einem Formular in die Datenbank eintragen.

Das Projekt: Es gibt verschiedene Kurse, welche Unterlagen verwenden, diese Unterlagen werden an einem Ort gespeichert. In folgendem File werden zuerst die Unterlagen, welche schon dem Kurs zugeordnet sind ausgegeben. Das funktioniert, dass heisst auch die Datenbankverbindung funktioniert. Unter der Ausgabe befindet sich eine Form, in welcher ich eine weitere vorhandene Unterlagen hinzufügen kann. Die vorhanden Daten werden in diesem Auswahlfenster angezeigt.
Jetzt zum Probelm: Wenn ich auf "Hinzufügen" klicke passiert nichts, ausser das die Seite neu geladen wird.

Zum Aufbau der Datenbank: In der Tabelle Kursunterlagen wird die Fremdschlüssel KursID und UnterlagenID eingetragen. So können mehrere Kurse die gleiche Unterlagen verwenden, aber auch ein einzelner Kurs kann mehrer Unterlagen verwenden.

Der Formularcode:
Code:
<form name="form1" method="post" action="">
    <table width="100%" border="0" cellspacing="1" bordercolor="#CCCCCC" ID="Table6">
       <tr bgcolor="#B7C2D0"> 
         <td width="25%"><font face="Arial, Helvetica, sans-serif" size="2"><b>Unterlagen: 
                      </b></font></td>
                    <td width="75%"> <font face="Arial, Helvetica, sans-serif" size="2"> 
                      <select name="sUnter" ID="Select4">
                        <option value="no" selected>
                        <% 'Unterlagen in Auswahlmenu einlesen %>
                        </option>
                        <%
		 Set rs = KPLcon.Execute("SELECT * FROM Unterlagen")
		 do until rs.EOF%>
                        <option value="<%response.write(rs("UnterlagenID"))%>">  
		     <%response.write(rs("Unterlagen"))%>
                        &nbsp; 
                                     <%response.write(rs("Speicherort"))%>
                        </option>
                        <%rs.MoveNext
		 loop
		rs.close %>
                      </select>
                      </font></td>
                  </tr>
                  <tr bgcolor="#B7C2D0"> 
                    <td width="25%"> <font face="Arial, Helvetica, sans-serif" size="2"> 
           <input type="hidden" name="KursID" value=<%Response.Write(Request("KursID"))%> ID="Hidden1">
                      &nbsp; </font></td>
                    <td width="75%"> <font face="Arial, Helvetica, sans-serif" size="2"> 
             <input type="submit" name="Submit" value="&Uuml;bernehmen" ID="Submit1">
                      </font></td>
                  </tr>
                </table>
        </form>

Der Einfügecode:

Code:
if Request("action") = "new" then

Set rs = KPLcon.Execute("INSERT INTO Kursunterlagen (KursID, UnterlagenID) VALUES ('" & Request("KursID") & "', '" & Request("UnterlagenID") & "')")

end if

Wäre echt froh wenn mir jemand helfen könnte.

Liebe Grüsse
Meitli
 

Luzie

Erfahrenes Mitglied
Hi

habe den Scriptcode überflogen aber ich sehe kein Feld namens action und auch nicht Unterlagenid :confused:

Ferner kommt es beim insert darauf an, ob kursid bzw. Unterlagenid Felder vom type Integer sind. Dann nämlich gehören die Hochkomma weg (Access)

Versuchs mal so:

Code:
if Request.Form.Count>0 then

Set rs = KPLcon.Execute("INSERT INTO Kursunterlagen (KursID, UnterlagenID) VALUES (" & Request.Form("KursID") & ", " & Request.Form("sUnter") & ")")

end if
 
M

Meitli

Es ist nicht der ganze Code vorhanden! Dieser wäre zu lang um zu posten!

Aber dein Code hat funktioniert. Danke viel mal! Endlich kann ich wieder weiterarbeiten!

P.S. Hast du auch gerade eine Lösung für das Löschen?

Das ist der Löschlink:
Code:
<td width="10%"> 
     <div align="center"><font face="Arial, Helvetica, sans-serif" size="2">
          <a href="kspeicherort.asp?action=del&KurstageID=<%response.write(rs("UnterlagenID"))%>&KursID=<%response.write(Request("KursID"))%>" onClick="return sure()">
L&ouml;schen
</a><
/div>
</td>

Das ist der Löschbefehl:
Code:
if Request("action") = "del" then
Set rsdel = KPLcon.Execute("DELETE FROM Kursunterlagen WHERE KursunterlagenD=" & Request("KursunterlagenID") & "")	
end if

Mit diesem Befehl kommt immer der selbe Fehler nach dem ausführen:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntaxfehler (fehlender Operator) in Abfrageausdruck 'UnterlagenID='.
 
Zuletzt bearbeitet von einem Moderator:

Luzie

Erfahrenes Mitglied
Hi

das ist eigenartig.

Die Meldung besagt, dass in der Where-Bedingung des Delete-Statements kein Wert übergeben wird.

Dieses heißt in Deinem Script KursunterlagenD=" in der Fehlermeldung aber UnterlagenID=.

Das lässt jetzt irgendwie die Vermutung aufkommen, dass sich die Meldung auf ein anderes Script bezieht oder Du hast es geändert. Wie auch immer.

Du rufst den Request aus dem QueryString ("KursunterlagenID") im Statement auf. Aber dieser Parameter ist in Deiner URL nicht zu finden. Dort heißt er vermutlich KurstageID.

Du musst einfach mal etwas sauberer arbeiten. :eek:

Wenn Du einen Parameter aus einer URL übergibst, sollstest Du dies dem Server mitteilen und zwar mir Request.QueryString("wert"). Genauso verhält es sich mit dem Parameter aus dem Formular Request.Form("wert"). Gibst Du nur den Request() an, dann geht das auf die Performance, denn er sucht jetzt alle möglichen Konstellationen durch von Cookie bis zu den ServerVarialben.
 
M

Meitli

Es funktioniert! Ich habe ein paar Mal zu viel UnterlagenID verwendet, wo eigentlich KursunterlagenID hätte hinkommen sollen.

Das mit dem Code ist nicht meine Schuld! Ich bearbeite nur das Projekt, dass heisst ich mach einige Erweiterungen. Und mein Vorgänger hat seinen Code nicht besonders schön geschrieben. Und wenn ich dann mal etwas kopier, kann es schon vorkommen das ich ein Fehler auftaucht, oder ich einen Fehler in der bisherigen Anwendung finde.

Sorry! Und nocheinmal danke. Du hast mir sehr geholfen!