Denkfehler oder?
netghost
- asp.net
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
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
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
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
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
Hi, hallo
versuchs doch mal mit Shaping ... :-)
ansonsten ... gern geschehen ...
Tschau, tschüß,
Frank