leere/keine Datensätze bzw. kein current record -> bitte trotzdem anzeigen!

Jerinca

Erfahrenes Mitglied
Hallo!

Ich hab' folgendes Problem: Habe eine ASP-Seite, die in mehreren Formularen aus mehreren Abfragen mehrere Datensätze auslesen soll.

Nun bekomme ich beim Aufruf dieser Seite immer diese Fehlermeldung:
"Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record."

Kennen wir ja :rolleyes:

Ich denke, es liegt daran, daß manche der Abfragen kein Ergebnis zurückbringen (also kein Datensatz auf die Abfrage paßt). Das kann durchaus vorkommen, ist ja aber kein Problem :) In diesem Fall soll eben nur die Überschrift, aber eben keine Datensätze angezeigt werden.

Wie schaffe ich es, dem Programm zu sagen, daß es die Seite trotzdem anzeigen soll, auch wenn bei der einen oder anderen Abfrage (wir erinnern uns: es gibt mehere Abfragen in mehreren Formularen) kein Ergebnis rauskommt :confused:

Vielen Dank schonmal für Eure Mühen!

CU, Jerinca
 

Luzie

Erfahrenes Mitglied
Hallo

Du kannst das Recordset auf eof (end of file) oder bof (beginn of file) abfragen

<%
if rs.eof then
' -- anzeigen, wenn kein Ergebnis vorliegt
else
' -- Datensätze anzeigen
end if
%>
 

Jerinca

Erfahrenes Mitglied
Hallo Luzie!

Danke erstmal für Deinen Vorschlag :)

Aber zu meinem Beschämen muß ich sagen, daß ich bis jetzt immer mit den Dreamweaver Editoren gearbeitet habe, denn die machen das meiste für mich :rolleyes: Damit alle Datensätze angezeigt werden, die auf eine Abfrage zutreffen, steht da:

Code:
<% 
while ((Repeat1__numRows-- != 0) && (!RecordsetReparatur.EOF)) { 
%>

dann der Teil, der wiederholt werden soll

<%
Repeat1__index++;
RecordsetReparatur.MoveNext();
}
%>

Meinst Du, ich sollte jetzt vor dieses WHILE noch ein IF einfügen?

Vielen Dank schonmal (wieder)!

P.S.: Ich programmiere übrigens in JavaScript, falls Dir das was nützt...
 

Luzie

Erfahrenes Mitglied
Hallo

da gibt im Dreamweaver Serververhalten eine Option
Bereich anzeigen, wenn...

Ich denke mal, dass sollte Dir helfen.
 

Jerinca

Erfahrenes Mitglied
Ach Luzie!

Du bist ein Schatz :p

Es funktioniert! Auf dieses Serververhalten bin ich noch gar nicht gekommen!

Vielen, vielen Dank, daß Du schon so früh so wach im Kopf bist und mir eine positive Antwort geben konntest!

CU, Jerinca
 

Jerinca

Erfahrenes Mitglied
Hallo nochmal!

Habe doch noch eine Frage... Folgendes habe ich auf einer Website gelesen:

Verborgene Bereiche dürfen wiederholte Bereiche nicht überlappen.

Bedeutet das in meinem Fall (siehe oben), daß es nicht möglich ist, diese beiden Serververhalten zu kombinieren?

Denn das tue ich:

Ich habe einen Tabellenbereich, den ich durch das Serververhalten "Bereich wiederholen" dazu bringe, alle Datensätze auszugeben, die auf eine Abfrage zutreffen.

Dann habe ich auf den selben Bereich das Serververhalten "Bereich anzeigen, wenn Datensatzgruppe nicht leer ist" angewendet, mit dem Ziel, daß der Bereich nicht angezeigt wird, sollte die Abfrage kein Ergebnis bringen.

Zur Erläuterung: Bevor ich das so gemacht habe, konnte die Seite gar nicht angezeigt werden, wenn die Abfrage kein Ergebnis brachte (-> Fehlermeldung).

Das auf der Site angezeigte Ergebnis stimmt aber trotzdem noch nicht, also muß irgendwas falsch an den Einstellungen sein. Das obige Zitat hat mich dann auf den Gedanken gebracht, daß das der Grund sein könnte... :(

Kann mir jemand diese Frage beantworten?

Danke schonmal!
 

Luzie

Erfahrenes Mitglied
Das ist insofern schon richtig, das Zitat.

Der Dreamweaver erstellt meines Wissens für die entsprechenden Bereiche jeweils eine Abfrage. Er verschachtelt sie nicht in einer else-Verzweigung. Wenn die Verhalten klar und deutlich auf die entsprechenden Bereich gelegt worden sind, zeigt er auch immer nur den entsprechenden Bereich an, niemals beide.

Im Prinzip geht das so

Recordset erstellen
Recordset öffnen

if Recordset.eof then
' --- hier kann dann z.B. eine Text oder eine Tabelle hinein, welche angezeigt werden soll, wenn kein Datensatz gefunden wird. Dies ergibt sich einfach aus der Abfrage auf eof heraus.

end if

if not Recordset.eof then

' -- hier kannst Du dann die Tabelle mit Bereich Wiederholen einfügen

end if

Recordset schließen

Diese Bereiche anzeigen wenn... müssen sich im geöffneten Recordset befinden.

Der Einfachheit halber würde ich das in 2 Tabellen platzen. Jeweils markieren und die Verhalten drauf legen. Wie gesaagt, es kann nur immer eines angezeigt werden.

Schau in den Quelltext, da wirst Du die Bereich auch sehen. JS generierte Abfragen sind etwas anders, aber man wird das schon erkennen.
 

Jerinca

Erfahrenes Mitglied
Danke für Deine Antwort - Du nimmst Dir ja wirklich Zeit!

Aber trotzdem: WOW! Dann wird das ja ewig viel Quellcode (dazu muß ich sagen, daß ich 3 nebeneinander stehende Formulare mit jeweils einer sich wiederholenden Tabelle drin habe)...

Ich kapier' das net! Warum kann man denn nicht schreiben:
Code:
IF (Abfrage bringt Ergebnisse) {
WHILE (Datensätze vorhanden, also EOF noch nicht erreicht) {
Wiederholungs-Teil
}
}
ELSE // also wenn die Abfrage keine Ergebnisse bringt
{zeig' meinetwegen eine Meldung an}
Das sieht doch vom Prinzip her logisch aus, finde ich :p

Naja, da hab' ich mir was eingebrockt, wenn ich jetzt wirklich statt drei 6 Tabellen machen muß... Toller Programmierstil :offtopic:

Danke schonmal wieder...

Gruß, Jerinca
 

Luzie

Erfahrenes Mitglied
Hi

der Dreamweaver produziert fast immer ne Menge Quellcode, gerade was den ASP-Bereich anbetrifft, meiner Meinung auch machmal unnützes Zeug. Aber greift man händisch in den Code ein, funktionierten die Verhalten oft nicht mehr. Möglich ist das alles.

Für viele halt eine Methode, dyn. Webseiten per Mausklick zu erzeugen, wenn man sich nicht mit komplizierten Programmiertechniken beschäftigen möchte.

Aber der Programmcode von der Stange hat einmal ein Ende bzw. seine Grenze, es sind wirklich nur Grundlagenverhalten möglich.

Wenn Du es anders haben möchtest, kommst Du nicht drumrum, Dich mit der Scriptsprache Deiner Wahl zu beschäftigen, ist eben so ;)
 

Neue Beiträge