Toon posts:

[SQL, ASP] Union commando

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben momenteel bezig om een website te bouwen met behulp van ASP en Access. Ik ben bezig om een dynamisch menubalk te maken die een plaatje en de tekst van het plaatje uit een database haalt. Het combineren van de 6 tabellen werkt d.m.v. het UNION command nu goed. Alleen het probleem dat ik heb is dat ik in mijn code op verschillende plaatsen plaatjes staan die uit de database gehaalt worden. Deze staan op een vaste plaats gedefineerd in mijn code. Dus haalt hij het verkeerde plaatje op. Als ik iets toevoeg aan mijn database verschuift alles en haalt hij de verkeerde plaatjes op.

Nu is mijn vraag kan ik door een commando dat samen werkt met het SQL union commado zodat niet alles gelijk opschuif of kan dat ik kan opgeven uit welke tabel hij hem moet halen? Of moet ik dan met verschilllende queries gaan werken?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<%
    ' Variabelen aanmaken
    dim strDataPath, objConnection

    'Adodb database path en type database toekennen
    strDataPath= "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\wwwroot\aap\Database\test.mdb; Persist Security Info=True"

    'Adodb connectie aanmaken en connection-string aanmaken
    set objConnection=Server.CreateObject("ADODB.Connection")
    strConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;"_
        + " Data Source= " & strDataPath & ";"_
        + " Mode=Share Deny None;User Id=;PASSWORD=;"

    objConnection.ConnectionTimeout = 15
    objConnection.CommandTimeout =  10
    objConnection.Mode = 3 'adModeReadWrite 
        if objConnection.state = 0 then
            objConnection.Open strConnectString
        end if

    dim strAccess, objRS, Menu_Naam, Menu_Link, Menu_Image, Menu_Sub,
 Menu_Sub_Image, Menu_Sub_Link, Menu_Sub1, Menu_Sub1_Image, Menu_Sub1_Link
    
    Menu_Naam=1 
    Menu_Link=2
    Menu_Image=3 
    Menu_Sub=4
    Menu_Sub_Image=5 
    Menu_Sub_Link=6
    Menu_Sub1=7 
    Menu_Sub1_Image=8 
    Menu_Sub1_Link=9
    
    strAccess= "SELECT * FROM Datacom UNION ALL SELECT * FROM Storage UNION ALL 
SELECT * FROM Internet UNION ALL SELECT * FROM Telecom UNION ALL SELECT * FROM Security UNION ALL SELECT * FROM Special UNION ALL 
SELECT * FROM Test UNION ALL SELECT * FROM Plaatjes"
    set objRS=Server.CreateObject("ADODB.RecordSet")
    objRS.Open strAccess,objConnection,3,3

    arrRows=objRS.GetRows()

     
%>

[ Voor 69% gewijzigd door Verwijderd op 05-11-2004 15:47 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Misschien dat je wat voorbeelden en code moet laten zien? Het is mij niet helemaal duidelijk wat de bedoelt.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 10:50

Freee!!

Trotse papa van Toon en Len!

P_de_B schreef op 05 november 2004 @ 15:36:
Misschien dat je wat voorbeelden en code moet laten zien? Het is mij niet helemaal duidelijk wat de bedoelt.
"niet helemaal" :? Het is mij gewoon helemaal niet duidelijk en ik dacht toch echt dat ik iets van SQL af wist.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Mr. Liu schreef op 05 november 2004 @ 15:38:
[...]

"niet helemaal" :? Het is mij gewoon helemaal niet duidelijk en ik dacht toch echt dat ik iets van SQL af wist.
offtopic:
vrij vertaald postte ik eigenlijk: ik snap er geen reet van wat je nu bedoelt, maar dat klintkt zo onviendelijk ;)

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 10:50

Freee!!

Trotse papa van Toon en Len!

P_de_B schreef op 05 november 2004 @ 15:39:
[...]
offtopic:
vrij vertaald postte ik eigenlijk: ik snap er geen reet van wat je nu bedoelt, maar dat klintkt zo onviendelijk ;)
offtopic:
Oeps, klein foutje in mijn vertaalsoftware en helaas is mijn kristallen bol in reparatie :P


EDIT:
In de bijgeplaatste code mis ik in ieder geval een paar "WHERE" clausules.

[ Voor 12% gewijzigd door Freee!! op 05-11-2004 15:51 ]

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Verwijderd

Topicstarter
Mr. Liu schreef op 05 november 2004 @ 15:40:
[...]

offtopic:
Oeps, klein foutje in mijn vertaalsoftware en helaas is mijn kristallen bol in reparatie :P


EDIT:
In de bijgeplaatste code mis ik in ieder geval een paar "WHERE" clausules.
Ik dacht dat het where commando alleen bedoel was om te filteren of heb ik dit verkeerd?

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 10:50

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op 05 november 2004 @ 15:55:
[...]
Ik dacht dat het where commando alleen bedoel was om te filteren of heb ik dit verkeerd?
Dat klopt, maar het is over het algemeen extreem onwaarschijnlijk dat je en alle kolommen en alle rijen uit meerdere tabellen wilt hebben.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Verwijderd

Topicstarter
Mr. Liu schreef op 05 november 2004 @ 16:00:
[...]

Dat klopt, maar het is over het algemeen extreem onwaarschijnlijk dat je en alle kolommen en alle rijen uit meerdere tabellen wilt hebben.
Ik heb een query gemaakt van alle tabellen die ik nodig heb voor mij menubalk. daarom heb ik alles wat in deze query staat nodig om de menubalk te laden. Het is een vrij grote query, maar meerdere tabellen is wel overzichtelijk lijkt mij...

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Elke verschillende tabel is een apart "hoofdstukje" in je menubalk?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 10:50

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op 05 november 2004 @ 16:04:
[...]
Ik heb een query gemaakt van alle tabellen die ik nodig heb voor mij menubalk. daarom heb ik alles wat in deze query staat nodig om de menubalk te laden. Het is een vrij grote query, maar meerdere tabellen is wel overzichtelijk lijkt mij...
Als je soortgelijke info in verschillende tabellen met dezelfde indeling hebt staan, klopt je datamodel gewoon totaal niet.
P_de_B schreef op 05 november 2004 @ 16:05:
Elke verschillende tabel is een apart "hoofdstukje" in je menubalk?
Dat maak ik er wel uit op.

[ Voor 18% gewijzigd door Freee!! op 05-11-2004 16:07 ]

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Verwijderd

Topicstarter
P_de_B schreef op 05 november 2004 @ 16:05:
Elke verschillende tabel is een apart "hoofdstukje" in je menubalk?
Ja dit klopt inderdaad omdat de personen die daddelijk deze site bij gaan houden dan in een tabel hun inhoud kunnen aanpassen, dus ook hun menubalk. Zij hebben met gevraagd om dit overzichtelijk te houden daarom leken meerdere tabellen met een goede oplossing

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op 05 november 2004 @ 16:07:
[...]


Ja dit klopt inderdaad omdat de personen die daddelijk deze site bij gaan houden dan in een tabel hun inhoud kunnen aanpassen, dus ook hun menubalk. Zij hebben met gevraagd om dit overzichtelijk te houden daarom leken meerdere tabellen met een goede oplossing
Het is niet de goede oplossing, je kunt beter 1 tabel maken met menuitems waarbij je bij elk item bijhoudt in welke hoofdgroep het betreffende item valt.

Je krijgt dan 2 tabellen

HoofdMenuItems
HoofdMenuItemId
Omschrijving


MenuItems
MenuItemId
Omschrijving
HoofdMenuItemId

Begrijp je welke kant ik op wil?

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Uhm volgens mij nie helemaal...

Ik begrijp hieruit dat ik dus 1 tabel moet maken met de hoofmenu knoppen die ja als je op de website komt ziet, en dan vervolgens een tabel met de rolldown knoppen en vervolgens ook een menu met de rolldownknoppen onder de rolldownknoppen die al bestaan moet maken? Als dit bedoeld wordt dan heb ik nog wel een vraag :

Volgens mij gaat het UNION commando de code in de volgorde van de query af voorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
11
addmenu hoofdmenuitem (uit menu datacom)
plaatje (uit menu plaatjes)
addmenu item (uit menu datacom)
addmenu item (uit menu datacom)
addmenu item (uit menu datacom)

addmenu hoofdmenuitem (uit menu test)
plaatje (uit menu plaatjes)
addmenu item (uit menu test)
addmenu item (uit menu test)
addmenu item (uit menu test)

Dit was wat ik in het begin bedoelde omdat het menu geladen werd pakte hij bij plaatje een verkeerd plaatje uit datacom en test. Daarom was mij vraag of ik daar aan kon geven dat hij het plaatje uit de kolom plaatjes moest halen.

Nu staan dus alle tabellen die ik voor mij menu nodig hem naast elkaar in een Union query omdat ik dezelfde kolomnamen gebruik bij elke tabel.

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 10:50

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op 05 november 2004 @ 16:29:
Uhm volgens mij nie helemaal...
Dat was ondertussen al wel duidelijk (NOFI).
Nu staan dus alle tabellen die ik voor mij menu nodig hem naast elkaar in een Union query omdat ik dezelfde kolomnamen gebruik bij elke tabel.
Ik denk dat je eerst eens een paar goede studieboeken over SQL en datamodellen door moet nemen. Je bent hier zo ongelovelijk op de verkeerde weg dat het eigenlijk niet te corrigeren is zonder direct persoonlijk contact (en daar hebben we hier op het forum helaas niet de mogelijkheid toe).

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Mr Liu heeft gelijk, je mist behoorlijk veel basisdingen, maar ik heb even wat tijd over dus ik zal proberen je toch even op gang te helpen.


Als je de tabellen volgens de structuur die ik gegeven heb aanmaakt, kun je met de volgende query je hele menu ophalen:

code:
1
2
3
4
SELECT HoofdMenuItems.Omschrijving as HoofdItem, MenuItem.Omschrijving as Item 
FROM HoofdMenuItems 
INNER JOIN MeniItems ON MenuItems.HoofdMenuItemId = HoofdMeniItems.HoofdMenuItemId
ORDER BY HoofdMenuItems.Omschrijving


Ik ga ervan uit dat je weet hoe een recordset object aan te maken

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Set MyRS = MyConnectionObject.Execute (sql_query_van_hierboven)

dim currentHoofdItem

currentHoofdItem=""

DO UNTIL MyRS.EOF
      IF MyRS("HoofdItem") <> currentHoofdItem THEN
               Response.Write MyRS("HoofdItem")
               currentHoofdItem = MyRS("HoofdItem")
      END IF
       Response.Write MyRS(MenuItem)
       MyRs.MoveNext
LOOP


Bovenstaande is niet compleet, er zit o.a. nog geen error handling in, en je plaatjes snap ik nog niet echt, maar het biedt je wel een basis denk ik. Probeer te begrijpen wat de code doet, je ziet dan snel genoeg hoe het in elkaar zit.

Je eigen code met verschillende tabellen is natuurlijk slecht onderhoudbaar, wat als er een hoofmenu punt bijkomt? Je moet dan een nieuwe tabel aanmaken en de query aanpassen.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
P_de_B schreef op 05 november 2004 @ 21:45:
Mr Liu heeft gelijk, je mist behoorlijk veel basisdingen, maar ik heb even wat tijd over dus ik zal proberen je toch even op gang te helpen.

Bovenstaande is niet compleet, er zit o.a. nog geen error handling in, en je plaatjes snap ik nog niet echt, maar het biedt je wel een basis denk ik. Probeer te begrijpen wat de code doet, je ziet dan snel genoeg hoe het in elkaar zit.

Je eigen code met verschillende tabellen is natuurlijk slecht onderhoudbaar, wat als er een hoofmenu punt bijkomt? Je moet dan een nieuwe tabel aanmaken en de query aanpassen.
Dank je wel _/-\o_ , dit is precies wat we bedoelde. Nu heb ik nog een klein probleempje en dat is als ik de DO UNTIL LOOP in ga krijg ik de volgende foutmelding te zien:
code:
1
2
3
4
5
Microsoft VBScript runtime error '800a01a8' 

Object required: 'SELECT HoofdMenuItem' 

/aap/Simpele test/home.asp, line 24


De query zelf werkt perfect, wat doen we verkeerd?
Onze code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%
    MyRS= "SELECT HoofdMenuItems.Omschrijving AS HoofdMenuItem, 

MenuItems.Omschrijving AS Item FROM HoofdMenuItems 
INNER JOIN MenuItems ON HoofdMenuItems.HoofdMenuItemID = MenuItems.HoofdMenuItemID 
ORDER BY HoofdMenuItems.Omschrijving;"
    
    set objRS=Server.CreateObject("ADODB.RecordSet")
    objRS.Open MyRS,objConnection,3,3


dim currentHoofdItem

currentHoofdItem=""

DO UNTIL MyRS.EOF
      IF MyRS("HoofdItem") <> currentHoofdItem THEN
               Response.Write MyRS("HoofdItem")
               currentHoofdItem = MyRS("HoofdItem")
      END IF
       Response.Write MyRS(Item)
       MyRs.MoveNext
LOOP
%>

[ Voor 4% gewijzigd door Verwijderd op 08-11-2004 10:15 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
In mijn voorbeeld is MyRS het recordsetobject. Je moet dus overal objRS gebruiken.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • J2pc
  • Registratie: Oktober 2002
  • Niet online

J2pc

UT Tux Edition

Welk regel is 124? Ik ga uit van Response.Write MyRs("HoofdItem")

Zie ik 't verkeerd, of heb je eerst in MyRs je Query gezet, Vervolgens een recordset in objRS gezet?

Waarom vraag je dan een MyRs.eof, als dat je Query-string is?

Probeer in de loop eens MyRS te vervangen door objRS

edit:

te laat :+

[ Voor 9% gewijzigd door J2pc op 08-11-2004 10:44 ]

"The computer is incredibly fast, accurate, and stupid. Man is unbelievably slow, inaccurate, and brilliant. The marriage of the two is a challenge and opportunity beyond imagination." © Stuart G. Walesh


  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 27-04 16:49
Volgens mij heb je in de source je SQL statement over meerdere regels verdeeld, zonder ze aan elkaar te knopen.

Je moet iets bouwen van:
code:
1
2
3
4
MyRS= "SELECT HoofdMenuItems.Omschrijving AS HoofdMenuItem, " & _
         "MenuItems.Omschrijving AS Item FROM HoofdMenuItems " & _
         "INNER JOIN MenuItems ON HoofdMenuItems.HoofdMenuItemID = MenuItems.HoofdMenuItemID " & _
         "ORDER BY HoofdMenuItems.Omschrijving;"

Let op: Na elke regel een spatie laten, ander plakt-ie de sting aan elkaar en wordt je SQL statement ongeldig.

Je kan ook een respons.write MyRs doen om te kijken wat er in zit en dit in Access testen...

Verwijderd

Topicstarter
Het is al opgelost door overal gebruik te maken van objRS :) en mijn sql statment had ik zo gemaakt omdat anders de pagina te breed werd.

Verwijderd

Topicstarter
Dank je wel voor je hulp _/-\o_ _/-\o_ . Alleen ik heb nu nog een klein probleempje met mijn code. Ik wil graag submenu;s maken. Hiervoor wil een sql query maken. dit moet volgens mij gebeuren met een LEFT JOIN commando omdat mijn relatie 1:M is. Ik heb Mij database zo ingericht met drie tabellen namelijk:
HoofdMenu, MenuItem en SubMenu. Het is zo dat de kolom SubMenuID gelinkt is aan de kolom MenuItemID in de tabel MenuItem. Deze is op zijn buurt voor gelinkt aan de kolom HoofdMenuItemID in de tabel HoofdMenu. Ik heb nu de volgende qeury:

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT HoofdMenuItems.Omschrijving AS HoofdItem, 
    MenuItems.Omschrijving AS Item, 
    MenuItems.Link as MenuLink, 
    HoofdmenuItems.Link as HoofdMenuLink, 
    MenuItems.Plaatjes as Plaatjes, 
    SubMenu.MenuNaam as SubMenuNaam, 
    SubMenu.MenuLink as SubMenuLink 
    
    FROM ((HoofdMenuItems 
    LEFT JOIN MenuItems ON HoofdMenuItems.HoofdMenuItemID=MenuItems.HoofdMenuItemID)
    LEFT JOIN SubMenu ON MenuItems.SubItemsID=Submenu.MenuItemsID) ORDER BY HoofdMenuItems.Omschrijving;

ALs ik deze kopieer naar access SQL query dan krijg ik de foutmelding:

Enter parameter value
MenuItems.submenuID

Volgens mij is deze verwijzing niet helmaal juist maar ik weet niet precies welke verwijzing hij zou moeten pakken.

De verwijzing zou zo moeten zijn:
code:
1
LEFT JOIN (naam tabel) ON (naamtabel1).(Kolom)=(naamtabel2).(kolom)


Maarre ik weet niet precies welke verwijzing ik moet gebruiken, Ik heb van de P&W FAQ - SQL al veel informatie gevonden maar ik kom er niet uit. Wie kan mij helpen?

[ Voor 4% gewijzigd door Verwijderd op 09-11-2004 12:10 ]


  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Verwijderd schreef op 09 november 2004 @ 12:00:
Maarre ik weet niet precies welke verwijzing ik moet gebruiken, Ik heb van de P&W FAQ - SQL al veel informatie gevonden maar ik kom er niet uit. Wie kan mij helpen?
Ik weet niet precies hoe je tabel SubMenuItems er nu uitziet, maar ik ga ervanuit dat je verder bent gegaan met de oplossing van P_de_B en dat het geheel er nu zo uitziet.

HoofdMenuItems
HoofdMenuItemId
Omschrijving

MenuItems
MenuItemId
Omschrijving
HoofdMenuItemId
? plaatjes (aan de query te zien)

SubMenuItems
SubMenuItemId
Omschrijving
MenuItemId


Wannneer je dan ook de hoofmenuitems zonder menuitems of submenuitems wilt meenemen, moet je inderdaad een left join nemen.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT 
  HoofdMenuItems.Omschrijving AS HoofdItem, 
  HoofdmenuItems.Link as HoofdMenuLink, 
  MenuItems.Omschrijving AS Item, 
  MenuItems.Link as MenuLink, 
  MenuItems.Plaatjes as Plaatjes, 
  SubMenu.MenuNaam as SubMenuNaam, 
  SubMenu.MenuLink as SubMenuLink
FROM 
  HoofdMenuItems 
  LEFT OUTER JOIN MenuItems
    ON (HoofdMenuItems.HoofdMenuItemID = MenuItems.HoofdMenuItemID)
  LEFT OUTER JOIN SubMenu 
    ON (MenuItems.MenuItemID = Submenu.MenuItemID)
ORDER BY
  HoofdMenuItems.Omschrijving,
  MenuItems.Omschrijving;

Verwijderd

Topicstarter
Dank je voor je hulp alleen als ik deze query naar acces wil kopieren geeft hij de volgende foutmelding:

Syntax Error (missing operator) in Query expression '(HoofdMenuItems.HoofdMenuItemID = MenuItems.HoofdMenuItemsID) LEFT OUTER JOIN submenu ON MenuItems.MenuItemID = SubMenu.MenuItemID)'.


wat gaat er hier niet goed?

Oww ik zi het nu typfoutje |:( Maar nu komt de melding:

Enter parameter Value
SubMenu.MenuItemID

Het lijkt me dat de verwijzing niet goed staat maar kan iemand zeggen hoe ikd eze regel wel in moet vullen?

[ Voor 27% gewijzigd door Verwijderd op 09-11-2004 13:23 ]


Verwijderd

Oww ik zi het nu typfoutje |:( Maar nu komt de melding:

Enter parameter Value
SubMenu.MenuItemID

Het lijkt me dat de verwijzing niet goed staat maar kan iemand zeggen hoe ikd eze regel wel in moet vullen?
Access kan het veld niet vinden en denkt dat het een parameter is.
Dus controleer of je in je submenu tabel inderdaad een veld MenuItemID hebt.

Verwijderd

Topicstarter
Verwijderd schreef op 09 november 2004 @ 14:57:
[...]

Access kan het veld niet vinden en denkt dat het een parameter is.
Dus controleer of je in je submenu tabel inderdaad een veld MenuItemID hebt.
Inderdaad ik had de verwijzing naar de vekeerde table in ieder geval bedankt _/-\o_ _/-\o_

Verwijderd

Topicstarter
Ik heb nu alweer een probleem :?
Ik ben met de code bezig om mijn menu dynamisch uit de database te halen hiervoor heb ik een do until loop gemaakt die eerst gaat het hoofditem laat daar nu het alle subitems. Nu wil ik het zo maken omdat ik onder de subitems weer een submenutje heb hangen dat hij eerst het hoofmenu items laad en daarna gaat kijken wel subitems er onder hangen maar dat hij per subitem ook meteen controleerd of er een submenu onder de subitems hangt ik heb nu de volkgende code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 <%
    MyRS= "SELECT HoofdMenuItems.Omschrijving AS HoofdItem, MenuItems.Omschrijving AS Item,
    MenuItems.Link as MenuLink, 
HoofdmenuItems.Link as HoofdMenuLink,
    MenuItems.Plaatjes as Plaatjes,
 SubMenu.MenuNaam as SubMenuNaam,
 SubMenu.MenuLink as SubMenuLink 
FROM ((HoofdMenuItems LEFT JOIN MenuItems ON HoofdMenuItems.HoofdMenuItemID=MenuItems.HoofdMenuItemID)
 LEFT JOIN SubMenu ON MenuItems.MenuItemID=Submenu.SubItemID) 
ORDER BY HoofdMenuItems.Omschrijving,MenuItems.Omschrijving;"
    
    set objRS=Server.CreateObject("ADODB.RecordSet")
    objRS.Open MyRS,objConnection,3,3

dim currentHoofdItem, nummer, Plaatjes, subnummer

Plaatjes = 4
currentHoofdItem="0" 
nummer="0"
subnummer= "0"

DO UNTIL objRS.EOF 
      
      IF ObjRS("HoofdItem") <> currentHoofdItem THEN %>
            window.fw_menu_<% =nummer %> = new Menu("root",154,18,"Verdana, Arial, Helvetica, sans-serif",11,"#ffffff","#ffffff","#0000cc","#000084");
         <% currentHoofdItem = objRS("HoofdItem")
         nummer=nummer +1
      END IF %>
           fw_menu_<% =nummer %>.addMenuItem("<% response.write(ObjRS("Item")) %>","location=<% response.write(ObjRS("MenuLink")) %>");
                                            <% if not objRS("SubMenuNaam") <> Null then %>
                                            window.fw_menu_<% =nummer %>_<% =subnummer %> new Menu(154,18,"Verdana, Arial, Helvetica, sans-serif",11,"#ffffff","#ffffff","#0000cc","#000084"); 
                                            fw_menu_<% =nummer %>_<% =subnummer %>.addMenuItem("<% Response.Write(ObjRS("SubMenuNaam")) %>","location='<% Response.Write("SubMenuLink")%>'");
                                        <% END IF
         ObjRs.MoveNext

LOOP

%>


de uitkomst van dit script is :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    window.fw_menu_3 = new Menu("root",154,18,"Verdana, Arial, Helvetica, sans-serif",11,"#ffffff","#ffffff","#0000cc","#000084");
         
           fw_menu_4.addMenuItem("Interface Conversion","location=special_I_c.asp");
                                            
           fw_menu_4.addMenuItem("PABX Solutions","location=special_p_s.asp");
                                            
           fw_menu_4.addMenuItem("Proctocol Conversion","location=special_p_c.asp");
                                            
           fw_menu_4.addMenuItem("Remote Access","location=special_r_a.asp");
                                            
           fw_menu_4.addMenuItem("X.25 Switching","location=special_x_s.asp");
                                            
            window.fw_menu_4 = new Menu("root",154,18,"Verdana, Arial, Helvetica, sans-serif",11,"#ffffff","#ffffff","#0000cc","#000084");
         
           fw_menu_5.addMenuItem("Channel Director","location=storage_c_d.asp");
                                            
           fw_menu_5.addMenuItem("Channel Extensions","location=storage_c_e.asp");
                                            
           fw_menu_5.addMenuItem("Channel Extensions","location=storage_c_e.asp");
                                            
           fw_menu_5.addMenuItem("Channel Extensions","location=storage_c_e.asp");
                                            
           fw_menu_5.addMenuItem("Channel Extensions","location=storage_c_e.asp");
                                            
           fw_menu_5.addMenuItem("Fibre Switch","location=storage_f_s.asp");
                                            
            window.fw_menu_5 = new Menu("root",154,18,"Verdana, Arial, Helvetica, sans-serif",11,"#ffffff","#ffffff","#0000cc","#000084");


Zo als je kunt zie laad hij storage met daarin 4 keer channel extension, hieronder hangt een submenu maar deze laat hij niet. Hij laad dus nu alleen 4 keer channel extension zien. wat doe ik in deze loop verkeerd?

[ Voor 13% gewijzigd door Verwijderd op 10-11-2004 11:08 ]


  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Ik heb de code wat aangepast, zodat deze wat makkelijker leesbaar is. Het vaak afwisselen van html en asp in de code is vaak niet zo prettig leesbaar, bovendien is het ook nog iets langzamer. Ik heb de code verder niet kunnen testen aangezien ik geen iis/asp heb draaien zelf.

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<%
dim currentHoofdItem, nummer, Plaatjes, subnummer, MyRS

MyRS="SELECT" & _
     "  HoofdMenuItems.Omschrijving AS HoofdItem," & _
     "  HoofdMenuItems.Link as HoofdMenuLink," & _
     "  MenuItems.Omschrijving AS Item," & _
     "  MenuItems.Link as MenuLink," & _
     "  MenuItems.Plaatjes as Plaatjes," & _
     "  SubMenu.MenuNaam as SubMenuNaam," & _
     "  SubMenu.MenuLink as SubMenuLink" & _
     "FROM ((HoofdMenuItems" & _
     "  LEFT JOIN MenuItems ON HoofdMenuItems.HoofdMenuItemID = MenuItems.HoofdMenuItemID)" & _
     "  LEFT JOIN SubMenu ON MenuItems.MenuItemID = Submenu.SubItemID)" & _
     "ORDER BY" & _
     "  HoofdMenuItems.Omschrijving," & _
     "  MenuItems.Omschrijving;"

set objRS = Server.CreateObject("ADODB.RecordSet")
objRS.Open MyRS, objConnection, 3, 3

currentHoofdItem = Null
subnummer = 0
Plaatjes = 4
nummer = 0

do until objRS.EOF
  if ObjRS("HoofdItem") <> currentHoofdItem then
    nummer = nummer+1
    currentHoofdItem = objRS("HoofdItem")
    Response.Write("window.fw_menu_" & nummer & " =new Menu(""root"",154,18,""Verdana, Arial, Helvetica, sans-serif"",11,""#ffffff"",""#ffffff"",""#0000cc"",""#000084"");")
    Response.Write("fw_menu_" & nummer & ".addMenuItem(""" & ObjRS("Item") & """,""location=" & ObjRS("MenuLink") """);")
  end if
  if not isNull(objRS("SubMenuNaam")) then
    Response.Write("window.fw_menu_" & nummer & "_" & subnummer & " = new Menu(154,18,""Verdana, Arial, Helvetica, sans-serif"",11,""#ffffff"",""#ffffff"",""#0000cc"",""#000084"");")
    Response.Write("fw_menu_" & nummer & "_" & subnummer ".addMenuItem(""" & ObjRS("SubMenuNaam") & """,""location=""" & SubMenuLink & """);")
  end if
  ObjRs.MoveNext
loop
%>

De volgende punten zijn hierbij aangepast:
- not isNull(objRS("SubMenuNaam")) om te kijken of de naam null is ipv: not objRS("SubMenuNaam") <> Null
- eerste keer addMenuItem binnen de eerste if statement gezet, zodat dit maar 1 keer zal worden uitgevoerd
- nummer = nummer + 1 naar voren gezet, zodat subitem hetzelde nummer krijgen ipv 1 hoger


Waar je verder naar zou kunnen kijken is de id's die je al in de database hebt staan. In feite zou je die ook kunnen gebruiken als nummering van het javascript menutje. Het tellertje "nummer" heb je dan niet meer nodig, en ook currentHoofdItem en subnummer worden dan overbodig. Door de id's op nullwaarden te controleren weet je namelijk of je met een hoofditem/menuitem/subitem te maken hebt:
- MenuItems.HoofdMenuItemID en/of Submenu.SubItemID is null: dan is het een hoofditem
- Alleen Submenu.SubItemID is null: dan is het een menuitem
- geen null waarden in de 3 id's: dan is het een subitem

De 3 id's moet je dan dus in de select meenemen.


Maar eigenlijk ik denk zelf dat je dit veel makkelijker met UNION kan oplossen of 3 losse queries, omdat de huidige manier alleen maar meer overhead geeft, en meer vergt van de database door de joins.

Verwijderd

Topicstarter
Als ik de bovenstaande code gebruik dan krijg k de volgende foutmelding

code:
1
2
3
4
5
6
7
8
9
Microsoft VBScript compilation error '800a03ee' 

Expected ')' 

/aap/menubalk.asp, line 89 

Response.Write("fw_menu_" & nummer & ".addMenuItem(""" & ObjRS("Item")
 & """,""location=" & ObjRS("MenuLink") """);")
--------------------------------------------------------------------------------------------------------------^


Hij mist volgens mij een "(" maar k kan niet ondekken waar

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Verwijderd schreef op 10 november 2004 @ 14:03:
Als ik de bovenstaande code gebruik dan krijg k de volgende foutmelding

code:
1
2
3
4
5
6
7
8
9
Microsoft VBScript compilation error '800a03ee' 

Expected ')' 

/aap/menubalk.asp, line 89 

Response.Write("fw_menu_" & nummer & ".addMenuItem(""" & ObjRS("Item")
 & """,""location=" & ObjRS("MenuLink") """);")
--------------------------------------------------------------------------------------------------------------^


Hij mist volgens mij een "(" maar k kan niet ondekken waar
ik was in ieder geval het & tekentje vergeten aan het einde van de regel zie ik, zo klopt hij geloof ik wel:
Response.Write("fw_menu_" & nummer & ".addMenuItem(""" & ObjRS("Item") & """,""location=" & ObjRS("MenuLink") & """);")

[ Voor 20% gewijzigd door pjotrk op 10-11-2004 16:22 ]


Verwijderd

Topicstarter
pjotrk schreef op 10 november 2004 @ 15:14:
[...]


ik was in ieder geval het & tekentje vergeten aan het einde van de regel zie ik, zo klopt hij geloof ik wel:
Response.Write("fw_menu_" & nummer & ".addMenuItem(""" & ObjRS("Item") & """,""location=" & ObjRS("MenuLink") & """);")
Hij blijft de zelfde foutmelding geven en hij vewijst naar het begin van menulink

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Verwijderd schreef op 10 november 2004 @ 16:23:
[...]


Hij blijft de zelfde foutmelding geven en hij vewijst naar het begin van menulink
Ik zag wel dat ik nog een & was vergeten in de laatste response.write, maar verder kan ik geen fouten meer vinden, misschien omdat ik er zelf ook overheen kijk. zo is het stukje code na ook de laatste '&' eraan toe te hebben gevoegd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
do until objRS.EOF
  if ObjRS("HoofdItem") <> currentHoofdItem then
    nummer = nummer+1
    currentHoofdItem = objRS("HoofdItem")
    Response.Write("window.fw_menu_" & nummer & " =new Menu(""root"",154,18,""Verdana, Arial, Helvetica, sans-serif"",11,""#ffffff"",""#ffffff"",""#0000cc"",""#000084"");")
    Response.Write("fw_menu_" & nummer & ".addMenuItem(""" & ObjRS("Item") & """,""location=" & ObjRS("MenuLink") & """);")
  end if
  if not isNull(objRS("SubMenuNaam")) then
    Response.Write("window.fw_menu_" & nummer & "_" & subnummer & " = new Menu(154,18,""Verdana, Arial, Helvetica, sans-serif"",11,""#ffffff"",""#ffffff"",""#0000cc"",""#000084"");")
    Response.Write("fw_menu_" & nummer & "_" & subnummer & ".addMenuItem(""" & ObjRS("SubMenuNaam") & """,""location=" & SubMenuLink & """);")
  end if
  ObjRs.MoveNext
loop

Verwijderd

Topicstarter
pjotrk schreef op 10 november 2004 @ 16:48:
[...]


Ik zag wel dat ik nog een & was vergeten in de laatste response.write, maar verder kan ik geen fouten meer vinden, misschien omdat ik er zelf ook overheen kijk. zo is het stukje code na ook de laatste '&' eraan toe te hebben gevoegd:
Hij geeft nu alle menuItems en submenuItems weer alleen deze staan in een lange rij achter elkaar. Ook wordt het nummer niet opgehoogd zodat alles op 0 blijft staan, deze zouden bij elk nieuw hoofdmenuItem opgehoogd moeten worden en hieronder zou dan de menitems en submenuItmes moeten komen staan.
De code ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<%
dim currentHoofdItem, nummer, Plaatjes, subnummer, ObjRS, MyRS

MyRS = "SELECT HoofdMenuItems.Omschrijving AS HoofdItem,
HoofdMenuItems.Link as HoofdMenuLink, MenuItems.Omschrijving AS Item,
 MenuItems.Link as MenuLink, MenuItems.Plaatjes as Plaatjes, 
SubMenu.MenuNaam as SubMenuNaam, SubMenu.MenuLink as SubMenuLink FROM ((HoofdMenuItems 
LEFT JOIN MenuItems ON HoofdMenuItems.HoofdMenuItemID = MenuItems.HoofdMenuItemID) 
LEFT JOIN SubMenu ON MenuItems.MenuItemID = Submenu.SubItemID) 
ORDER BY HoofdMenuItems.Omschrijving, MenuItems.Omschrijving;"

set objRS = Server.CreateObject("ADODB.RecordSet")
objRS.Open MyRS, objConnection, 3, 3

currentHoofdItem = Null
subnummer = 0
Plaatjes = 4
nummer = 0

do until objRS.EOF
  if ObjRS("HoofdItem") <> currentHoofdItem then
    currentHoofdItem = objRS("HoofdItem")
    nummer = nummer+1  
    Response.Write("window.fw_menu_" & nummer & " =new Menu(""root"",154,18,""Verdana, Arial, Helvetica, sans-serif"",11,""#ffffff"",""#ffffff"",""#0000cc"",""#000084"");")
  end if
    Response.Write("fw_menu_" & nummer & ".addMenuItem(""" & ObjRS("Item") & """,""location=" & ObjRS("MenuLink") & """);")
  if not isNull(objRS("SubMenuNaam")) then
    Response.Write("window.fw_menu_" & nummer & "_" & subnummer & " = new Menu(154,18,""Verdana, Arial, Helvetica, sans-serif"",11,""#ffffff"",""#ffffff"",""#0000cc"",""#000084"");")
    Response.Write("fw_menu_" & nummer & "_" & subnummer & ".addMenuItem(""" & ObjRS("SubMenuNaam") & """,""location=" & SubMenuLink & """);")
  end if
    response.write("<br>")
  ObjRs.MoveNext
loop
%>


Wie kan ons helpen?

[ Voor 87% gewijzigd door Verwijderd op 12-11-2004 09:09 ]


Verwijderd

Topicstarter
*Schop*

Verwijderd

Topicstarter
De loop werkt nu we hebben achter hoofdItem ipv null dit "" neergezet en dit blijkt te werken, wel willen nu de ook een aantal plaatjes in de loop zetten het gaat om plaatjes die 1 keer per hoofdmenuitem willen laden dus een keer per loop geladen dienen te worden. Het gaat om de volgende plaatjes:

code:
1
2
3
fw_menu_" & nummer & ".bgImageUp="" & ObjRS(Plaatjes,26)
fw_menu_" & nummer & ".bgImageOver=" & ObjRS(Plaatjes,27)
fw_menu_" & nummer & ".hideOnMouseOut=true


Waar moeten deze in de loop komen staan en moeten we hiervoor haakjes oid openen en sluiten? wie kan ons helpen??
Pagina: 1