Avatar billede simsen Mester
10. september 2005 - 23:37 Der er 11 kommentarer og
1 løsning

sitemap løsning

Jeg vil gerne have lavet et sitemap løsning på min hp'er. Altså den skal udskrive på følgende måde

Overskrift1
---Underoverskrift 1
---Underoverskrift 2

Overskrift2

Overskrift3
---Underoverskrift3

osv

Jeg har forsøgt mig med følgende kode;

<%
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 "&mdash;"
    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å?

mvh
simsen :-)
Avatar billede busschou Praktikant
11. september 2005 - 08:18 #1
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")
Avatar billede busschou Praktikant
11. september 2005 - 08:22 #2
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)
Avatar billede simsen Mester
11. september 2005 - 09:51 #3
Godmorgen busschou

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:

Overskrift1
Overskrift2
Overskrift3
Overskrift4
Overskrift5
--Overskrift5
--Overskrift5
--Overskrift5

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

soverskrift = dataRS("overskrift")
suoverskrift = dataRS2("overskrift")


'Response.Write dataSQL
'response.end

do while not dataRS.eof
  Response.Write soverskrift
    do while not dataRS2.eof
        if soverskrift = suoverskrift then
            response.write "&mdash;"
        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?

mvh
simsen
Avatar billede busschou Praktikant
11. september 2005 - 09:57 #4
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 "&mdash;"
        response.write dataRS2("underoverskrift")
      end if
      dataRS2.MoveNext
    loop
  dataRS2.MoveFirst
  dataRS.MoveNext
loop
Avatar billede busschou Praktikant
11. september 2005 - 09:59 #5
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
Avatar billede busschou Praktikant
11. september 2005 - 10:18 #6
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 "&mdash;" & dataRS("underoverskrift") & "<br>"
  dataRS.MoveNext
loop

dataRS.Close
Set dataRS = Nothing
whtConn.Close
Set whtConn = Nothing
%>
Avatar billede simsen Mester
11. september 2005 - 10:36 #7
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?
Avatar billede simsen Mester
11. september 2005 - 10:40 #8
Ja men problemet er, jeg vil så gerne have den i samme rækkefølge som den står i Databasen - nemlig

Forside
Indhold
--Indhold1
--Indhold2
Artikler
--Artikel1
--Artikel2

Nu kommer den jo så frem i alfabetisk rækkefølge istedet:
Artikler
Forside
Indhold
Avatar billede busschou Praktikant
11. september 2005 - 10:48 #9
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
Avatar billede busschou Praktikant
11. september 2005 - 10:50 #10
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
Avatar billede simsen Mester
11. september 2005 - 10:54 #11
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 :-)
Avatar billede busschou Praktikant
11. september 2005 - 10:56 #12
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester