---
title: "komponent"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/27748-komponent"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "aleborg"
published: "2002-01-30T06:41:00.000Z"
updated: "2002-02-03T09:49:00.000Z"
replies: 4
views: 240
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/27748-komponent"
---

# komponent

## #1 — aleborg, 2002-01-30T06:41Z

Ciao, jag är ny på det här med Visual Basic och komponenter, skulle behöva lite hjälp med att få följande kod så optimal som möjligt!
Kom gärna med förslag och idéer på hur man kan göra den bättre.

\<font size="1" face="Verdana, Arial, Helvetica, sans-serif"\>Kod:\<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600"\>
Public Conn As New Connection

Public Function KategoriNamn(visa, subvisa)
    If subvisa \<\> "" Then
    dSQL = "Select \* From Category Where CategoryID=" & subvisa
    Else
    dSQL = "Select \* From Category Where CategoryID=" & visa
    End If
    Set cai = Conn.Execute(dSQL)
        If cai("CategoryDesc") \<\> "" Then
        bryt = "\<br\>"
        End If
    cSQL = "Select \* From Category Where CategoryID=" & visa
    
    Set cat = Conn.Execute(cSQL)
    If subvisa \<\> "" Then
        KategoriNamn = "\<table width='100%' border='0' cellspacing='0' cellpadding='0'\>\<tr\>\<td class='TextBold'\>\<a href='produkter.asp?category=" & cat("CategoryID") & "' class='meny'\>\<b\>" & cat("CategoryName") & "\</b\>\</a\> » " & subKategoriNamn(subvisa) & "\</td\>\</tr\>\<tr\>\<td class='Text'\>" & bryt & cai("CategoryDesc") & bryt & bryt & "\</td\>\</tr\>\</table\>\<br\>"
    Else
        KategoriNamn = "\<table width='100%' border='0' cellspacing='0' cellpadding='0'\>\<tr\>\<td class='TextBold'\>\<b\>" & cat("CategoryName") & "\</b\>\</td\>\</tr\>\<tr\>\<td class='Text'\>" & bryt & cai("CategoryDesc") & bryt & bryt & "\</td\>\</tr\>\</table\>\<br\>"
    End If
    cat.Close
    Set cat = Nothing
    cai.Close
    Set cai = Nothing
End Function

Public Function subKategoriNamn(visa)
    If visa \<\> "" Then
    cSQL = "Select \* From Category Where CategoryID=" & visa
    Set cat = Conn.Execute(cSQL)
        
        subKategoriNamn = "\<b\>" & cat("CategoryName") & "\</b\>"
    
    cat.Close
    Set cat = Nothing
    End If
End Function

Public Function subCategory(visa)
    
    cSQL = "Select \* From Category Where CategoryBelongs=" & visa
    Set cat = Conn.Execute(cSQL)
        
numcols = 2
If Not cat.EOF Then
   subCategory = "\<table width='560' border='0' cellspacing='0' cellpadding='0'\>"
   Do Until cat.EOF
      subCategory = subCategory & "\<TR\>"
      For i = 1 To numcols
         subCategory = subCategory & "\<TD class='Text'\>"
         If cat.EOF Then
            subCategory = subCategory & " "
         Else
            subCategory = subCategory & "\<a href='produkter.asp?category=" & visa & "&subcategory=" & cat("CategoryID") & "' class='meny'\>\<img src='webshop_images/item_small.gif' width='17' height='10' border='0'\>\<b\> " & cat("CategoryName") & "\</b\>\</a\>"
            cat.MoveNext
         End If
         subCategory = subCategory & "\</TD\>"
      Next
      subCategory = subCategory & "\</TR\>"
   Loop
   subCategory = subCategory & "\</TABLE\>"
End If
    
    cat.Close
    Set cat = Nothing
    
End Function

Public Function show_Page_Prop(visa)
    pSQL = "Select \* From Property Where PropertyID=1"
    Set prop = Conn.Execute(pSQL)
            show_Page_Prop = prop("" & visa & "")
    prop.Close
    Set prop = Nothing
