Aktualisieren mehrerer Datensätze

redwing78

Mitglied
Hallo allerseits!
Ich bin auf der Suche nach einer Möglichkeit, die Werte mehrere Datensätze in einer Liste mit editierbaren Formularfeldern auszugeben und durch einen einzigen Klick zu speichern.
Eine Liste der Datensätze habe ich bereits vorbereitet: http://www.fckitz.at/admin/spieler.asp

Bin für jede Hilfe dankbar.
MFG redwing78
 

Luzie

Erfahrenes Mitglied
Hi

ich habe da schon mal ein Beispiel für ein update einer Spielertabelle hier gepostet, weiss aber nicht mehr wo. Ich hänge das Script mal an.

Folgende wichtige Dinge muss man berücksichtigen

Du Formularfeldnamen bekommen alle einen gleichen fortlaufenden Zähler angehängt, wenn Sie in der Schleife aufgerufen werden. Weiterhin wird die komplette Anzahl der Datensätze in ein verstecktes Feld geschrieben. Das wird beim Update als Durchlaufzähler benutzt.

Die Datensätze lässt man dann nach Aktion in einer For-Schleife updaten. Dies läuft für jeden Datensatz einmal durch. Also, wenn 11 Datensatze vorkommen, wird 11x executet.

Einfach mal testen.
 

Anhänge

  • update.txt
    2,3 KB · Aufrufe: 86

Luzie

Erfahrenes Mitglied
Hallo

er meldet, da ist ein Fehler in der Updateanwiesung. Dies einfach nochmal mit den erstellten Variablen überprüfen. Wenn Du NULL Felder abschickst, solltest Du einen Standardwert zum Einfügen festlegen.

"S0405GelbRot = " & e4S0405GelbRot & ", " & _
"S0405GelbRot = " & eS0405GelbRot & " where Kader='1mannschaft' AND SpielerID = " & eSpielerID & "

Als Spielername wird Dies bei Dir ausgegeben.
<% = rs(5)%>

Das ist wohl nicht das Feld für Spielernamen. Ich weiß auch nicht, ab er überhaupt in Deiner SQL existiert. :)
 

redwing78

Mitglied
Hi Luzie,
die Updateanweisung habe ich im Skript genau so, wie Du sie definiert hast.
Es sind genau diese 5 Felder, die aktualisiert werden sollen;
Spielernamen dienen lediglich zur Orientierung und sollen nicht editierbar sein.

