webForumDet fria alternativet

komponent

4 svar · 230 visningar · startad av aleborg

aleborgMedlem sedan jan. 20013 341 inlägg
#1

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

------------------
Aleborg Solutions
Data-Doktorn
Min egen musik!
Mitt coverband

[Redigerat av aleborg den 30 jan 2002]

PatrikBMedlem sedan mars 20002 836 inlägg
#2

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 *=-

[Redigerat av PatrikB den 30 jan 2002]

aleborgMedlem sedan jan. 20013 341 inlägg
#3

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...

------------------
Aleborg Solutions
Data-Doktorn
Min egen musik!
Mitt coverband

PatrikBMedlem sedan mars 20002 836 inlägg
#4

<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 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 *=-

[Redigerat av PatrikB den 02 feb 2002]

aleborgMedlem sedan jan. 20013 341 inlägg
#5

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!

------------------
Aleborg Solutions
Data-Doktorn
Min egen musik!
Mitt coverband

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)