Avatar billede tblaster Nybegynder
01. april 2003 - 17:28 Der er 31 kommentarer og
2 løsninger

sql

Hejsa

Hvad er der galt her:

sql = "SELECT Navn.Kategorier, Navn.Underkategorier1, Navn.Underkategorier2 FROM Kategorier"   

Response.write rs.fields("Navn.Kategorier")

Den melder fejlen i min sql ... følgende fejl:
[TCX][MyODBC]Unknown table 'Navn' in field list
Avatar billede boris Mester
01. april 2003 - 17:30 #1
Prøv at rette det til Response.Write rs.fields("Kategorier")
Avatar billede dk_akj Nybegynder
01. april 2003 - 17:30 #2
Du har ikke Navn med i din from clause.

//akj
Avatar billede hossein Nybegynder
01. april 2003 - 17:31 #3
du skal skrive sådan:

SQL= "select TabelNavn.KolonneNavn from TabelNavn"
Avatar billede hossein Nybegynder
01. april 2003 - 17:32 #4
også bliver:
Response.write rs.fields("KolonneNavn")
Avatar billede boris Mester
01. april 2003 - 17:34 #5
Dus kal selvfølgelig havde de tabeller med, som du selecter fra.
Til gengæld behøver du ikke at skrive Navn. foran, hvis der ikke er andre kolonner i de andre tabellser, som hedder Underkategorier1 osv.
Avatar billede tblaster Nybegynder
01. april 2003 - 17:39 #6
Har rettet det til følgende nu da jeg havde byttet om på tabel og kolonne ... men jeg får stadig den samme fejl:

sql = "SELECT Kategorier.Navn, Underkategorier1.Navn, Underkategorier2.Navn FROM Kategorier"   
Response.write rs.fields("Kategorier.Navn")

Det skal nok lige siges at jeg benytter en mysql database ...

dk akj ... jeg forstår ikke hvad du mener
Avatar billede hossein Nybegynder
01. april 2003 - 17:50 #7
hvad hedder din tabel?
Hvad hedder de kolonner som du vil vælge?
Avatar billede tblaster Nybegynder
01. april 2003 - 17:54 #8
jeg har følgende tabeller:

Kategorier
Underkategorier1
Underkategorier2

I alle tabellerne er der følgende kolonner:
Navn
Id
Avatar billede hossein Nybegynder
01. april 2003 - 18:02 #9
Nåh nåh, så er det ikke på den måde. Du skal joine disse tabeller sammen hvor værdien i kolonner har samme betydnig, men du kan klare dette problam med 2 tabeller.
Avatar billede tblaster Nybegynder
01. april 2003 - 18:04 #10
nej jeg skal ikke have dataen joinet ... det skal jo udskrives som følgende:

Navn 1 fra kategorier
Navn 2 fra kategorier
  Navn 1 fra underkategorier 1
    Navn 1 fra underkategorier 2
    Navn 2 fra underkategorier 2
  Navn 2 fra underkategorier 1
Navn 3 fra kategorier
Avatar billede mri Nybegynder
01. april 2003 - 18:07 #11
SELECT Kategorier.Navn AS KatNavn, Underkategorier.Navn AS UKat1Navn, Underkategorier2.Nanv AS UKat2Navn FROM ....


Response.Write rs.fields("KatNavn")
Response.Write rs.fields("UKat1Navn")
Response.Write rs.fields("UKat2Navn")
Avatar billede tblaster Nybegynder
01. april 2003 - 18:16 #12
Det giver følgende ...

[TCX][MyODBC]Unknown table 'Underkategorier1' in field list

Jeg har sat den til: From Kategorier ... er det rigtigt eller hvad skal jeg sætte den til ...

sql = "SELECT Kategorier.Navn AS KatNavn, Underkategorier1.Navn AS UKat1Navn, Underkategorier2.Nanv AS UKat2Navn FROM Kategorier"
Avatar billede koldy Nybegynder
01. april 2003 - 18:43 #13
FROM kategorier, Underkategorier1, Underkategorier2
Avatar billede mri Nybegynder
01. april 2003 - 18:43 #14
SELECT Kategorier.Navn FROM Kategorier UNION SELECT Underkategorier1.Navn FROM Underkategorier1 UNION SELECT Underkategorier2.Navn FROM Underkategorier2
Avatar billede mri Nybegynder
01. april 2003 - 18:45 #15
Response.Write rs.fields("Navn")

så behøver du ikke skelne mellem feltnavne for de tre tabeller
Avatar billede tblaster Nybegynder
01. april 2003 - 19:42 #16
Nu begynder det at ligne noget men den skrive det samme en helt masse gange og den samler ikke alle Underkategorier1.Navn lige under hinanden ... hvordan skal det så stilles op?

Her er min kode:

'Åbn recordsæt               
sql = "SELECT Kategorier.Navn AS KatNavn, Kategorier.id AS Katid, Underkategorier1.Navn AS UKat1Navn, Underkategorier1.id AS UKat1id, Underkategorier2.Navn AS UKat2Navn FROM Kategorier, Underkategorier1, Underkategorier2"   
Set rs = Conn.Execute(SQL)

do until rs.eof

response.write "<tr>" & _
              "<TD width=18 height=15></TD>" & _
              "<TD width=10 height=15>"
             
If session("Navn") = rs.fields("KatNavn") Then
response.write "<IMG height=5 src=""firkant_fyld.gif"" width=5></TD>"& _
              "<TD bgColor=#dfebc8 height=15><B>"
Else
response.write "</TD>" & _
              "<TD height=15><B>"
End If

response.write "<A href=""http://www.just2funny.dk/1/index.asp?Navn=" & rs.fields("KatNavn") & """>" & rs.fields("KatNavn") & _
              "</A></B></TD>" & _
              "</tr>"

If session("Navn") = rs.fields("KatNavn") and rs.fields("Katid") = rs.fields("Ukat1id") Then
response.write "<TD width=18></TD>" & _
              "<TD width=10></TD>" & _
              "<TD>" & _
                "<TABLE height=20 cellSpacing=0 cellPadding=0 width=""100%"" border=0>" & _
                  "<TBODY>" & _
                  "<TR>" & _
                    "<TD width=10 height=10></TD>" & _
                    "<A href=""http://www.just2funny.dk/1/index.asp?Navn=" & rs.fields("UKat1Navn") & """>" & rs.fields("UKat1Navn") & _
                    "</A></B></TD>" & _
                    "</TBODY></TABLE></TD>"
End If

rs.MoveNext
loop

'Ryd op
rs.close
set rs=Nothing
conn.close
set conn=Nothing


Jeg smide lige nogle flere point i puljen!
Avatar billede tblaster Nybegynder
01. april 2003 - 19:42 #17
I kan se hvordan det er den skriver det forkert op her:

http://www.just2funny.dk/1/index.asp?Navn=Vitser
Avatar billede tblaster Nybegynder
01. april 2003 - 20:27 #18
Jeg har fundet ud af ved udlukkelsmetoden at det er denne der giver problemet med at de vises så mange gange:

sql = "SELECT Kategorier.Navn AS KatNavn, Kategorier.id AS Katid, Underkategorier1.Navn AS UKat1Navn, Underkategorier1.id AS UKat1id, Underkategorier2.Navn AS UKat2Navn FROM Kategorier, Underkategorier1, Underkategorier2"   

Hvad kan jeg gøre ved det?
Avatar billede boris Mester
01. april 2003 - 22:26 #19
Mangler du ikke noget GROUP BY  eller ORDER BY ?
Avatar billede tblaster Nybegynder
02. april 2003 - 09:21 #20
Er det nødvendigt når jeg bruger en From med flere tabeller?

Hvad vil være det bedste i mit tilfælde ... en order by vel eller hva?
Avatar billede mri Nybegynder
02. april 2003 - 09:41 #21
Ikke fordi jeg vil blande mig i, hvordan du strukturerer dine kategorier og underkategorier, men alligevel....

Du har lidt gravet dig ned i et hul her. I stedet skal du nok tænke det som en træstruktur, hvor kategorierne kan have underliggene kategorier. Her kommer lige en ultrasimpel ide:

Du har én tabel - kategorier

Som har felterne - ID, ParentID, Navn

Den yderste kategori har parentid 0. Hvis en kategori har en underkategori, som er underkategoriens parentid overkategoriens id.

Så henter du det a la det her:

Sub RtrnKat(pid)
  Dim rs
  Dim rs_sql
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs_sql = "SELECT Navn, ID FROM Kategorier WHERE ParentID = " & pid
  rs.Open rs_sql, Conn, 1, 1
  Do While Not rs.EOF
      Response.Write "<BR>" & rs("Navn")
      Call RtrnKat(rs("ID"))
      rs.MoveNext
  Loop
  rs.Close
  Set rs = Nothing
End Sub

Call RtrnKat(0)

Så skriver du træhirarkiet ud. Samtidig er din løsning meget simplere og mere fleksibel. Det står dig frit for at lægge en ORDER BY ind afhængigt af, hvordan du vil sortere din struktur.
Avatar billede mri Nybegynder
02. april 2003 - 09:42 #22
Jeg har altså ikke afprøvet ovenstående, så måske er der et par slåfejl eller noget...
Avatar billede tblaster Nybegynder
02. april 2003 - 15:54 #23
mri ... hvis jeg så oprette en tabel følgende:

ID, KatID, Under1ID, Under2ID, Navn

Hvordan kan jeg så kalde det hele frem når strukturen er som følgende:
Den yderste kategori har KatID 1. Dens underkategorier har Under1id 1 og underkategorierne har under2id 1. Altså så det hele høre sammen således:

Kategori 1
Kategori 2
  Under Kategori 1
    Under Under Kategori 1
    Under Under Kategori 2
  Under Kategori 2
Kategori 3
Avatar billede mri Nybegynder
02. april 2003 - 16:29 #24
Jeg tror ikke, at du helt har fanget pointen endnu.

Du behøver ikke at felterne under1ID og under2ID i tabellen. Kategoriernes indbyrdes forhold (kategori, underkategori1 og underkategori2) styres med feltet ParentID. Et eksempel:

id:      parentid:      navn:
1        0              kategori1
2        1              underkategori1 til kategori1
3        1              underkategori2 til kategori1
4        0              kategori2
5        4              underkategori3 til kategori2
6        5              underunderkategori1 til underkategori3

I html bliver det formatteret sådan her:

kategori1
    underkategori1
    underkategori2
kategori2
    underkategori3
          underunderkategori1


Ovenstående kode(mri 02/04-2003 09:41:20) skriver først den første kategori med parentid 0 ud - og så kalder den sig selv, men skriver så alle kategorier med den førstes id som parentid ud.

Smart ikke? Det her eksempel er meget grundlæggende, man kan bygge en masse ting ind i det.
Avatar billede tblaster Nybegynder
02. april 2003 - 17:27 #25
Nu har jeg fået det hele ændre og har fået koden lavet om til følgende:

Sub RtrnKat(pid)
  Dim rs
  Dim rs_sql
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs_sql = "SELECT Navn, ID, ParentID FROM Kategorier WHERE ParentID = " & pid
  rs.Open rs_sql, Conn, 1, 1
  Do While Not rs.EOF
        If rs("ParentID") <> 0 Then
        response.write "<TD width=18></TD>" & _
                        "<TD width=10></TD>" & _
                        "<TD>" & _
                        "<TABLE height=20 cellSpacing=0 cellPadding=0 width=""100%"" border=0>" & _
                        "<TBODY>" & _
                        "<TR>" & _
                      "<TD width=10 height=10></TD>" & _
                      "<A href=""index.asp?Navn=" & rs("Navn") & """>" & rs("Navn") & _
                      "</A></B></TD>" & _
                      "</TBODY></TABLE></TD>"
        Else
                   
        Response.Write "<tr>" & _
                      "<TD width=18 height=15></TD>" & _
                      "<TD width=10 height=15>"
             
        If session("Navn") = rs("Navn") Then
        Response.Write "<IMG height=5 src=""firkant_fyld.gif"" width=5></TD>"& _
                      "<TD bgColor=#dfebc8 height=15><B>"
        Else
        Response.Write "</TD>" & _
                        "<TD height=15><B>"
        End If

        Response.Write "<A href=""index.asp?Navn=" & rs("Navn") & """>" & rs("Navn") & _
              "</A></B></TD>" & _
              "</tr>"
        End If     
      Call RtrnKat(rs("ID"))
      rs.MoveNext
  Loop
  rs.Close
  Set rs = Nothing
End Sub

Call RtrnKat(0)
Avatar billede tblaster Nybegynder
02. april 2003 - 17:36 #26
GLEM OVERSTÅENDE KOMMENTAR ... DET VAR EN FEJL AT DEN BLEV POSTET ... LÆS VENLIGST NÆSTE KOMMENTAR!
Avatar billede tblaster Nybegynder
02. april 2003 - 17:36 #27
Nu har jeg fået det hele ændre og har fået koden lavet om til følgende:

Sub RtrnKat(pid)
  Dim rs
  Dim rs_sql
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs_sql = "SELECT Navn, ID, ParentID FROM Kategorier WHERE ParentID = " & pid
  rs.Open rs_sql, Conn, 1, 1
  Do While Not rs.EOF
        Response.Write "<tr>" & _
                      "<TD width=18 height=15></TD>" & _
                      "<TD width=10 height=15>"
             
        If session("Navn") = rs("Navn") Then
        Response.Write "<IMG height=5 src=""firkant_fyld.gif"" width=5></TD>"& _
                      "<TD bgColor=#dfebc8 height=15><B>"
        Else
        Response.Write "</TD>" & _
                        "<TD height=15><B>"
        End If

        If rs("ParentID") <> 0 Then
        Response.Write "<A href=""index.asp?Navn=" & rs("Navn") & """>" & "&nbsp;&nbsp;" & rs("Navn")
        Else
        Response.Write "<A href=""index.asp?Navn=" & rs("Navn") & """>" & rs("Navn")
        End If
       
        Response.Write "</A></B></TD>" & _
              "</tr>"     
      Call RtrnKat(rs("ID"))
      rs.MoveNext
  Loop
  rs.Close
  Set rs = Nothing