Anstelle des bisherigen Codes für Spielernamen <% = rs(5)%>
habe ich natürlich schon <% = rs("Nachname)%> ausprobiert,
aber das funktioniert nicht.

LG, redwing78
 

Luzie

Erfahrenes Mitglied
Hi

meine Anweisung funktioniert ja auch, weil ich die Variablen und die Felder korrekt gesetzt haben.

Aber schau mal hier:

"S0405GelbRot = " & e4S0405GelbRot & ", " & _

erstmal kommt das Feld 2x vor in Deiner Anweisung und die Variable e4S0405GelbRot sehe ich nicht definiert bei Dir.

Wenn Du den spielernamen mit ausgeben willst, dann musst Du den natürlich auch im Select-Statement mit aufrufen.
 

redwing78

Mitglied
Hi! Danke für den Hinweis - habe das doppelte Feld S0405GelbRot ausgebessert.
Aber definiert habe ich es - siehe Seitenanfang unter dim; weiters ist es ja auch unter den definierten Formularen (request.form) angegeben.

Ich habe natürlich schon vor dem Posting versucht, die Variablen Nach- und Vorname in das Select-Statement einzubauen, aber das funktioniert nicht, da dann die Nach- und Vornamen in jeweils das erste und zweite Formularfeld eingesetzt werden, wo ja die fünf Werte pro Spieler zum Editieren stehen sollten!
So sieht das dann aus: http://www.fckitz.at/admin/spieler2.asp

LG, redwing
 

Luzie

Erfahrenes Mitglied
Hi

die Variable war nicht definiert.
Schau Dir dies nochmal an:

"S0405GelbRot = " & e4S0405GelbRot & ", " & _
"S0405GelbRot = " & eS0405GelbRot & " where Kader='1mannschaft' AND SpielerID = " & eSpielerID & "

einmal heißt es e4SO... und einmal eSO....

Ansonsten kann ich nix mehr dazu sagen. Du musst schon den Quellcode hier posten.
 

redwing78

Mitglied
Hi Luzie,
danke für die Feinheit - es stimmt, da war ein Tippfehler ('4') drin.
Im oberen Bereich der Datei steht als erstes die Datenbankverbindung,
anschließend die Definitionen und der SQL-Befehl.

Darunter die Schleife:
Code:
  <%
	sql = "select SpielerID,Nachname,Vorname,S0405Spiele,S0405Tore,S0405Gelb,S0405GelbRot,S0405Rot from Spieler WHERE Kader='1mannschaft'"
	Set RS = Server.CreateObject("ADODB.Recordset")
	RS.Open sql, objCon, 3,3
	dim  a
	counter = rs.recordCount
	a = 1
	%>
<h3>Tabelle updaten/hinzuf&uuml;gen </h3>
<form name="form1" method="post" action="<% = pfad %>">
  <table border="1">
    <tr>
      <td colspan="2"><b>Spieler</b></td>
      <td><strong>Felder</strong></td>
    </tr>
    <% while not rs.eof %>
    <tr>
      <td colspan="2">
        <% = rs(5)%><input name="SpielerID<% = a%>" type="hidden" value="<%= rs(0)%>">
  
        
      </td>
      <td>
        <input name="eS0405Spiele<% = a%>" type="text" value="<%= rs(1)%>" size="10">
        <input name="eS0405Tore<% = a%>" type="text" value="<%= rs(2)%>" size="10">
        <input name="eS0405Gelb<% = a%>" type="text" value="<%= rs(3)%>" size="10">
        <input name="eS0405GelbRot<% = a%>" type="text" value="<%= rs(4)%>" size="10">
        <input name="eS0405Rot<% = a%>" type="text" value="<%= rs(5)%>" size="10">

      </td>
    </tr>
    <% a = a + 1
	rs.movenext
	wend
	rs.close
	Set RS = Nothing
	%>

Ziel ist eigentlich (nur), in jeder Zeile links den Spielernamen anzuzeigen und rechts daneben die fünf Eingabeformulare zum Editieren anzubieten.
Wie kann man das arrangieren?
LG, redwing78
 

Luzie

Erfahrenes Mitglied
Hi

ich glaube, Du hast den Sinn des Aufrufs eines indexes noch nicht richtig verstanden.

Also am Beispiel Deines Select-Statements:

sql = "select SpielerID,Nachname,Vorname,S0405Spiele,S0405Tore,S0405Gelb,S0405GelbRot,S0405Rot from Spieler WHERE Kader='1mannschaft'"

im Select-Statement ruftst Du alle Felder auf, mit welchen Du später arbeiten möchtest.
Jedes Feld hat einen Namen und gleichzeitig auch einen index (fortlaufende Nummer, beginnend mit 0)

spielerID = 0
Nachname = 1
Vorname = 2
etc.

Das richtet sich IMMER danach, wie die Felder im Statement aufgeführt sind, also der Reihenfolge nach.. Nimmst Du anstelle dessen das berühmte *, dann richtet sich der index nach der Reihenfolge der in der Tabellen liegenden Felder.

Ein index beginnt mit 0, also das 1. Feld ist immer rs(0), wenn Dein Recordset rs heißt. Anstelle von rs(0) kannst Du auch den Namen des Feldes nehmen, hier rs("spielerid"), (auf Dein Beispiel bezogen). das kommt auf das geleiche heraus.

Was und wie man es letztlich programmiert, ist situationsbedingt. Ich z.B. nutze meist den Index, da meine Strukturen meist gleich sind und ich net so viel verändern muss, wenn ich sie woanders anwende.

Nochmal zur Lösung Deines Problems:
Das Feld Nachname könntest Du jetzt entweder mit rs(1) aufrufen oder mit rs("nachname"), Feld vorname mit rs(2) oder mit rs("vorname"), Feld S0405Spiele entweder mit rs(3) oder mit rs("S0405Spiele") etc.

Ich denke mal, Du wirst jetzt sehen, wo Dein Fehler genau liegt.
 
Zuletzt bearbeitet: