Glengamoi · AspHeute (Artikel) · .NET Heute (RSS-Suche) · .NET Blogs · Glengamoi Suche (Installieren via Klick)

Glengamoi

Die Diskussionsforen der deutschen .NET Community
Willkommen bei Glengamoi. Anmeldung | Registrieren | Hilfe
in Suchen

Bearbeiten von Einträgen in Access-Tabelle

Letzter Beitrag 08-16-2007 16:02 von PatriziaCavegn. 6 Antworten.
Seite 1 von 1 (7 Treffer)
Beiträge sortieren: Zurück Weiter
  • 08-16-2007 10:22

    Bearbeiten von Einträgen in Access-Tabelle

    Hallo zusammen, hoffe dass mir jemand bei meinem Problem weiterhelfen kann. Ich habe die Tabellen tabUser und tabKurs diese habe ich mit den ID’s in der Tabelle tabUserKursMatrix verknüpft. So kann sich ein User für einen Kurs anmelden, was dann in dieser tabUserKursMatrix festgehalten wird. Weiter habe ich dann eine Suchfunktion erstellt, welche ausgibt, welche Kurse ein User besucht hat. Dies funktioniert alles wunderbar.
    Nun möchte ich aber bei der Anmeldung noch eine Verwaltung einbauen. So dass es möglich ist über einen Radiobutton zu vermerken ob sich der User nur angemeldet hat, oder ob er den Kurs auch besucht hat. Hierfür habe ich in der tabUserKursMatrix ein entsprechendes Feld bitStatus erstellt. Die Programmierung zur Bearbeitung dieses Felds habe ich von der Bearbeitung der User übernommen und natürlich entsprechend angepasst.
    Will ich nun aber eine Änderung abspeichern, so erhalte ich die folgende Fehlermeldung:
    Fehrlermeldung:

    Microsoft JET Database Engine error '80004005'

    You cannot add or change a record because a related record is required in table 'tabUser'.

    /schulungsverwaltung/sqlStatus.asp, line 50

     

    Ist es mir nicht möglich in der tabUserKursMatrix  einträge zu bearbeiten? Muss ich dabei etwas bestimmtes beachten, was bei den Usern nicht nötig ist?

     

    Was ich noch erwähnen muss ist, einen Eintrag zu löschen in der tabUserKursMatrix löst keinen Fehler aus, nur das Bearbeiten.

     

    Hoffe man versteht in ungefähr mein Problem. Kann mir jemand weiterhelfen?

     

    Gruss

    Patrizia

     

    Abgelegt unter: ,
    • IP-Adresse ist Registriert
  • 08-16-2007 10:33 Antwort zu

    AW: Bearbeiten von Einträgen in Access-Tabelle

    Hallo,

    das Problem ist klar, du hast 3 Tabellen um eine n:m-Beziehung zu realisieren. Grundsätzlich müsstest du die mittlere Tabelle auch Bearbeiten können. Die Änderung im Recordset hast du vielleicht mit AddNew eingeleitet?

    Sonst poste mal den entscheidenden Code.

    Grüße, Arno.

    • IP-Adresse ist Registriert
  • 08-16-2007 13:50 Antwort zu

    AW: Bearbeiten von Einträgen in Access-Tabelle

     Ja, natürlich.
    Ich habe hier den Code vom sqlStatus und vom editStatus. Auf der Seite editStatus werden die Änderungen eingetragen und beim betätigen des "speichern" Buttons wird man auf die Seite sqlStatus verwiesen, wo die Bearbeitungen definitiv in die Tabelle eingetragen werden.

     Hinweis: Einige "Teile" habe ich beim testen auskommentiert, um mich besser auf die Fuktionalität konzentrieren zu können

     

    sqlStatus:

    <%


     Set conMain = Server.CreateObject("ADODB.Connection")
     conMain.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("schulung.mdb") & ";"


     
     lngPersonKursMatrixID = Request("lngPersonKursMatrixID")
     strBemerkung = Request("strBemerkung")
     'bitStatus = Request("bitStatus")
     
     If lngPersonKursMatrixID <> "" Then
      sSql = "Update tabUserKursMatrix set strBemerkung = '" & strBemerkung & "'' where lngPersonKursMatrixID = " & lngPersonKursMatrixID 

      conMain.Execute(sSql)
      
        
      sSql = "SELECT tabUser.lngUserID, tabUser.strVorname, tabUser.strNachname, tabUser.intNummer, tabKurs.strKursbezeichnung, tabKurs.strVon, tabUserKursMatrix.bitStatus, tabUserKursMatrix.strBemerkung, tabUserKursMatrix.lngPersonKursMatrixID "
      sSql = sSql & "FROM tabKurs INNER JOIN (tabUser INNER JOIN "
      sSql = sSql & "tabUserKursMatrix ON tabUser.lngUserID = tabUserKursMatrix.lngUserID) "
      sSql = sSql & "ON tabKurs.lngKursID = tabUserKursMatrix.lngKursID where 1 = 1 order by strNachname asc"
        
     Else
      sSql = "Insert into tabUserKursMatrix (strBemerkung  ) values ("
      sSql = sSql & "'" & strBemerkung & "') "
      'sSql = sSql & bitStatus & ")"
      
      
      conMain.Execute(sSql)
     End If
     
     conMain.Close
     Set conMain = Nothing
     
     Response.Redirect("verwaltung.asp")
     
     
    %>

    editStatus:

    <%
     lngPersonKursMatrixID = Request("lngPersonKursMatrixID")
     
     If lngPersonKursMatrixID <> "" Then
      Set conMain = Server.CreateObject("ADODB.Connection")
      conMain.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("schulung.mdb") & ";"
      
      sSql = "Select strBemerkung, bitStatus from tabUserKursMatrix where lngPersonKursMatrixID = " & lngPersonKursMatrixID
      
      Set rsData = conMain.Execute(sSql)
      
      If Not rsData.EOF Then
       'intNummer = rsData("intNummer")
       'strNachname = rsData("strNachname")
       'strVorname = rsData("strVorname")
       strBemerkung = rsData("strBemerkung")
       bitStatus = rsData("bitStatus")
       If bitStatus = True Then
        strJaChecked = " checked"
        strNeinChecked = ""
       Else
        strJaChecked= ""
        strNeinChecked = " checked"
       End If
       
      End If
      rsData.Close
      Set rsData = Nothing
      conMain.Close
      Set conMain = Nothing
     End If
    %>
    </head>
    <body>
    <p class="contentheading">Status verwalten</p>
    <p class="clr">Bitte setze Sie den Status auf besucht wenn der Kurs absolviert wurde. <br />
    Gibt es bemerkungen zu machen, so notieren Sie diese bei "Bemerkung". </p>
    <p>&nbsp;</p>
    <form name="frmStatus" method="post" action="sqlStatus.asp">
    <table width="459" border="0">
      <tr>
        <th width="206" scope="row"><div align="right"></div></th>
        <td width="20">&nbsp;</td>
        <td width="219"><div align="left"></div></td>
      </tr>
      <tr>
        <th scope="row"><div align="right"></div></th>
        <td>&nbsp;</td>
        <td><div align="left"></div></td>
      </tr>
      <tr>
        <th scope="row"></th>
        <td>&nbsp;</td>
        <td><div align="left">
          <input type="hidden" name="lngUserID" value="<%= lngPersonKursMatrixID %>" />
              </div></td>
      </tr>
      <tr>
        <th scope="row"><div align="right">Bemerkung</div></th>
        <td>&nbsp;</td>
        <td><div align="left">
          <input type="text" name="strBemerkung" value="<%= strBemerkung %>" width="100" maxlength="255" />
        </div></td>
      </tr>
     
      <tr>
        <th scope="row"><div align="right">Status</div></th>
        <td>&nbsp;</td>
        <td><div align="left">
          <input type="radio" name="bitStatus" value="1"<%= strJaChecked %>>&nbsp;besucht
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
     <input type="radio" name="bitStatus" value="0"<%= strNeinChecked %>>&nbsp;angemeldet<br>
        </div></td>
       </tr>
         <td>
          <div align="center">
            <input type="button" name="btnAbschicken" value="Speichern" onclick="javascript:fctAbschicken();" />
        </div></td>
      </tr>
    </table>
    </form>  
    </body>
    </html>
    <script language="javascript">
     function fctAbschicken() {
        document.frmStatus.submit();
     }
    </script>

     

    Gruss

    Patrizia

    • IP-Adresse ist Registriert
  • 08-16-2007 14:53 Antwort zu

    AW: Bearbeiten von Einträgen in Access-Tabelle

    Der Code passt jetzt nicht ganz mit deiner ursprünglichen Fragestellung zusammen.
    Aber ich vermute, dass du ebenso in der Matrix-Tabelle der MDB ein Feld strBemerkung hast, welches du updaten willst.
    In welcher Zeile tritt jetzt der Fehler auf? Aber ich glaube es auch schon so gefunden zu haben ....

    Fangen wir vorne in editStatus.asp an:
    Du belegst am Anfang lngPersonKursMatrixID aus dem Request des Querystrings. Schreibe eindeutiger: Request.QueryString("lngPersonKursMatrixID")

    Die ID wird dann versteckt im Formular angezeigt, okay. Der name ist aber wahrscheinlich nicht korrekt:
    <input type="hidden" name="lngUserID" value="<%= lngPersonKursMatrixID %>" />

    In der sqlStatus.asp belegst du wieder die Variable lngPersonKursMatrixID = Request("lngPersonKursMatrixID")
    Die URL enthält aber jetzt den Parameter nicht mehr, daher wird die ID leer bleiben.
    Diese musst du aus dem Formularfeld holen: lngPersonKursMatrixID = Request.Form("lngUserID")
    Ebenso bei der bemerkung entsprechend: strBemerkung = Request.Form("strBemerkung")

    Eigentlich sollte dann auch das Update im ersten If-Zweig funktionieren, wenn du noch das überflüssige einfache Anführungszeichen entfernst in:
      sSql = "Update tabUserKursMatrix set strBemerkung = '" & strBemerkung & "'' where lngPersonKursMatrixID = " & lngPersonKursMatrixID
    genau da: ...erkung & "'' wher...

    Die Fehlermeldung war sicher etwas irreführend, weil du durch die vorgenannten Probleme im else-Zweig gelandet sein wirst.
    Dort wird das insert nicht funktionieren, mit dem du einen neuen Datensatz anlegen würdest, weil die ID des Users fehlt.

    Mangels Möglichkeiten zum debuggen kannst du dir in solchen Fällen an passender Stelle zum Beispiel ein:

     Response.write "lngPersonKursMatrixID=" & lngPersonKursMatrixID
     Response.end()

    einbauen. Dann müsste eigentlich schnell klar sein, dass dir die ID unterwegs verloren gegangen ist ;-)

     

    Grüße, Arno.

     

    Abgelegt unter: ,
    • IP-Adresse ist Registriert
  • 08-16-2007 15:04 Antwort zu

    AW: Bearbeiten von Einträgen in Access-Tabelle

    Die schwammige Notation von Request( war mir auch nicht mehr präsent, daher habe ich gegoogelt und möchte dir den Link nicht vorenthalten:

    http://www.aspextra.de/asp/praxis/Request_Objekt_in_ASP.html

     

    • IP-Adresse ist Registriert
  • 08-16-2007 15:26 Antwort zu

    AW: Bearbeiten von Einträgen in Access-Tabelle

    Vielen Dank erstmals für deine Hilfe.

     Ja, sorry wegen der Änderung. Der Status ist eigentlich das wesentliche und die Bemerkung schön zu haben. Da mir allerdings Textfelder (strBemerkung) lieber sind zum Programmieren, habe ich die Priorität beim Testen geändert.

     Den Fehler meldet er für die Zeile:
    conMain.Execute(sSql)

    Das Problem scheint aber tatsächlich die ID zu sein. Denn schon wenn ich die Überprüfung der ID (lngPersonKursMatrixID) zu Beginn der Seite mache, enthält sie keinen Wert!

    Beschäftige mich nochmals damit, und melde mich dann nochmals, sobald ich Neuigkeiten habe :o)

     

    Gruss
    Patrizia

    • IP-Adresse ist Registriert
  • 08-16-2007 16:02 Antwort zu

    AW: Bearbeiten von Einträgen in Access-Tabelle

    Hurra, es funktioniert nun tatsächlich!

     Der Fehler lag in der von dir genannten Zeile, wo der name falsch gesetzt war!
    <input type="hidden" name="lngUserID" value="<%= lngPersonKursMatrixID %>" />

     Da hätte ich den Fehler wohl noch lange in sqlStatus suchen können.

     Nochmals vielen Dank für deine Hilfe Arno.

    Grüsse
    Patrizia

    • IP-Adresse ist Registriert
Seite 1 von 1 (7 Treffer)