Doppelte Einträge in der Datenbank verhindern

M

Meitli

Hi,

Ich habe eine Form wo neue Unterlagen zu einem Kurs hinzugefügt werden können.

Ziel sollte sein, dass überprüft wird ob diese Unterlage in diesem Kurs sich schon in der Datenbank befindet, wenn ja eine Fehlermeldung erscheint, wenn nein neu eingetragen wird.

Die Tabelle in der Datenbank sieht so aus. Es gibt 3 Spalten. KursunterlagenID, KursID, UnterlagenID.

Hier die FORM

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;
                      <input type="hidden" name="UnterlagenID" value=<%Response.Write(Request.Form("UnterlagenID"))%> ID="Hidden2">
                       </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>


Hier der Code zur Überprüfung, welcher ich bisher versucht habe:
Code:
'Wenn Formular neue Unterlagen hinzufügen abgesendet
if Request.Form.Count>0 then
	
	Set rs = KPLcon.Execute("SELECT * FROM Kursunterlagen WHERE KursID = " & Request("KursID") & " AND UnterlagenID = Request.Form(" & UnterlagenID & ") ")
		
			if rs.eof then
			
			Set rs = KPLcon.Execute("INSERT INTO Kursunterlagen (KursID, UnterlagenID) VALUES (" & Request.Form("KursID") & ", " & Request.Form("sUnter") & ")")
			
			else
			
			
			%>
			'<script type="text/javascript">
			'alert("Diese Unterlage ist schon vorhanden");
			'</script>
			<%
			
			end if

end if

Ich denke der Fehler liegt bei der Select-Abfrage (rot makiert).
Oder ist mein Ansatz ganz falsch? :confused:
Kann mir jemand bitte weiter helfen?
 
Hi

richtig wäre

Set rs = KPLcon.Execute("SELECT * FROM Kursunterlagen WHERE KursID = " & Request("KursID") & " AND UnterlagenID = " & Request.Form("UnterlagenID") & ")

Auch der Request.Form() ist eine Variable und muss im Statement entsprechend behandelt werden.

Zur Frage:
Der Ansatz ist so korrekt.

Ich würde Ergebnisse aus einem Select über ein Recordset erfragen.
 
Code:
Set rs = KPLcon.Execute("SELECT * FROM Kursunterlagen WHERE KursID = " & Request("KursID") & " AND UnterlagenID = " & Request.Form("UnterlagenID") & " ")

Das rot makierte Hochkomma fügte ich noch ein, da es bei dir gefehlt hat. Doch jetzt bekomm ich folgende Fehlermeldung:

Microsoft OLE DB Provider for ODBC Drivers-Fehler '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntaxfehler (fehlender Operator) in Abfrageausdruck 'KursID = 259 AND UnterlagenID = ''

/kspeicherort.asp, Line 217

Line 217, ist genau diese Datenbankabfrage!

Ich vermute der Fehler liegt beim Abrufen der Variabel UnterlagenID. Bin mir jedoch nicht sicher...
 
Hi

einfacher zu lesen ist es, wenn Du so schreibst:

Code:
sql = "SELECT * FROM Kursunterlagen WHERE KursID = " & Request("KursID") & " AND UnterlagenID = " & Request.Form("UnterlagenID") 
Set rs = KPLcon.Execute(sql)
 
1. am Ende eines Select-Statements kommt doch immer ein Hochkomma hin, hast du es einfach vergessen?

2. Es kommt immer noch die Fehlermeldung von vorher

Lg Meitli
 
Hab gerade gemerkt, dass ich falsch überlegt habe. Dein Code stimmt.

Die Fehlermeldung

Microsoft OLE DB Provider for ODBC Drivers-Fehler '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntaxfehler (fehlender Operator) in Abfrageausdruck 'KursID = 259 AND UnterlagenID = ''

/kspeicherort.asp, Line 217

erscheint aber immer noch. Und an diesem Fehler bin ich im Moment. Wie schon Oben erklärt, glaube ich das es an der Variabel UnterlagenID liegt, bin mir jedoch nicht sicher...
 
Hi

wenn UnterlagenID vom Feldformat text oder char, varchar.. ist, dann muss die Variable gequotet werden. Aber das kann ich ja nicht wissen, das weist nur Du ;)

Und wenn es vom Format text ist, dann musst Du die Hochkomma setzen, und zwar vor und nach den Anführungszeigen.

Allerdings müsste in dem Falle die Fehlermeldung anders lauten.

Ich gehe mal davon aus, dass die Variable nicht übertragen wird, den Grund dafür kann man allerdings erst sehen, wenn Du mal Script und Formular Scriptcode postest.
 
Hei Luzie

Als erstes Danke, für deine Hilfe bisher... :p

Jetzt zur Datenbank:

UnterlagenID ist als Zahl definiert, da dieses Feld eine Verknüpfung zu einer weiteren Tabelle hat.

Im Anhang befindet sich der vollständige Scriptcode, hoffe du kannst mir, wenn du dir in angesehen hast, weiterhelfen.

Lg Meitli
 

Anhänge

  • kspeicherort.zip
    3,1 KB · Aufrufe: 19
Hallo

Da fehlen um value die Anführungszeichen, also value="<%...%>">. Da könnte der Fehler liegen, zumindest beim Mozilla.

Ansonsten mach einfach mal testweise ein textfeld daraus. Du musst einfach mal prüfen, ob dieses Feld überhaupt belegt ist.

<input type="text" name="UnterlagenID" value="<%Response.Write(Request.Form("UnterlagenID"))%>">

Wo kommt der Wert her? auch aus einem Formular oder einer URL?

Mach mal folgendes:

Code:
<%
dim intUnterlagenID
intUnterlagenID = Request.Form("unterlagenID") & Request.QueryString("unterlagenID")
%>
<input type="text" name="UnterlagenID" value="<% = inUnterlagenID %>">
 
Zuletzt bearbeitet:
Also die Anführungszeichen habe ich eingefügt, diese haben aber keine Veränderung gebracht.

Der INPUT habe ich in ein Textfeld geändert, dort erscheint aber nichts.

UnterlagenID kommt aus dem Formular. Man wählt die Unterlage, und diese hat eben auch eine ID (UnterlagenID) und diese muss wiederum überprüft werden.

Hoffe du komst mit, sonst sag es und ich versuch es auf eine andere Weise zu erklären.

Was ich fast vergessen hätte: Wo muss ich deine Code einfügen? Spielt das eine Rolle?
 
Zurück