webForumDet fria alternativet

Gör man detta med array?

5 svar · 141 visningar · startad av MM

MMMedlem sedan maj 2000138 inlägg
#1

Hej.
Jag håller på med en sida där du kan välja olika tillbehör till en produkt, och sedan kan göra en prisberäkning på totalen. Alla priser finns lagrade i en databas, men jag vill inte hämta priserna från databasen varje gång man ändrar ett tillbehör.
Går det att hämta alla priser först (ca 60 olika artikelpriser) och sedan lagra dem på sidan, så att priserna i formuläret hämtas från ett array(?) istället för från databasen?
Och i så fall, hur?

/ Jonas

------------------
667 - The neighbour of the beast.

drainMedlem sedan apr. 200165 inlägg
#2

Det klart det går med en array frågan är om du vill :). Det finns i alla fall en metod recordset.getrows som fixar en array (matris) av DB. Dessutom så är det snabbare om man skall hålla på och ändra så där hela tiden som du verkar vilja göra.
Då måste du använda recordset men det går kanske bra!!

här är något jag hittade: har inte checkat detta något men det verkar vara en bra hjälp till dig:

' Recordset Object
Dim rs, ds
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "Names", connStr, , , adCmdTableDirect

     ds = rs.GetRows

     rs.Close
     Set rs = Nothing

  ' Now Showing Records from our DataSet
  Dim i, j
     ' Creating table to show records
     Response.Write "\<table align=""center"" border=""1"" width=""70%"""
     Response.Write " cellspacing=""1"" cellpadding=""3"" bordercolor=""silver""\>"
     Response.Write vbcrlf
     Response.Write "\<tr\>\<td colspan=""" & (UBound(ds, 1) + 1)
     Response.Write """ align=""center""\>Names\</td\>\</tr\>"
     Response.Write "\<tr\>\<td\>ID\</td\>\<td\>First Name\</td\>\<td\>Last Name\</td\>\</tr\>"

     ' Showing Each Row
     For i = 0 To UBound(ds, 2)
     Response.Write "\<tr\>" & vbcrlf
        ' Showing Each Column
        For j = 0 To UBound(ds, 1)
           Response.Write "\<td\>"
           Response.Write ds(j, i)
           Response.Write "\</td\>"
           Next
        Response.Write "\</tr\>" & vbcrlf
     Next

     Response.Write "\</table\>"

  Erase ds

%>

------------------
crack the liar´s smile

MMMedlem sedan maj 2000138 inlägg
#3

nja.. var inte riktigt så jag menade.
Ska försöka förklara lite tydligare:

Jag vill alltså inte skriva ut priserna på sidan, utan endast lagra priserna osynligt.
När man sedan väljer ett tillbehör skall rätt värde hämtas (från ett array eller nåt sånt?) och skrivas ut i ett formulär. Användaren kommer att byta tillbehör ganska många gånger innan man sedan räknar ut slutpriset; summan av formulärfälten.
Därför vill jag inte hämta värdena från databasen varje gång man byter tillbehör.
Går detta, eller är jag ute och cyklar nu?

------------------
667 - The neighbour of the beast.

drainMedlem sedan apr. 200165 inlägg
#4

Men det var liksom det som jag menade. Du behöver ju inte kopiera den kod jag visade. Skit i och skriva ut saker och ting om du inte vill det viktiga är denna snutten:

' Recordset Object
Dim rs, ds
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "Names", connStr, , , adCmdTableDirect

ds = rs.GetRows
'OBS här har "ds" blivit en matris som
'du kan modifiera och hämta värden från
'hur du vill...

rs.Close
Set rs = Nothing

Det andra i kodsnutten var bara för att du skulle ha lite och titta på för att modifiera din matris. :)
Hoppas att jag förstått och att du förstår mig :) annars tja...vad fan vem vet.

------------------
crack the liar´s smile

MMMedlem sedan maj 2000138 inlägg
#5

ahaa..ok du får ursäkta, men jag är lite grön ;)

hur kan jag hämta värdet från de olika "ds" till formuläret? De kommer att anropas med onClick...

en annan fundering:
när det handlar om så pass få priser, kan man inte lägga upp dem i en lista som variabler, utan att hämta dem från en databas?
typ:
var pris1=10
var pris2=12
var pris3=15
osv.
och sedan hämta värdena:
onClick="byt_varde('form1','','var pris1')"
eller nåt sånt?
det vore nästan ännu bättre, så slipper jag databasen...

------------------
667 - The neighbour of the beast.

MMMedlem sedan maj 2000138 inlägg
#6

löste det så här;
<%
Set Dic = Server.CreateObject( "Scripting.Dictionary" )

' min prislista
Dic.Add "pris1", "12"
Dic.Add "pris2", "24"
Dic.Add "pris3", "36"
%>
---------
länken som byter pris i formuläret ser ut så här:
<a href="#" onClick="MM_changeProp('varde1','','value','<%=Dic( "pris2" )%>','INPUT/TEXT')">pris2</a>
--------
och scriptet som styr bytet:
function MM_changeProp(objName,x,theProp,theValue) { //v3.0
var obj = MM_findObj(objName);
if (obj && (theProp.indexOf("style.")==-1 || obj.style)) eval("obj."+theProp+"='"+theValue+"'");
---------

ifall någon annan undrar över samma sak, menar jag.
Tack i alla fall för hjälpen. Jag gör nog detta utan databas denna gång. Om jag nu hade använt en databas (vilkket jag aknske gör i ett senare skede), hur skulle då länken sett ut? (Mest för att jag är nyfiken och gärna vill veta allt...)

------------------
667 - The neighbour of the beast.

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