End Function

Public Function Meny(id)
    SQL = "Select \* From Category Where CategoryBelongs Is Null And CategoryActive='yes' Order By CategoryName"
    Set Menu = Conn.Execute(SQL)
    Do Until Menu.EOF
        If CInt(id) = Menu("CategoryID") Then
            Meny = Meny & "\<tr\>\<td class='menybold'\>\<a href='meny.asp' class='menybold'\>\<img src='webshop_images/folder_open_10x17.gif' width='17' height='10' border='0'\>" & Menu("CategoryName") & "\</a\>\</td\>\</tr\>" & subMeny(id)
        Else
            Meny = Meny & "\<tr\>\<td class='menybold'\>\<a href='meny.asp?menu=" & Menu("CategoryID") & "' class='menybold'\>\<img src='webshop_images/folder_10x17.gif' width='17' height='10' border='0'\>" & Menu("CategoryName") & "\</a\>\</td\>\</tr\>"
        End If
    Menu.MoveNext
    Loop
    Menu.Close
    Set Menu = Nothing
 
End Function

Public Function subMeny(id)
    SQL = "Select \* From Category Where CategoryBelongs=" & id & " And CategoryActive='yes' Order By CategoryName"
    Set Menu = Conn.Execute(SQL)
    Do Until Menu.EOF
            subMeny = subMeny & "\<tr\>\<td class='meny'\>\<a href='produkter.asp?category=" & Menu("CategoryID") & "' target='Produkter' class='meny'\>\<img src='webshop_images/item_small.gif' width='17' height='10' border='0'\>  " & Menu("CategoryName") & "\</a\>\</td\>\</tr\>"
    Menu.MoveNext
    Loop
    Menu.Close
    Set Menu = Nothing
 
End Function

Public Function Show_Prod_List(id)
    SQL = "Select \* From Products Where Product_Bel=" & id & " Order By Product_Art"
    Set prod = Conn.Execute(SQL)
    If Not prod.EOF Then
        Show_Prod_List = "\<table width='400' border='0' cellspacing='1' cellpadding='2' \> "
        Show_Prod_List = Show_Prod_List & "\<tr bgcolor='" & show_Page_Prop("Prod_prev_head") & "'\>"
        Show_Prod_List = Show_Prod_List & "\<td class='TextProd' width='20%' align='center'\>Art.\</td\>"
        Show_Prod_List = Show_Prod_List & "\<td class='TextProd' width='60%'\>Titel\</td\>"
        Show_Prod_List = Show_Prod_List & "\<td class='TextProd' width='20%' align='right'\>Pris\</td\>"
        Show_Prod_List = Show_Prod_List & "\</tr\>"
        Do Until prod.EOF
    
        Show_Prod_List = Show_Prod_List & "\<tr bgcolor='" & show_Page_Prop("Prod_prev_list") & "'\>"
        Show_Prod_List = Show_Prod_List & "\<td class='Text' width='20%' align='center'\>" & prod("Product_Art") & "\</td\>"
        Show_Prod_List = Show_Prod_List & "\<td class='Text' width='60%'\>" & prod("Product_Title") & "\</td\>"
        Show_Prod_List = Show_Prod_List & "\<td class='Text' width='20%' align='right'\>" & prod("Product_Pris") & " Kr\</td\>"
        Show_Prod_List = Show_Prod_List & "\</tr\>"

        prod.MoveNext
        Loop
        Show_Prod_List = Show_Prod_List & "\</table\>"
    End If
    prod.Close
    Set prod = Nothing
End Function

Private Sub Class_Initialize()
    ' Open database connection
    Set Conn = CreateObject("ADODB.Connection")
    Connecta = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=f:\\hemsidor\\egna\\webshop\\www\\webshop.mdb"
    Conn.Open (Connecta)
End Sub

Private Sub Class_Destroy()
    ' Close database connection
    Conn.Close
    Set Conn = Nothing
End Sub

Permalänk: https://www.webforum.nu/p/27748

