tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
1103
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Apr 2005
    Ort
    Schwabenländle
    Beiträge
    499
    Nachdem ich mich nun gut über eine Woche durch "ASP für Dummies" gelesen hab wollt ich nun mal mein erster, eigenes kleines 'Projekt' ausprobieren - ganz ohne DW

    Das Anzeigen der Einträge hat nach kurzem (oder auch längerem ) Probieren/Problemen dann endlich einwandfrei geklappt.
    Aber nun bekomm ichs absolut nicht fertig einen neuen Eintrag hinzuzufügen

    Hier mal mein Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    
    <% Option Explicit %>
    <!-- #include file="adovbs.inc" -->
    <html>
    <head>
    <title>Gästebuch</title>
    </head>
     
    <body>
    <b>Eintrage:</b><p>
    <% 
    If Request("Name") = "" And Request("eMail") = "" And Request("Message") = "" Then
    %>
    Bitte alle Pflichtfelder ausfüllen.
    <p> 
    <form action="gb.asp" method="post" name="add" id="add">
      <table width="40%" border="0" cellspacing="1" cellpadding="1">
        <tr> 
          <td>Name:</td>
          <td><input name="Name" type="text" id="Name"></td>
        </tr>
        <tr> 
          <td>eMail:</td>
          <td><input name="eMail" type="text" id="eMail"></td>
        </tr>
        <tr> 
          <td>URL:</td>
          <td><input name="URL" type="text" id="URL"></td>
        </tr>
        <tr> 
          <td>Message:</td>
          <td><textarea name="Message" id="Message"></textarea></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td><input type="submit" name="Submit" value="Eintragen"></td>
        </tr>
      </table>
    </form>
    <% Else %>
    <%
    Dim Connect, NewPost
    Set Connect = Server.CreateObject("ADODB.Connection")
    Connect.Open "gbook"
    Set NewPost = Server.CreateObject("ADODB.Recordset")
    NewPost.Open "SELECT * FROM gb"
        Connect.adOpenDynamic,adLockOptimistic
    NewPost.AddNew
    NewPost("Name") = Request("Name")
    NewPost("eMail") = Request("eMail")
    NewPost("URL") = Request("URL")
    NewPost("Message") = Request("Message")
    NewPost("Datum_Zeit") = Date
    NewPost.Update 
    %>
    <% End if %>
     
    <p> 
    <p>
    <b>Einträge:</b><p>
    <%
    Dim Connect2, GB
    Set Connect2 = Server.CreateObject("ADODB.Connection")
    Connect2.Open "gbook"
    Set GB = Connect2.Execute("SELECT * FROM gb ORDER BY Datum_Zeit DESC")
    Do Until GB.EOF %>
    <table width="40%" border="0" cellspacing="1" cellpadding="1">
      <tr> 
        <td> 
          <a href="mailto:<% = GB("eMail") %>"><% = GB("Name") %></a>
          schrieb am 
          <% = GB("Datum_Zeit") %>
          :</td>
        <td><a href="<% = GB("URL") %>" target="_blank">URL</a><br></td>
      </tr>
      <tr> 
        <td> 
          <% = GB("Message") %>
        </td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td><% = GB("Kommentar") %></td>
        <td>&nbsp;</td>
      </tr>
    </table>
    <p> 
      <% GB.MoveNext
    Loop %>
    </body>
    </html>

    Sobald ich einen Eintrag machen will, bekomm ich folgende Fehlermeldung:

    Fehlertyp:
    ADODB.Recordset (0x800A0E7D)
    The connection cannot be used to perform this operation. It is either closed or invalid in this context.
    /dummies/myGB/gb.asp, line 45

    Line 45 (rot markiert):

    Dim Connect, NewPost
    Set Connect = Server.CreateObject("ADODB.Connection")
    Connect.Open "gbook"
    Set NewPost = Server.CreateObject("ADODB.Recordset")
    NewPost.Open "SELECT * FROM gb"
    Connect.adOpenDynamic,adLockOptimistic
    NewPost.AddNew
    NewPost("Name") = Request("Name")
    NewPost("eMail") = Request("eMail")
    NewPost("URL") = Request("URL")
    NewPost("Message") = Request("Message")
    NewPost("Datum_Zeit") = Date
    NewPost.Update

    So, was hab ich denn da nun wieder verbockt?
     

  2. #2
    Lord-Lance Tutorials.de Gastzugang
    Ich kenne die Art nicht wirklich wie du das machen willst, aber meiner Meinung nach solltest du mit INSERT INTO arbeiten und nicht mit SELECT * FROM.
     

  3. #3
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hi

    versuchs mal so.
    Wenn Du einen DS per ADO einfügst, sollstest Du immer eine Bedingung mitgeben, die nie erfüllt werden kann (where 1<0)

    dim sql
    sql="SELECT * FROM gb where 1<0"
    NewPost.Open sql,Connect,adOpenStatic,adLockOptimistic
     
    liebe Grüße, die Luzie

  4. #4
    Registriert seit
    Apr 2005
    Ort
    Schwabenländle
    Beiträge
    499
    Danke, es klappt
    Hab noch festgestellt, dass ich die and's in der If... Else... Schleife gehen or austauschen musste

    Gibts für die mitgegebene Bedingung irgend eine plausible Erklärung?
    Funktionieren tuts jetzt ja, aber schlauer bin ich deswegen noch nicht
     

  5. #5
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hi

    es lag aber jetzt nicht an der Bedingung, es hätte auch ohne funktionieren können. Es ist nur besser, wenn man die Bedingung setzt, denn nur so stellt damit sicher, das absolut kein Datensatz zurückgegeben werden kann, denn 1< 0 gibts nie. Du willst ja einen Datensatz einfügen und nicht selectieren.

    Dein Fehler lag aber woanders

    Du hattest zwischen Connect und der 1. Konstanten einen Punkt. Dort gehört aber ein Komma hin. Und ob da jetzt ein Zeilenumbruch war, kann ich nicht feststellen. Es gehört aber eigentlich in eine Zeile von Open angefangen bis zum Aufruf der letzten Konstanten.
    Geändert von Luzie (07.06.05 um 18:16 Uhr)
     
    liebe Grüße, die Luzie

  6. #6
    Registriert seit
    Apr 2005
    Ort
    Schwabenländle
    Beiträge
    499
    oller Punkt
    So viel Wirbel wegen so nem kleinen Ding

    Entweder wars (mal wieder) ein Tippfehler im Buch oder ich hab mich tatsächlich vertippt...

    Das wird mir denk ich jetzt kein zweites Mal mehr passieren

    Naja, immerhin, es wird

    Danke nochmal
     

  7. #7
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Huhu

    also Tippfehler in Büchern, die für Anfänger geschrieben sind, sind wirklich schlimm.

    Ich habe vor Jahren auch mal an mir selbst gezweifelt, bis ich feststellen musste, dass es nicht an mir lag sondern an einem Tippfehler im Scriptcode eines Buches.

    Gut sind Bücher mit praktischen Beispielen auf einer mitgelieferten CD. Da kann man davon ausgehen, dass sie durchgetestet sind und funktionieren.
     
    liebe Grüße, die Luzie

  8. #8
    Registriert seit
    Apr 2005
    Ort
    Schwabenländle
    Beiträge
    499
    Wie müsste ich das Script eigentlich umschreiben, falls ich INSERT INTO verwenden wollte?
    In meinen Büchern steht nur dass ich es anstatt addNew nehmen kann, aber es wird nicht erklärt wie ('tolle' Bücher )
    Hier und google bin ich auch schon durch, hab aber nichts gefunden, was ich annährend verstanden hätte...
     

  9. #9
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hi

    mit Sicherheit ist es wichtig zu wissen, wie man einen Datensatz auch per insert into einfügt. Auch SQL update und delete sind wichtig.

    Man kann teilweise mit der SQL-Methode mehr machen, z.B. kannst Du Dir per insert into direkt einen bestimmten Datensatz aus einer Tabelle selectieren und in eine andere einfügen. Ganz gut nachlesen kannst Du es hier:
    http://www.asphelper.de/ASPKurs/A400101.asp, aber nur die Grundlagen, reicht aber in den meisten Fällen.

    Im Allgemeinen heißt es, dass die ADO-Methode performanter ist. Ich wiess es nicht. Ich nutze meistens die ADO-Methode, denn hier hast Du auch die Möglichkeit, Dir direkt die ID des neu eingefügten Datensatzes anzeigen zu lassen um ggfs. den Datensatz direkt weiterzuverarbeiten bzw. auf dem Bildschirm auszugeben.
     
    liebe Grüße, die Luzie

  10. #10
    Registriert seit
    Apr 2005
    Ort
    Schwabenländle
    Beiträge
    499
    Update hab ich hinbekommen.. aber an Delete beiß ich mir seit 2 Tagen die Zähne aus

    Hab ne Übersicht erstellt und die ganzen Einträge in ner Do Until.. Loop.. Schleife auflisten lassen...
    Davon hat nun jeder Eintrag nen Del-Button.. Nur bin ich mir momentan total unsicher, ob name=ID im Input Tag überhaupt da hin muss...
    und wenn ich dann nen Eintrag löschen will kommt ein Fehler, bzw. die Seite wird von Vornherein nicht angezeigt...

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    
    <% Sub ShowPosts(ID_GB,Name,eMail,URL,Message,Datum_Zeit,Kommentar) %>
    <table width="600px" border="1" cellspacing="1" cellpadding="1">
      <tr valign="top"> 
        <td>ID</td>
        <td>Datum</td>
        <td>Name</td>
        <td>Message</td>
        <td colspan="2"><center>Aktion</center></td>
      </tr>
      <% Do Until GB.EOF %>
      <tr valign="top"> 
        <td><%=ID_GB%></td>
        <td><%=Datum_Zeit%></td>
        <td><%=Name%></td>
        <td><%= Left (Message,25)%></td>
        <td>read/edit</td>
        <td> <form method="post" action="over.asp" name="del">
            <input type="submit" value="DEL" name="<%=ID_GB%>">
          </form></td>
      </tr>
      <% GB.MoveNext
    Loop %>
    </table>
    <% End Sub %>
    <%
    Dim GB, SQL, Connect2
    Set Connect2 = Server.CreateObject("ADODB.Connection")
    Connect2.Open "gbook"
    Set GB = Server.CreateObject("ADODB.Recordset")
    SQL = "SELECT * FROM gb ORDER BY ID_GB DESC"
    GB.Open SQL, Connect2
    ShowPosts GB("ID_GB"), GB("Name"), GB("eMail"), GB("URL"), GB("Message"), GB("Datum_Zeit"), GB("Kommentar")
    %>
    <% 
    Dim SQL2, Connect, GBdel
    Set Connect = Server.CreateObject("ADODB.Connection")
    Connect.Open "gbook"
    Set GBdel = Server.CreateObject("ADODB.Recordset")
    SQL2 = "DELETE FROM gb WHERE ID_GB" = Request.Form("DEL")
    GBdel.Open SQL2, Connect, adOpenDynamic, adLockOptimistic
    %>

    Da meckert er:
    Fehlertyp:
    ADODB.Recordset (0x800A0BB9)
    Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
    /dummies/myGB/over.asp, line 45

    -> GBdel.Open SQL2, Connect, adOpenDynamic, adLockOptimistic
     

  11. #11
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hi

    wenn Du ein Delete über die SQL ausführen willst, dann brauchst Du dafür kein Recordset. Du musst Statement mit
    verbindung.execute(sql)
    ausführen.

    bsp.

    if Request.Form("submit") = "wechdamit" then
    sql = "delete from tabelle where id = " & Request.Form("id")
    connect.execute(sql)
    connect.close
    set connect = nothing
    Response.redirect "seite.asp"
    end if

    Wenn Du eine oder mehrere Aktionen auf einer Seite abfragen möchtest, musst Du Dir überlegen, wie Du es machst. Einfach Formularabschicken und hoffen, dass es gelöscht wird, das geht nicht.

    Zuerst willst du ja alle Daten anzeigen, also muss diese Aktion ggfs. gar nicht belegt sein oder in der Else-Verzweigung einer Abfrage oder eines select case stecken.

    So und je nach dem, was Du machen möchtest, muss diese der Aktion mitgeteilt werden.
    Geändert von Luzie (10.06.05 um 21:18 Uhr)
     
    liebe Grüße, die Luzie

Ähnliche Themen

  1. Datensatz dazwischen einfügen
    Von beckersbesters im Forum PHP
    Antworten: 3
    Letzter Beitrag: 14.01.09, 09:49
  2. bei neuem Datensatz Mailnachricht senden
    Von julia29 im Forum PHP
    Antworten: 3
    Letzter Beitrag: 07.12.07, 09:51
  3. JS: alten Text beim Einfügen von neuem Überschreiben
    Von schutzgeist im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 05.09.07, 16:04
  4. smilies aus einem neuem Fenster einfügen
    Von Oli-bt im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 09.04.05, 13:53
  5. MySQL Datensatz per PHP einfügen. Fehler!
    Von ExtremeSnail im Forum PHP
    Antworten: 2
    Letzter Beitrag: 05.04.04, 11:01