<% Set dataRS = Server.CreateObject("ADODB.RecordSet") dataSQL = "Select overskrift from tblPages group by overskrift" 'Response.Write dataSQL 'response.end dataRS.Open dataSQL, whtConn, 1
do while not dataRS.eof dataSQL2 = "Select underoverskrift from tblPages where overskrift=" & dataRS("overskrift") 'Response.Write dataSQL2 'response.end dataRS2.Open dataSQL2, whtConn, 1
Response.Write dataRS("overskrift") do while not dataRS2.eof response.write "—" response.write dataRS2("underoverskrift") dataRS2.MoveNext loop dataRS2.Close Set dataRS2 = Nothing dataRS.MoveNext loop
'close connections,etc.. dataRS.Close Set dataRS = Nothing dataRS2.Close Set dataRS2 = Nothing whtConn.Close Set whtConn = Nothing %>
Men den virker ikke - den starter med at skrive overskrifterne ud men stopper efter nr. 5 (der er 6 forskellige) - den fremkommer med følgende fejl:
Microsoft VBScript runtime error '800a01a8'
Object required: ''
/ansi/Sitemap/default.asp, line 28
linie 28 er: dataRS2.Open dataSQL2, whtConn, 1
Hvad går galt? Er der en bedre måde at lave sådan en sitemap på?
ja altså helt konkret så fortæller den dig jo at den kræver et objekt for at kunne udføre linjen. Open er en metode og dataSQL2, whtConn og 1 er argumenter til metoden mens dataRS2 er objektet som kalder metoden med de tre argumenter. Så når den mangler et objekt så mangler den at have defineret dataRS2. Et kig i koden giver at du har defineret Set dataRS = Server.CreateObject("ADODB.RecordSet") Men du har ikke defineret Set dataRS2 = Server.CreateObject("ADODB.RecordSet")
i øvrigt Hvis du insisterer på at lave denne her inden i din løkke Set dataRS2 = Nothing Så skal du huske også at have denne her inden i din løkke og ikke uden for! Set dataRS2 = Server.CreateObject("ADODB.RecordSet") Men bortset fra det så vil jeg foreslå dig at lave objektet uden for løkken og så ikke sætte det til Nothing før efter løkken Du har jo en dataRS2.open og en dataRS2.close , det er måske lidt overkill at lave et nyt objekt hver gang. Det svarer jo til at hver gang du vil male dit hus, så skal du først rive det ned og bygge det igen, når du kan nøjes med at købe en spand maling ;o)
Jeg satte daraRS2 på og fik da endelig en tekst ud - bare ikke den jeg ville have - så har leget lidt videre - men uanset hvad jeg gør, får jeg den på følgende måde:
Den skulle tage det ud som følgende: Overskrift1 Overskrift2 --underoverskrift2 --underoverskrift2 Overskrift3 --underoverskrift3 --underoverskrift3 --underoverskrift3 Overskrift4 Overskrift5 --underoverskrift5 --underoverskrift5 --underoverskrift5
Min kode ser ud som følgende nu:
<% Set dataRS = Server.CreateObject("ADODB.RecordSet") Set dataRS2 = Server.CreateObject("ADODB.RecordSet") dataSQL = "Select overskrift from tblPages group by overskrift" dataRS.Open dataSQL, whtConn, 1 dataSQL2 = "Select overskrift, underoverskrift from tblPages" dataRS2.Open dataSQL2, whtConn, 1 'Response.Write dataSQL 'response.end
do while not dataRS.eof Response.Write soverskrift do while not dataRS2.eof if soverskrift = suoverskrift then response.write "—" response.write dataRS2("underoverskrift") end if dataRS2.MoveNext loop dataRS.MoveNext loop
'close connections,etc.. dataRS.Close Set dataRS = Nothing dataRS2.Close Set dataRS2 = Nothing whtConn.Close Set whtConn = Nothing %>
Kan du sige mig, hvorfor (noget meget slemt) skriver det sådan ud - for jeg beder jo ikke i min anden loop om overskrift men underoverskrift?
altså som du gør nu så har du for hver overskrift en do while som ser på om overskrift er lig uoverskrift Men men...Første gang den finder en overskrift, så undersøger den hele dataRS2 for uoverskrifter, helt til enden, ved næste overskrift så er dataRS2 = EOF og løkken køres ikke mere prøv derfor --- do while not dataRS.eof Response.Write soverskrift do while not dataRS2.eof if soverskrift = suoverskrift then response.write "—" response.write dataRS2("underoverskrift") end if dataRS2.MoveNext loop dataRS2.MoveFirst dataRS.MoveNext loop
jeg er ikke sikker på hvordan og hvorledes når du benytter et recordset hviken cursor du skal benytte for at kunne bruge movefirst, men prøv ad Hvis ikke det går så er der også den mulighed at du i begge dine sql lave en Order By Overskrift, for så behøves du ikke løbe det hele igennem hver gang, så kan du nøjes med at tjekke om overkriften er ens, og hvis ikke så springe ud af løkken
Men altså når det er samme tabel hvorfor så gøre det så besværligt? Du kan vel nøjes med een løkke og så blot have en variabel som husker overskriften ala ----- <% Set dataRS = Server.CreateObject("ADODB.RecordSet") dataSQL = "Select overskrift, underoverskrift from tblPages order by overskrift" dataRS.Open dataSQL, whtConn, 1
overskrift = ""
do while not dataRS.eof if dataRS("overskrift") <> overskrift then overskrift = dataRS("overskrift") response.write overskrift & "<br>" end if response.write "—" & dataRS("underoverskrift") & "<br>" dataRS.MoveNext loop
dataRS.Close Set dataRS = Nothing whtConn.Close Set whtConn = Nothing %>
Jeg kan ikke få MoveFirst til at fungere - jeg har fundet ud af, det er noget med hvordan jeg åbner på; http://eksperten.dk/spm/202474 - MEN selv når jeg putter det 3 tal på - så bliver den ved på samme måde :-(
Hvordan vil du lave det sidste forslag - og vil det så ikke lave om på rækkefølgen af hvordan det står i databasen?
ok så dropper vi den ide :o) Jeg kender ikke meget til brug af recordset desværre men det burde være muligt ved brug af en connection altså, sådan her med begge to i stedet for recordset dataSQL2 = whtConn.Execute("Select overskrift, underoverskrift from tblPages") i det jeg formoder at din whtConn er en ADODB.Connection ? --- Så ret dette --- Set dataRS = Server.CreateObject("ADODB.RecordSet") Set dataRS2 = Server.CreateObject("ADODB.RecordSet") dataSQL = "Select overskrift from tblPages group by overskrift" dataRS.Open dataSQL, whtConn, 1 dataSQL2 = "Select overskrift, underoverskrift from tblPages" dataRS2.Open dataSQL2, whtConn, 1 --- til --- dataSQL = "Select overskrift from tblPages group by overskrift" set dataRS = whtConn.execute(dataSQL) dataSQL2 = "Select overskrift, underoverskrift from tblPages" set dataRS2 = whtConn.execute(dataSQL2) --- og ellers så som 11/09-2005 09:57:55
men altså, Hvis din database er sorteret sådan som du ønsker på forhånd? Altså sådan at den første række er det første du vil skrive ud, og den anden det andet du vil skrive ud, så kan du jo sagtens benytte mit andet eksempel blot uden Order By
Kors - jeg tror bare jeg undskylder mig med det er søndag morgen OG jeg er Quinde *flov*
Min database er lige netop opbygget, som jeg vil have den ud - og JA jeg VED, at jeg ikke skal have order by med, vil jeg have den ud i samme rækkefølge som den.
Smid et svar og du får dine MEGET velfortjente points - og takker for hjælpen :-)
det var så lidt da, men lad være med at undskyld, det er jo hverken din skyld at det er søndag eller at du er kvinde ;o) Godt det virker :oD
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.