Daten in der Datenbank aktualisieren

M

Meitli

Hallo Zusammen

Ich stehe schon wieder ein Mal an einem Problem

Ich hab eine Form, wo die aktuell eingetragene Unterlage angezeigt wird. Möchte man Sie bearbeiten, stehen einem die anderen Unterlagen auch zur Verfügung.

Wird eine andere Unterlage ausgewählt, muss logischer weise die Datenbank aktualiesiert werden.

Ich habe es so versucht:
Code:
if Request("action") = "upd" then	

Update Kursunterlagen SET UnterlagenID=Request("UnterlagenID")
	WHERE KursunterlageID=Request("KursunterlagenID")
	
end if

Meine Form sieht so aus:
Code:
      <form name="form1" method="post" action="kspeicherortupd.asp" onSubmit="return chkForm()" ID="Form1">
        <font face="Arial, Helvetica, sans-serif" size="2"> 
        <input type="hidden" name="action" value="upd" ID="Hidden1">
        </font> 
        <table width="27%" border="0" align="center" cellspacing="1" bordercolor="#CCCCCC" ID="Table1">
          <tr bgcolor="#B7C2D0"> 
            <td width="36%"><font face="Arial, Helvetica, sans-serif" size="2"><b>Speicherort:</b></font></td>
            <td width="64%"> <font face="Arial, Helvetica, sans-serif" size="2"> 
              <select name="sUnter" ID="Select3">
                <%
		Set rsU = KPLcon.Execute("SELECT * FROM Unterlagen WHERE UnterlagenID=" & rs("UnterlagenID") & "") 
		%>
                <option value=<%=(rs("UnterlagenID"))%> selected> 
                <%response.write(rsU("Unterlagen"))%>
                &nbsp; 
                <%response.write(rsU("Speicherort"))
		rsU.Close %>
                </option>
                <%
  Set rsUn = KPLcon.Execute("SELECT * FROM Unterlagen")
  do until rsUn.EOF%>
                <option value=<%response.write(rsUn("UnterlagenID"))%>> 
                <%response.write(rsUn("Unterlagen"))%>
                &nbsp; 
                <%response.write(rsUn("Speicherort"))%>
                </option>
                <%rsUn.MoveNext
  loop
		rsUn.close %>
              </select>
              </font></td>
          </tr>
          <tr bgcolor="#B7C2D0"> 
            <td width="36%"> <font face="Arial, Helvetica, sans-serif" size="2"> 
              <input type="hidden" name="UnterlagenID" value=<%Response.Write(Request("UnterlagenID"))%> ID="Hidden2">
              <input type="hidden" name="KursunterlagenID" value=<%Response.Write(Request("KursunterlagenID"))%> ID="Hidden3">
              &nbsp; </font></td>
            <td width="64%"> <font face="Arial, Helvetica, sans-serif" size="2"> 
              <input type="submit" name="Submit" value="&Uuml;bernehmen" ID="Submit1">
              </font></td>
          </tr>
        </table>
      </form>

Doch am Formular kann es nicht liegen, das funktioniert! Wird ein Update unter ASP anderst gemacht?
 
Hi

dies ist komplett falsch!

if Request("action") = "upd" then

Update Kursunterlagen SET UnterlagenID=Request("UnterlagenID")
WHERE KursunterlageID=Request("KursunterlagenID")

end if


Zum einen, wenn Du Variablen verwendest, musst Du diese auch als Variablen zum Einfügen bereitstellen. Das ist in ASP nicht so schön einfach wie in php. Dort MUSS IMMER die Zeichenkette geschlossen werden, wenn eine Variable folgt, geht es in der Anweisung weiter, muss diese wieder geöffnet werden also

Text " & Variable & " Text