## #2 — PatrikB, 2002-01-30T13:40Z

Tanken med att skapa en komponent är att man vill separera presentation, logik och data.

Nu har du delar av presentationen i komponenten vilket jag inte tycker är så lyckat.
Själv skulle jag antingen låta funktionen "kasta" ut ett recordset, en collection eller en array som man sedan loopar igenom när datat ska presenteras i klienten (browser, formWin etc.), dvs du kan styra utseendet vid ett senare skede, användning av samma komponent på flera olika siter med olika utseende, i ett exe-program m.m.

\[r\]
En annan sak är att jag skulle lägga till en property som man kan ange en connection string till databasen för att i ett senare skede kanske byga dbms
\[/r\]

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/400041

## #3 — aleborg, 2002-01-31T14:35Z

Hur ska man göra för att få fram en loop och paging då?
Om man använder följande exempel:

1 databas med produkter som ska loopas igen och visas, låt oss säga följande kolumner i tabellen Products:
ProdID
Prod_Art
Prod_Title
Prod_Description
Prod_Price

Hur får jag ut varje "rad" i tabellen så att jag kan loopa det i en ASP sida och vid ett visst antal rader bryta och använda paging!

Det här skulle jag bli jätteglad om någon kunde visa ett exempel för det är nått jag kommer att ha stor användning för i dom flesta av mina komponenter som jag har tänkt att skapa...

Permalänk: https://www.webforum.nu/p/400042

## #4 — PatrikB, 2002-02-02T22:14Z

\<font size="1" face="Verdana, Arial, Helvetica, sans-serif"\>Kod:\<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600"\>
Private mstrConnString as string

Public Property Let ConnectionString(ByVal sConnString as string)
	mstrConnString = sConnString
End Property

Private Property Get ConnectionString
	ConnectionString = mstrConnString
End Property

Public Function ListProducts() As Variant
	Dim objRSlist as recordset
	Dim strSQLlist as string

	strSQLlist = "SELECT \* FROM Products"

	Set objRSlist = GetConn.Execute(sSQL)
		If Not objRSlist.EOF Then
			ListProd = objRSlist.GetRows()
		End If
	Set objRSlist = Nothing
End Function

Private Function GetConn()
	Dim objConn as adodb.connection
	Set objConn = CreateObject("ADODB.Connection")
		objConn.Open ConnectionString

		Set GetConn = objConn
End Function

På ASP-sidan:
\<font size="1" face="Verdana, Arial, Helvetica, sans-serif"\>Kod:\<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600"\>
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" & \_
	"Data Source=D:\\db\\db-file.mdb"

Set MittObject = Server.CreateObject("Min.Kontroll")
	MittObject.ConnectionString = strConnString

	varProducts = MittObject.ListProducts()
Set MittObject = Nothing

If IsArray(varProducts) Then
	For N = 0 TO UBound(varProducts,2)
		intProdID = varProducts(0,N)
		strProdArt = varProducts(1,N)

		Response.Write "Produkt ID: " & intProdID & \_
			"\<BR\>Artikel Nr.: " & strProdArt
	Next
Else
	Response.Write "Inga produkter hittades."
End If

ngt liknande. OBS! e inte expert på att bygga komponenter ;e . Ingen felhantering finns och detta är skrivet direkt utan test.
På detta sätt har du i varje fall inte "låst" din komponent till "en site design" utan kan ju användas av åtskilliga siter eftersom presentationen/utseendet styrs på asp sidan.

Från mitt [paging-script](http://script.webforum.nu/wf/Forum1/HTML/000063.html) för chilliASP! så kan du använda vissa funktioner för att sköta pagingen.

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/400043

## #5 — aleborg, 2002-02-03T09:49Z

Tack PatrikB!
Själva sökvägen till DB:n hade jag tänkt att lägga faktiskt så som du sa men gjorde det inte under själva testningen!

Ska genast sätta mig in i din kod! :e
Tackar för hjälpen!

Permalänk: https://www.webforum.nu/p/400044

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/27748-komponent
