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
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
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
------------------
-=* IF there is a wrong way to do something, then someone will do it *=-
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...
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
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 för chilliASP! så kan du använda vissa funktioner för att sköta pagingen.
cya,
PatrikB
------------------
-=* IF there is a wrong way to do something, then someone will do it *=-