EfkA: Warum kommt - Entweder BOF oder EOF ist True - beim 1.Aufruf?

Hallo erstmal,

ich habe 2 Optionsfelder mit Begriffen zum auswählen.
Diese ausgewählten Begriffe werden dann in die Db eingetragen,
nachdem der submit-button geklickt wird.

Ich erhalte dann aber immer zuerst auf der AusgabeSeite.asp:
----------------------------------------------------------
ADODB.Field-Fehler '80020009'

Entweder BOF oder EOF ist True, oder der aktuelle Datensatz wurde gelöscht; die von der Anwendung angeforderte Operation benötigt einen aktuellen Datensatz.

?
----------------------------------------------------------

Nachdem ich die Seite aktualisere (mit F5 bei IE) erscheint die Auflistung der ausgewählten Begriffe. Warum aber erst beim 2.Mal?

Jemand das Problem bekannt? Danke.

EfkA

  1. Hallo EfkA,

    [...]

    ich habe 2 Optionsfelder mit Begriffen zum auswählen.
    Diese ausgewählten Begriffe werden dann in die Db eingetragen,
    nachdem der submit-button geklickt wird.

    Passiert die Eintragung auf derselben Seite die auch die Ausgabe erzeugt.

    Ich erhalte dann aber immer zuerst auf der AusgabeSeite.asp:

    ADODB.Field-Fehler '80020009'

    Entweder BOF oder EOF ist True, oder der aktuelle Datensatz wurde gelöscht; die von der Anwendung angeforderte Operation benötigt einen aktuellen Datensatz.

    Die Fehlermeldung besagt, dass kein Datensatz gefunden wurde.
    Mit einer Prüfung lässt sich zumindest der Fehler abfangen:

    <%
    If Not rs.EOF Then
        ' --- Alles OK, mind. 1 Datensatz gefunden
        ...
        Else
            Response.Write "Kein Datensatz gefunden"
    End if
    %>

    [...]

    Nachdem ich die Seite aktualisere (mit F5 bei IE) erscheint die Auflistung der ausgewählten Begriffe. Warum aber erst beim 2.Mal?

    [...]

    Hierzu wäre der Quellcode der Seite(n) ganz nützlich.
    Wenn der Eintrag noch nicht in die Datenbank eingetragen wurde
    oder die Datenbank noch nicht aktualisiert wurde, kann obiger
    Fehler auftreten. Bei grossen Datenbanken dauert es manchmal
    etwas, bis der Satz vollständig in der DB steht, die Abfrage
    aber schon ausgeführt wird und der Satz daher (noch) nicht
    gefunden werden kann.

    Tschau, Stefan

    1. Hallo EfkA,

      [...]

      ich habe 2 Optionsfelder mit Begriffen zum auswählen.
      Diese ausgewählten Begriffe werden dann in die Db eingetragen,
      nachdem der submit-button geklickt wird.

      Passiert die Eintragung auf derselben Seite die auch die Ausgabe erzeugt.

      Ich erhalte dann aber immer zuerst auf der AusgabeSeite.asp:

      ADODB.Field-Fehler '80020009'

      Entweder BOF oder EOF ist True, oder der aktuelle Datensatz wurde gelöscht; die von der Anwendung angeforderte Operation benötigt einen aktuellen Datensatz.

      Die Fehlermeldung besagt, dass kein Datensatz gefunden wurde.
      Mit einer Prüfung lässt sich zumindest der Fehler abfangen:

      <%
      If Not rs.EOF Then
          ' --- Alles OK, mind. 1 Datensatz gefunden
          ...
          Else
              Response.Write "Kein Datensatz gefunden"
      End if
      %>

      [...]

      Nachdem ich die Seite aktualisere (mit F5 bei IE) erscheint die Auflistung der ausgewählten Begriffe. Warum aber erst beim 2.Mal?
      [...]

      Hierzu wäre der Quellcode der Seite(n) ganz nützlich.
      Wenn der Eintrag noch nicht in die Datenbank eingetragen wurde
      oder die Datenbank noch nicht aktualisiert wurde, kann obiger
      Fehler auftreten. Bei grossen Datenbanken dauert es manchmal
      etwas, bis der Satz vollständig in der DB steht, die Abfrage
      aber schon ausgeführt wird und der Satz daher (noch) nicht
      gefunden werden kann.

      Tschau, Stefan

      Danke erstmal, aber der Fehler bleibt leider bestehen:

      Der Quelltext der Auswahlseite sieht so aus:

      --------------------------------------------------------------------
      <% Response.Buffer=false %>
      <% Response.Expires=0 %>
      <!-- #include file=".\handle.asp"-->
      <!-- #include file=".\htdGrund.asp"-->
      <!-- #include file="formularhandler-.asp" -->

      <%  
      set db2=OpenDB ("adressen")
      set db=OpenDB ("Newsletter")
      insertHEAD(true)

      Hauptgruppe=request.Form("Hauptgruppe")  
      if Hauptgruppe="" then Hauptgruppe=0   
      Untergruppe=request.Form("Untergruppe")  
      if Untergruppe="" then Untergruppe=0   
      Firma=request.Form("Firma")   
      Anschrift=request.Form("Anschrift")   
      PLZ=request.Form("PLZ")   
      Ort=request.Form("Ort")   
      Telefon=request.Form("Telefon")  
      Fax=request.Form("Fax")   
      URL=request.Form("URL")   
      Email=request.Form("Email")  
      

      %>

      <table width="750" border="0" cellspacing="1" cellpadding="1" align="center">
      <tr>
      <td width="17%" valign="top">
      <% linkeSpalte(true) %>
      </TD>
      <td valign="top" align="center">
      <img src="images\herstellerliste-banner.gif"><br>
      <table cellspacing="1" cellpadding="5" align="center" width="460">
      <tr>
      <td colspan="2">
      <span class="impressum">Kategorisieren Sie Ihr Unternehmen mit Hilfe von Haupt- und Untergruppe.</span>
      </td>
      </tr>

      <form action="herstellerkategorien.asp" name="auflisten" method="POST">
      <input type="hidden" name="Firma" value="<%=Firma%>">
      <input type="hidden" name="Anschrift" value="<%=Anschrift%>">
      <input type="hidden" name="PLZ" value="<%=PLZ%>">
      <input type="hidden" name="Ort" value="<%=Ort%>">
      <input type="hidden" name="Telefon" value="<%=Telefon%>">
      <input type="hidden" name="Fax" value="<%=Fax%>">
      <input type="hidden" name="URL" value="<%=URL%>">
      <input type="hidden" name="Email" value="<%=Email%>">
      <tr>
      <td colspan="2">
      <span class="anmeldung">Hauptgruppe:</SPAN><br>

      <% set rs=db.Execute("SELECT bezeichnung,hauptgruppe FROM gruppen WHERE untergruppe=0") %>
      <select class="small" name="Hauptgruppe" size="1" onChange="document.auflisten.submit();">

      <option value="0"> </option>
      <% do while not rs.eof %>
      <option value="<%=rs("hauptgruppe")%>" <%if rs("hauptgruppe")=Fix(hauptgruppe) then response.write("selected")%>><%=rs("bezeichnung")%></option>
      <%
      rs.MoveNext
      loop
      %>      
      </select><br>

      <span class="anmeldung">Untergruppe:</SPAN>
      <br>

      <% sql="SELECT bezeichnung,untergruppe FROM gruppen WHERE (untergruppe<>0) AND (hauptgruppe=" & hauptgruppe & ")" %>

      <% set rs=db.Execute(sql) %>

      <select class="small" name="Untergruppe" size="1" onChange="document.auflisten.submit();">
             ‚
      <option value="0"></option>

      <% do while not rs.eof %>
            
      <option value="<%=rs("untergruppe")%>" <%if rs("untergruppe")=Fix(untergruppe) then response.write("selected")%>><%=rs("bezeichnung")%></option>
      <%
      rs.MoveNext
      loop
      %>      
      </select>

      Hier werden also die option felder mit Untergruppe ausgewählt.
      ------------------------------------------------------------------

      ------------------------------------------------------------------
      Die Ausgabeseite sieht dann so aus:

      <%  
      Hauptgruppe=request.Form("Hauptgruppe")
      Untergruppe=request.Form("Untergruppe")
      Firma=request.Form("Firma")
      Anschrift=request.Form("Anschrift")
      PLZ=request.Form("PLZ")
      Ort=request.Form("Ort")
      Telefon=request.Form("Telefon")
      Fax=request.Form("Fax")
      URL=request.Form("URL")
      Email=request.Form("Email")

      set db=OpenDB ("newsletter")
      set dbAdressen=OpenDB("Adressen")
          
      insertHEAD(true)

      set rsHG1=dbAdressen.Execute("SELECT Bezeichnung,Hauptgruppe,HG1 FROM Gruppen,Hersteller WHERE HG1 LIKE Hauptgruppe AND Email LIKE '" &Email& "'")
      set rsUG1=dbAdressen.Execute("SELECT Bezeichnung,Untergruppe,UG1 FROM Gruppen,Hersteller WHERE HG1 LIKE Hauptgruppe AND UG1 LIKE Untergruppe AND Email LIKE '" &Email& "'")

      dbAdressen.Execute("UPDATE Hersteller SET HG1='" & Hauptgruppe & "' WHERE Email='"&Email&"'")  
      dbAdressen.Execute("UPDATE Hersteller SET UG1='" & Untergruppe & "' WHERE Email='"&Email&"'")  
      

      %>

      <table cellspacing="1" cellpadding="2" width="460">
           <tr>
            <td colspan="2">
            <% drawline %>
             <span class="impressum">Folgende Daten wurden für die Firma: </span><span class="black">
             <% response.write request.form("Firma")%></span><span class="impressum"> in unsere Herstellerliste aufgenommen:</span><br>
            </td>
           </tr>
      ...

      ...
      </table>

      <tr>
            <td colspan="2">
            <span class="pink">Hauptgruppe: </span><span class="news2"><% response.write rsHG1("Bezeichnung")%></span>
            <br><img src="images\ug.gif">
            <span class="pink">Untergruppe: </span><span class="news2"><% response.write rsUG1("Bezeichnung")%></span>
            </td><br>
           </tr>

      <% set db=nothing %>
      <% set dbAdressen=nothing %>

      --------------------------------------------------------------------

      Viel Text, aber das ist auch viel  Ballast drin. Der Hauptteil steht unten, wo die rs aufgerufen werden.

      Danke für die Unterstützung

      efKa

      1. Hallo EfkA,

        habe Deinen Code so gut es für einen aussenstehenden geht gelesen. Folgendes ist mir aufgefallen:
        --
        »»  Hauptgruppe=request.Form("Hauptgruppe")
        »»  if Hauptgruppe="" then Hauptgruppe=0
        »»  Untergruppe=request.Form("Untergruppe")
        »»  if Untergruppe="" then Untergruppe=0

        %>

        Hier bist Du von leerem String zur Zahl 0 gewechselt. Der VBScript-Variant machts möglich.

        <span class="anmeldung">Hauptgruppe:</SPAN>

        <% set rs=db.Execute("SELECT bezeichnung,hauptgruppe FROM gruppen WHERE untergruppe=0") %>

        In der DB wird dann nach der Zahl 0 gesucht. Woher hat aber Request.Form("Hautgruppe") den leeren String? Gut, der Wert kann NULL sein, aber ist das bei Dir so?

        Die Ausgabeseite sieht dann so aus:

        <%

        »»  Hauptgruppe=request.Form("Hauptgruppe")
        »»  Untergruppe=request.Form("Untergruppe")

        Ist dann ja 0

        set rsHG1=dbAdressen.Execute("SELECT Bezeichnung,Hauptgruppe,HG1 FROM Gruppen,Hersteller WHERE HG1 LIKE Hauptgruppe AND Email LIKE '" &Email& "'")

        Hier fällt mir auf, dass Du im sql-state eine Variable, nämlich Hauptgruppe, einfach einsetzst, und nicht die korrekte Verkettung von String und Variablen verwendest, es sollte doch IMHO heissen:
        WHERE HG1 LIKE " & Hauptgruppe & " AND ...

        Vielleicht sehe ich das alles nicht richtig und verstehe davon nicht genug, aber hier erscheint mir einiges ungereimt. Hoffe zur Lösung beigetragen zu haben.

        Gruss
        Uwe Nohl

      2. Hallo EfkA,

        ich nochmal,

        aufgrund der fortgeschrittenen Uhrzeit habe ich  ein bisschen Mist geschrieben. Natürlich kann man einer Variablen (hauptgruppe) unter der Bedingung, dass eine Objekteigenschft( Request.Form("Hauptgruppe")) den Wert "" hat, den Wert 0 zuweisen. Nur muss man natürlich genau wissen, welcher Datentyp das unterliegende DB-Feld hat.

        Zum SQL: auch etwas ungenau geantwortet.

        korrekt macht mans so: "...WHERE feld LIKE '" & var & "'"
        oder mit Joker       : "...WHERE feld LIKE '%" & var & "%'"
        aber ohne Joker ist LIKE eigentlich sinnlos, nimmt man =

        Gute Nacht
        Uwe Nohl