Weiterhin muss das Script ausgeführt werden EXECUTE. Ein bloßes Hinschreiben der SQL-Anweisung funktioniert nicht. :(

Ich gehe jetzt mal davon aus, dass sowohl unterlagenid als auch kursunterlagenid vom Type Integer sind. Hier darf man die Variable nicht einquoten.

Dann nochmal unbedingt auf die Rechtschreibung achten. Einmal schreibst Du KursunterlageID und einmal KursunterlagenID. Hier können sehr schnell ganz dumme Fehler auftreten.

Code:
if Request("action") = "upd" then	
dim SQL
SQL = "Update Kursunterlagen SET UnterlagenID=" & Request.Form("UnterlagenID") 
SQL = SQL & " WHERE KursunterlageID=" & Request.Form("KursunterlagenID")
Verbindung.execute(SQL)	
end if

Solltest Du jetzt noch weitere Felder updaten wollen, z.B. mit Werten aus dem Select-Menü, dann musst Du die Update-Anweisung entspr. dem Feld erweitern.
 
Zuletzt bearbeitet:
Danke erst einmal für deine Antwort, Luzie.

Diese Seite (kspeicherortupd.asp) funktioniert ohne Probleme, betätigt man den Übernehmen Button so wird auch auf die richtige Seite weitergeleitet, doch genau da beginnen die Probleme :mad: , eine Fehlermeldung erscheint (siehe Unten) und die Daten werden nicht updatet.
Ich habe es schon mit einem INSERT Befehl versucht, doch auch dieser wird nicht ausgeführt.

Die Fehlermeldung:

Microsoft OLE DB Provider for ODBC Drivers Fehler "80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in der INSERT INTO-Anweisung.
/kplserver/kspeicherort.asp, line 199

Quelltext des kspeicherort.asp (Zeile 199=Rot)

Code:
<table width="100%" align="center"border="0" ID="Table2">
<tr align="left" valign="top"> 
    <td height="20" colspan="5"><hr></td>
    <td ></td>
  </tr>
  <tr align="left" valign="top"> 
    <td width="20%"> </td>
    <td colspan="4" width="80%" height="4"><font face="Arial, Helvetica, sans-serif" size="1" color="#000000">&nbsp;</font></td>
  </tr>
  <tr> 
    <td>
    </td>
    <td bgcolor="#000099" colspan="4"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#003366">&nbsp;</font><font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#003366">&nbsp; 
      </font> <font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#FFFFFF">&nbsp;Unterlagen
      von Kurs:</font> <font face="Arial, Helvetica, sans-serif" size="1"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF"> 
      <%Response.Write(rs("Bezeichnung"))%>
      / </font><font face="Arial, Helvetica, sans-serif" size="1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF"> 
      </font><font face="Arial, Helvetica, sans-serif" size="1"><font face="Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">
      <%Response.Write(rs("KursID"))%>
      </font></font></font></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF"> 
      </font> </font> </td>
    
  </tr>
  <tr align="left" valign="middle"> 
    <td width="20%">
	 <style type="text/css">
#layerButton { position:absolute; top: 155; left: 5; visibility: visible; }
</style>
<div id="layerButton">
<table border="0" cellspacing="0" cellpadding="0" width="180" ID="Table3">
  <tr>
    <td width="180" style="background-image:url(background.gif)"><img style="border-color:#F8F8FF"; border-width:1px; border-style:solid; padding:4px" src="auge.gif"></td>
  </tr>
  <tr>
   <td align="left" valign="MIDDLE" style="background-image:url(background.gif)">
    <b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
		  <a href="admin.asp"><%
		  If Session("UserGr") = 1 then
		  %>
		  Adminibereich</a></font></b>
		  <% 'Nur wenn Admin
		  end if %>
   <td></td>
  </tr>
  
  <tr>
                <td align="left" valign="MIDDLE" style="background-image:url(background.gif)"> 
                  <b><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> 
                  <a href="kuebersicht.asp">Kurse</a></font></b> </td>
  </tr>
  
  <tr> 
            <td align="left" valign="MIDDLE" style="background-image:url(background.gif)"> 
              <b><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> 
              <%
				If Session("UserGr") <> 3 then 
				%>
              <a href="keingabe.asp">- Neuer Kurs erfassen</a></font></b> 
              <% 'Nicht wenn Gast
				end if %>
            </td>
          </tr>
  
  <tr>
		              
                <td align="left" valign="MIDDLE" style="background-image:url(background.gif)"> 
                  <b><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> 
                  <a href="admin.asp"> </a></font></b><a href="lehrlinge.asp"> 
                  <%
		  if Session("UserGr") <> 3 then
		  %>
                  <b><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> 
                  Noten/Nachweis</font></b></a><b><font face="Verdana, Arial, Helvetica, sans-serif" size="1"> 
                  <% 'Nicht wenn Gast
		  end if %>
                  </font></b>  
                
        </tr>
  
  <tr>
                <td align="left" valign="MIDDLE" style="background-image: url(file:///U|/Desktop/background.gif)">
   </td>
  </tr>
  <tr><td align="left" valign="MIDDLE" style="background-image:url(background.gif)"> 
      <b><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><a href="Klassenliste.asp">Formulare</a></font></b> </td>
  </tr>
  

    
</table>
</div>
</td>
    
    <td rowspan="7" height="32" valign="top" colspan="4" width="850"> 
      <div align="left"> <br>
        <div align="left"> 
          <p align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><a href="kdetail.asp?KursID=<%Response.Write(rs("KursID"))%>">
        <font color="#0000FF">zur&uuml;ck 
          zu den Kursdetails</font></a></font></p>
		 
		  <%

if Request("action") = "del" then
	Set rsdel = KPLcon.Execute("DELETE FROM Kursunterlagen WHERE KursunterlagenID=" & Request("KursunterlagenID") & "")	
end if

'Wenn Formular neue Unterlagen hinzufügen abgesendet
if Request.Form.Count>0 then

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

end if

%>
		  
		  
          <table width="100%" border="0" ID="Table4">
          <tr valign="top"> 
            <td width="76%"> 
              <table width="98%" border="0" ID="Table5">
                <tr bgcolor="#B7C2D0"> 
                  <th width="11%"> 
                    <div align="left"><font face="Arial, Helvetica, sans-serif" size="2">Unterlagen</font></div>
                  </th>
                  <th width="12%"> 
                    <div align="left"><font face="Arial, Helvetica, sans-serif" size="2">Speicherort</font></div>
                  </th>
                  <th width="10%"><font face="Arial, Helvetica, sans-serif" size="2">L&ouml;schen</font></th>
                  <th width="12%"><font face="Arial, Helvetica, sans-serif" size="2">Bearbeiten</font></th>
                </tr>
                <%
			Set rs = KPLcon.Execute("SELECT * FROM Unterlagen, Kursunterlagen WHERE KursID = " & Request("KursID") & " AND Unterlagen.UnterlagenID = Kursunterlagen.UnterlagenID ORDER BY Unterlagen")
			do until rs.EOF%>
                <tr> 
                  <td width="11%"> 
                    <div align="left"> <font face="Arial, Helvetica, sans-serif" size="2"> 
                      <%Response.Write(rs("Unterlagen"))%>
                      </font></div>
                  </td>
                  <td width="12%"> 
                    <div align="left"> <font face="Arial, Helvetica, sans-serif" size="2"> 
                      <a href=http://<%Response.Write(rs("Speicherort"))%> target=_blank><%Response.Write(rs("Speicherort"))%></a>
                      </font></div>
                  </td>

                  <td width="10%"> 
                    <div align="center"><font face="Arial, Helvetica, sans-serif" size="2"><a href="kspeicherort.asp?action=del&KursunterlagenID=<%response.write(rs("KursunterlagenID"))%>&KursID=<%response.write(Request("KursID"))%>" onClick="return sure()"><font color="#FF00FF">L&ouml;schen</font></a></font></div>
                  </td>
                  <td width="12%"> 
                    <div align="center"><font face="Arial, Helvetica, sans-serif" size="2"><a href="kspeicherortupd.asp?KursunterlagenID=<%=(rs("KursunterlagenID"))%>&KursID=<%=(Request("KursID"))%>"><font color="#0000FF">Bearbeiten</font></a></font></div>
                  </td>
                  <%rs.MoveNext%>
                </tr>
                <%loop
			'rs.close
			%>
              </table>
            </td>
            </tr>
        </table>
      </div>
        <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>
        <p align="center">&nbsp;</p>
      </div>
      <p>&nbsp; </p>
    </td>
  </tr>
  
</table>

Quelltext (Auschnitt zum Updaten der Daten) des kspeicherortupd.asp

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

Set rsupd = KPLcon.Execute("Update Kursunterlagen SET UnterlagenID=" & Request.Form("UnterlagenID") & " WHERE KursunterlagenID=" & Request.Form("KursunterlagenID") & "")

end if

Im Anhang habe ich noch zwei Print Screens gemacht, von diesen zwei Files!
Fände es toll wenn jemand kurz Zeit hätte mir meinen grossen :p Eintrag durchzusehen und mir einen Lösungsansatz zu geben :)
 

Anhänge

  • speicherort.zip
    4,8 KB · Aufrufe: 15
  • speicherortupd.zip
    3,2 KB · Aufrufe: 14
Hallo

1. Du hast in form action keine Ziel-URL angegeben. So, folglich wird das Formular an die gleiche Seite geschickt.

Dort fragst Du einem nach einem Request("del") zum Löschen und einmal nach dem Form.Count zum Einfügen eines Datensatzes.

Wird das Formular jetzt an die gleiche Seite geschickt, dann ist der Form.Count >0 und das Script versucht ein Insert durchzuführen. Ist das Feldformat einer der beiden Felder nun vom Format text, dass muss ich wieder daran erinnern, dass die Variable gequotet werden muss.

insert into tabelle (feld1,feld2) Values (1,'" & Request.Form("feld2") & "')

Also wenn Du den Form.Count abfragst, dann reagiert das auf alle Formulare, die abgeschickt werden.

Du solltest es Dir einfacher machen um echt mal Grund darein zu bekommen.

Folgend Struktur würde ich dir raten anzulegen.

1. Seite zu Auswahl der Datensätze (Link zum ändern, löschen und einen Link, um einen neuen Datensatz einzufügen.)

1 Formular fürs insert und
1 Formular fürs update (Wenn Du eine Abfrage in einem Script nicht schaffst)

