netghost: Denkfehler oder?

Hallo,

also ich habe eine tabelle mit 5 feldern, sagen wir Land, Bundesland, Stadt, Feld1 und Feld2

jetzt möchte ich eine Ausgabe erstellen, die so aussieht

Deutschland Berlin
Berlin Feld1(1) Feld2 (1)
Berlin Feld1(2) Feld2 (2)
Berlin Feld1(3) Feld2 (3)
Berlin Feld1(4) Feld2 (4)

Deutschland Niedersachsen
Hannover Feld1(5) Feld2(5)
Hannover Feld1(6) Feld2(6)
Hannover Feld1(7) Feld2(7)
Hannover Feld1(8) Feld2(8)

etc.

Also öffne ich mir 2 datensätze mit
RS1.open "SELECT * FROM Tabelle ORDER BY Land, Bundesland;"
RS2.open "SELECT Land, Bundesland FROM Tabelle GROUP BY Land, Bundesland ORDER BY Land, Bundesland"

Soweit so gut, nun zur Ausgabe:
80 <% do while not oRs2.EOF %>
81 <table width="600" border="0" align="center">
82 <tr>
83  <td width="200"><% response.write oRs2.fields("Land") %></td>
84  <td width="400"><% response.write oRs2.fields("Bundesland") %></td>
85 </tr>
86 </table>
87 <% do while not oRs.EOF  AND oRs.fields("Bundesland") = oRs2.fields("Bundesland") %>
88 <table width="600" border="0" align="center">
89 <tr>
90 <td width="200"><% response.write oRs.fields("Stadt") %></td>
91 <td width="200"><% response.write oRs.fields("Homepage") %></td>
92 <td width="200"><% response.write oRs.fields("Makler") %></td>
93 </tr>
94 </table>
95 <% oRs.MoveNext
96  loop
97 %>
98 <br>
99 <%
100 oRs2.MoveNext
101 loop
102 %>

Funktioniert auch wunderbar bis die schleife zum ende kommt, dann gibts auf einmal einen fehler
error '80020009'
Ausnahmefehler aufgetreten.
datentest.asp, line 87

Danke für vorschläge oder ideen

netghost

  1. Hi, hallo

    in den mir bekannten Fällen, entsteht dieser Fehler, wenn man versucht einen DBNULL auszuwerten (gegen einen nicht DBNull).

    Das Problem liegt an der Schleifenbedingung, weil beide Bereiche ausgewertet werden und nicht nur der erste.

    wenn ich dein Problem richtig erkenne, solltest du mit SHAPED Recordsets besser fahren.

    sql = "SHAPE {SELECT iID,feld1,feld2 FROM table1 ORDER BY feld3 ASC} APPEND ({SELECT oID,refID,feldX1,feldX2 FROM table2} RELATE iID to refID) as subset"

    set ORs = conn.execute(sql)

    DO until ORs.eof
       .....
       set SubRs = ORs("subset").Value
       DO until SubRs.eof
          ..............
          SubRs.MoveNext
       Loop
       set SubRs = nothing
       ORs.MoveNext
    loop

    damit kann man schöne geschachtelte Recordsets bauen ... geht imho nur via MS' OLEDB (JET und SQL).

    cnnStr = "Provider=MSDataShape;Data Provider=Microsoft.Jet.OleDB.4.0;Data Source=...;"

    der connection string muß etwas umgebaut werden, siehe ebendiges Muster.

    Sehr viel weitere Infos findest du im MSDN.

    Tschau, tschüß,
    Frank

    1. Hallo Frank,

      danke erst mal für die Info. Das mit dem dbnull gegen dbnicht null erscheint mir auch so, allerdings sehe ich nicht warum.

      Ich hab hier keine 2 tabellen, gut könnte ne zweite tabelle draus machen entweder indem ich die daten umstrukturiere (eeek hehe) oder indem ich einen query in der access tabelle speichere, der das entsprechende format hat. Wenn möglich würde ich das gerne vermeiden.

      Eigentlich sollte doch gar nichts mehr passieren, nachdem mein zweites recordset eof ist, tuts aber anscheinend doch.

      netghost

      1. Hi, hallo

        das Problem liegt an der Auswertungsmethode von VBS bei IF..THEN..END IF

        es werden immer beide Seiten bei AND gecheckt, deswegen und genau deswegen, weil geprüft wird EOF (wahr) und Inhalt (DBNull) -> Ausnahmefehler

        erst bei VB.net funzt es etwas anders, erster Teil von AND falsch -> und tschüß :-)

        Thema SHAPED RS: du kannst auch zwei mal dieselbe Tabelle in sich schachteln

        Tschau, tschüß,
        Frank

        1. Hallo Frank,

          Danke erst mal für deine Zeit :-)

          Das mit dem AND hab ich mir auch schon gedacht und habs deshalb mit 2 schleifen versucht

          do while not oRs.EOF
             do while oRs.fields("Bundesland") = oRs2.Fields("Bundesland")
             ....
             loop
          loop

          brachte aus irgendeinem grunde timeouts

          danach hab ichs dann per

          do while not oRs.EOF
             .....
          loop until oRs.Fields("Bundesland") <> oRs2.Fields("Bundesland")

          versucht aber resultat war genau wie eingangs am ende des RS fehler

          netghost

          1. Hi, hallo

            versuchs doch mal mit Shaping ... :-)

            ansonsten ... gern geschehen ...

            Tschau, tschüß,
            Frank