End Sub

Call RtrnKat(0)

Mit problem er nu at den skriver alle Under Kategorier ud og ikke kun dem for hvilke der gælder at session("id") = rs("parentid")
Avatar billede mri Nybegynder
02. april 2003 - 18:03 #28
Udskift:
Call RtrnKat(rs("ID"))

Med:
If Session("ID") = rs("ID") Then RtrnKat(rs("ID"))

Så skriver den kun underkategorierne ud, hvis kategori id'en er lig med Session("ID")
Avatar billede tblaster Nybegynder
02. april 2003 - 18:13 #29
Så laver den det rigtigt ... men (Der er altid et men :-D)

Når man trykker på en af underkategorierne så viser den den ikke som markeret og lukker hele menuen ... check http://www.just2funny.dk/1 for at se hvad det er jeg mener ...

Desuden skal det være sådan at når man trykker på en af underkategorierne så skal den vise underkategorierne til underkategorien ... men jeg ved ikke hvordan jeg skal skrive det sammen med koden.

Skal nok lige smide nogle ekstra point i opgaven.
Avatar billede mri Nybegynder
03. april 2003 - 09:17 #30
Du kan lave et hack.

Før sub:

Request("kID")
Request("ukID")
Dim kID
Dim ukID

Udskift:
  Do While Not rs.EOF

Med:
  Do While Not rs.EOF
      If rs("parentID") = 0 Then kID = rs("parentID")

Udskift dine links:
<A href=""index.asp?kID=" & kID & "&ukID=" & rs("id") & """>


Udskift:
If Session("ID") = rs("ID") Then RtrnKat(rs("ID"))

Med:
If Session("ID") = rs("ID") Then RtrnKat(rs("ID"))
If kID = rs("ID") Then RtrnKat(rs("ID"))
If ukID = rs("ID") Then RtrnKat(rs("ID"))
Avatar billede mri Nybegynder
03. april 2003 - 09:18 #31
Der er lige en fejl i ovenstående. Ignorer Request("kID") og Request("ukID") før Dim i toppen - de skal ikke med.
Avatar billede tblaster Nybegynder
03. april 2003 - 19:07 #32
Nu har jeg ændret det til følgende:

Dim kID
Dim ukID

Sub RtrnKat(pid)
  Dim rs
  Dim rs_sql
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs_sql = "SELECT Navn, Id, ParentID FROM Kategorier WHERE ParentID = " & pid & " Order By Prioritet asc, Navn asc"
  rs.Open rs_sql, Conn, 1, 1
  Do While Not rs.EOF
      If rs("parentID") = 0 Then kID = rs("parentID")
        Response.Write "<tr>" & _
                      "<TD width=18 height=15></TD>" & _
                      "<TD width=10 height=15>"
             
        If CInt(session("Kategorie")) = CInt(rs("Id")) Then
        Response.Write "<IMG height=5 src=""firkant_fyld.gif"" width=5></TD>"& _
                      "<TD bgColor=#dfebc8 height=15><B>"
        Else
        Response.Write "</TD>" & _
                        "<TD height=15><B>"
        End If

        If rs("ParentID") <> 0 Then
        Response.Write "<A href=""index.asp?kID=" & kID & "&ukID=" & rs("id") & """>" & "&nbsp;&nbsp;" & rs("Navn")
        Else
        Response.Write "<A href=""index.asp?kID=" & kID & "&ukID=" & rs("id") & """>" & rs("Navn")
        End If
       
        Response.Write "</A></B></TD>" & _
                      "</tr>"     
      If Session("ID") = rs("ID") Then RtrnKat(rs("ID"))
      If kID = rs("ID") Then RtrnKat(rs("ID"))
      If ukID = rs("ID") Then RtrnKat(rs("ID"))
      rs.MoveNext
  Loop
  rs.Close
  Set rs = Nothing
End Sub

Call RtrnKat(0)

Resultatet kan ses på www.just2funnny.dk/1 ... som det ses så sker der nu intet når man trykker på de forskellige menuer ...
Avatar billede tblaster Nybegynder
10. april 2003 - 18:04 #33
mri ... jeg har valgt at fortsætte problemet i et nyt spørgsmål da det er ved at blive lidt meget forvirrende ... tak for hjælpen indtil nu ...

hvis du vil hjælpe mig vider så er det nye spørgsmål her:

http://www.eksperten.dk/spm/339156
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