Dann eine 4 Seite erstellen, wo Du die Scripte ausführen lässt

bsp.
Code:
<%
dim aktion, sql
aktion = Request.Form("aktion") & Request.QueryString("aktion")
if aktion <> "" then
' --- Verbindungsaufbau zur Datenbank
select case aktion
case "insert"
	SQL = "insert into tabelle (feld1,feld2) Values (.....)"
case "update"
	SQL = "update tabelle set feld1 = ..... where id = ....."
case "delete"
	sql = "delete from Tabelle where id=...."
end select
Verbindung.execute(sql)
verbindung.close
set verbindung=nothing
Response.redirect "irgendeineSeite.asp"
else
Response.redirect "Fehlerseite.asp"
end if
%>

Du musst da jetzt eine Linie oder einen Grund reinbekommen. Die Scripte müssen übersichtlich sein nicht mitten im html-Code stecken.
 
Zuletzt bearbeitet:
Du hast etwas falsch verstanden. Der erste Code funktioniert problemlos, und dort muss auch keine action funktionieren. Die Weiterleitung ist an einem anderen Ort definiert.

Wenn ich im ersten File (speicherort.asp) auf bearbeiten klicke, wird auf das zweite File (speicherortupd.asp )weitergeleitet.

Ändere ich dort die Unterlagen und klicke auf Übernehmen werde ich wieder auf speicherort.asp weitergeleitet (also zurück). Und an diesem Punkt kommt die Fehlermeldung.

Für mich erscheint das nicht logisch, warum erscheint beim ersten Mal keine Fehlermeldung und wenn ich wieder zurück komme erscheint sie?
 
Meitli hat gesagt.:
Du hast etwas falsch verstanden. Der erste Code funktioniert problemlos, und dort muss auch keine action funktionieren. Die Weiterleitung ist an einem anderen Ort definiert.

Wenn ich im ersten File (speicherort.asp) auf bearbeiten klicke, wird auf das zweite File (speicherortupd.asp )weitergeleitet.

Ändere ich dort die Unterlagen und klicke auf Übernehmen werde ich wieder auf speicherort.asp weitergeleitet (also zurück). Und an diesem Punkt kommt die Fehlermeldung.

Für mich erscheint das nicht logisch, warum erscheint beim ersten Mal keine Fehlermeldung und wenn ich wieder zurück komme erscheint sie?

Hi

das kann durchaus sein, dass ich da was falsch verstanden haben. Ich bin mir auch total sicher, das Du weisst, worum es geht. Ich kann allerdings nicht hellsehen.

Du solltest mal in form action schauen, wohin die URLs hingehen, genauso wie der Link "bearbeiten". Ich kann nur Schlüsse ziehen, wenn ich den Scriptcode sehe und wenn ich den nicht komplett habe, kann ich mir einen Reim aus dem machen, was Du hier postest.
 
Ich hab dir im Anhang, die vollständigen Scripts angehängt. Wenn du Zeit hast, kannst du sie dir ja mal durch sehen!

Vielleicht ist es danach einfach meine Frage zu beantworten! :)
 

Anhänge

  • kspeicherort.txt
    11,5 KB · Aufrufe: 47
  • kspeicherortupd.txt
    11 KB · Aufrufe: 46
Zuletzt bearbeitet von einem Moderator:
Hi

schau Dir diesen Part Deines Scirpts mal an.
Entnommen aus der Seite kspeicherortupd.asp

Die entsprechenden Stellen habe ich mal rot markiert.
Schau, wohin das Formular geschickt wird und schau, wo die Abfrage zum Update gespeichert ist.

<%

if Request("action") = "upd" then

'if Request("sUnter") <> 0 then
'Set rskt = KPLcon.Execute("Update Kursunterlagen SET UnterlagenID=" & Request.Form("UnterlagenID") & " WHERE KursunterlagenID=" & Request.Form("KursunterlagenID") & "")
'else
'Set rsL2 = KPLcon.Execute("DELETE FROM Kursunterlagen WHERE KursunterlagenID = " & Request("KursunterlagenID") & "")

'Set rskt = KPLcon.Execute("INSERT INTO Kursunterlagen (KursunterlagenID, KursID, UnterlagenID) VALUES (" & Request("KursunterlagenID") & ", '" & Request("KursID") & "', '" & Request("UnterlagenID") & "')")
'end if

Set rsupd = KPLcon.Execute("Update Kursunterlagen SET UnterlagenID=" & Request.Form("UnterlagenID") & " WHERE KursunterlagenID=" & Request.Form("KursunterlagenID") & "")

end if

Set rs = KPLcon.Execute("SELECT * FROM Kursunterlagen WHERE KursunterlagenID = " & Request("KursunterlagenID") & "")
%>
</font> </p>
<form name="form1" method="post" action="kspeicherort.asp?KursID=<%response.write(rsK("KursID"))%>" onSubmit="return chkForm()" ID="Form1">
<font face="Arial, Helvetica, sans-serif" size="2">
<input type="hidden" name="action" value="upd" ID="Hidden1">
</font>

Bitte nicht übel nehmen, aber den Scriptcode kannst Du echt beerdigen. Du hast mit Sicherheit weniger Probleme, wenn Du es korrekt neu schreibst. :(
 

Neue Beiträge

Zurück