webForumDet fria alternativet

Problem med recordset

7 svar · 262 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#1

:)
God dag!

Har följande kod som inte funkar som jag vill.... (som vanligt ;) )

...och nu kommer koden!

<%

Dim objConn, strSearchField, strSQL, objRS, intCounter, objDict, strEnumber, strArticleName, strUnit, strSupplier, curPrice, strFC, strLowest, strLastENumber, strLastSupplier, objPricesDict, strOrder, bgcolor, strOption, strShow, lngTotalStorel, lngTotalSolar, strQuantity, pricesetting

If session("userId") <> "" Then

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DSN=IntranetSydostel"
objConn.Open 
if Request.Cookies("sydostel")("pricesetting") = "" then
	pricesetting = 0
else
	pricesetting = cint(Request.Cookies("sydostel")("pricesetting"))
end if

if pricesetting = 0 then
	' SQL-fråga för priser avtal
strSQL = "SELECT tblArticle.articleName, tblArticle.articleUnit, tblCart.userId, tblCart.quantity, tblDiscount.articleDiscount, tblPrice.articlePrice, tblSupplier.SupplierName, tblArticle.eNumber, 0.01*[articlePrice]*(1-([articleDiscount]*0.01)) AS articlePriceWithDiscount FROM (((tblArticle INNER JOIN tblCart ON tblArticle.eNumber = tblCart.eNumber) INNER JOIN tblPrice ON tblArticle.eNumber = tblPrice.eNumber) INNER JOIN tblDiscount ON tblPrice.articleCategory = tblDiscount.articleCategory) INNER JOIN tblSupplier ON tblPrice.articleSupplierId = tblSupplier.SupplierId WHERE tblCart.userId = " & session("userId") & " ORDER BY tblArticle.eNumber, 0.01*[articlePrice]*(1-([articleDiscount]*0.01)) ASC"

else
	' SQL-fråga för priser netto
strSQL = "SELECT tblArticle.articleName, tblArticle.articleUnit, tblCart.userId, tblCart.quantity, tblDiscount.articleDiscount, tblPrice.articlePrice, tblSupplier.SupplierName, tblArticle.eNumber FROM (((tblArticle INNER JOIN tblCart ON tblArticle.eNumber = tblCart.eNumber) INNER JOIN tblPrice ON tblArticle.eNumber = tblPrice.eNumber) INNER JOIN tblDiscount ON tblPrice.articleCategory = tblDiscount.articleCategory) INNER JOIN tblSupplier ON tblPrice.articleSupplierId = tblSupplier.SupplierId WHERE tblCart.userId = " & session("userId") & " ORDER BY tblArticle.eNumber, tblPrice.articlePrice ASC"

end if

lngTotalStorel = 0
lngTotalSolar = 0

Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, objConn, 3, 1 ' Recordsetet öppnar vi så här för att kunna få ut ett värde från egenskapen  recordcount.
intCounter = 0 ' skapa en liten posträknare som vi sedan räknar upp

Set objDict = Server.CreateObject("Scripting.Dictionary") 'ett dictionaryobjekt

If objRS.EOF then
	Response.Write("<span class=""text12px"">Varukorgen är tom!</span><br>")
Else
	Response.Write("<br>")
    Response.Write("<span class=""text12px"">Följande artiklar finns i varukorgen:<br>")

	Response.write "<table width=""780"" border=""0"" cellspacing=""0"" cellpadding=""0"" Class=""tabellRam""><tr class=""tabellhuvud""><td width=""60"" height=""18"" class=""tabellhuvud"">E-nr</td><td width=""250"" class=""tabellhuvud"">Benämning</td><td width=""45"" class=""tabellhuvud"">Enhet</td><td width=""75"" class=""tabellhuvud"">Solar</td><td width=""75"" class=""tabellhuvud"">Storel</td><td width=""75"" class=""tabellhuvud"">Ahlsell</td><td width=""60"" class=""tabellhuvud"">Lägst</td><td width=""60"" class=""tabellhuvud"">Antal</td><td width=""40"" class=""tabellhuvud"">Ändra</td><td width=""40"" class=""tabellhuvud"">ta bort</td></tr>"
	

	Do While not objRS.EOF
		strENumber = "" & objRS("ENumber")
		strArticleName = "" & objRS("articleName")
		strUnit = "" & objRS("articleUnit")
		strSupplier = "" & objRS("SupplierName")
        strQuantity = "" & objRS("quantity")

if pricesetting = 0 then
        curPrice = "" & FormatCurrency(Cdbl(objRS("articlePriceWithDiscount")))

Else         
curPrice = "" & FormatCurrency(Cdbl(objRS("articlePrice"))*0.01)
           End If
  
If pricesetting = 0 then
Select case strSupplier
     Case "Storel"
          lngTotalStorel = lngTotalStorel + Cdbl(objRS("articlePriceWithDiscount"))
     Case "Solar"
          lngTotalSolar = lngTotalSolar + Cdbl(objRS("articlePriceWithDiscount"))

End Select
Else
Select case strSupplier
     Case "Storel"
          lngTotalStorel = lngTotalStorel + Cdbl(objRS("articlePrice")*0.01)
     Case "Solar"
          lngTotalSolar = lngTotalSolar + Cdbl(objRS("articlePrice")*0.01)

End Select

End if

		if strENumber <> strLastEnumber then
			if intCounter <> 0  then
				' aha, här har det gjorts saker förut. Skicka iväg till utskriftsfunktionen.
				' markering av det jättesunkiga priset
				objDict.Item(strLastSupplier) = Replace(objDict.Item(strLastSupplier), "black", "red")
				call writePrices(objDict)
				objDict.RemoveAll
			end if
			set objDict = Server.CreateObject("Scripting.Dictionary")
			objDict.Add "eNumber", strENumber
			objDict.Add "articleName", strArticleName
			objDict.Add "articleUnit", strUnit
			intCounter = 1
			strLastENumber = strENumber
		else
			intCounter=intCounter + 1
		end if
		if not objDict.Exists(strSupplier) then
	      ' Bara en säkerhetskoll att vi inte lägger in något om det redan är inlagt för denna leverantör
			select case intCounter
			case 1
				' weee, det här är det jättebästa priset!
				strFC = "green"
				objDict.Add "lowest", strSupplier
			case else
				strFC = "black"
			end select
			strLastSupplier = strSupplier
			objDict.Add strSupplier, "<font color=""" & strFC & """>" & curPrice & "</font>"
		end if

		objRS.MoveNext
	Loop
	' Vi måste köra visningskoden här också för att få med den sista produkten.
	
	objDict.Item(strLastSupplier) = Replace(objDict.Item(strLastSupplier), "black", "red")
	call writePrices(objDict)
	Response.write "<tr class=""text10px_fet""><td width=""60"" height=""18"" ></td><td width=""250""></td><td width=""45"">Summa</td><td width=""75"">" & FormatCurrency(lngTotalSolar) & "</td><td width=""75"">" & FormatCurrency(lngTotalStorel) & "</td><td width=""75""></td><td width=""60""></td><td width=""50""></td></tr>"
	Response.Write "</table>"
Response.write "<span class=""statusText"">Samtliga priser är exklusive moms!<br></span>"
if pricesetting = 0 then
        Response.Write "<span class=""statusText"">Visar <b>avtalspriser<b></span>"
Else         
        Response.Write "<span class=""statusText"">Visar <b>Nettopriser<b></span>"
           End If
End if

objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing

Set objDict = Nothing
Set objPricesDict = Nothing

public sub writePrices (objPricesDict)
   If bgcolor = "#FFFFFF" then bgcolor = "#EFEFEF" else bgcolor = "#FFFFFF"
   Response.write "<tr onMouseOver=""this.style.backgroundColor='#D3DEF8';"" onMouseOut=""this.style.backgroundColor='';"" bgcolor=""" & bgcolor & """><td height=""20"" class=""itabell"">" & objPricesDict.Item("eNumber") & "</td><td class=""itabell"">" & objPricesDict.Item("articleName") & "</td><td class=""itabell"">" & objPricesDict.Item("articleUnit") & "</td>"
   if objPricesDict.Exists("Solar") then
       Response.write "<td class=""itabell"">" & objPricesDict.Item("Solar") & "</td>"
   else
       Response.write "<td class=""itabell""><i>Saknas</i></td>"
   end if
   if objPricesDict.Exists("Storel") then
       Response.write "<td class=""itabell"">" & objPricesDict.Item("Storel") & "</td>"
   else
       Response.write "<td class=""itabell""><i>Saknas</i></td>"
   end if
   if objPricesDict.Exists("Elektroskandia") then
       Response.write "<td class=""itabell"">" & objPricesDict.Item("Elektroskandia") & "</td>"
   else
       Response.write "<td class=""itabell""><i>Saknas</i></td>"
   end if
   Response.write "<td class=""itabell"">" & objPricesDict.Item("lowest") & "</td>"
Response.Write "<td class=""itabell""><input class=""formular"" name=""quantity" & objPricesDict.Item("eNumber") & """ Value=" & strQuantity & " type=""text"" size=""4"" maxlength=""4""></td>"
Response.Write "<td class=""itabell""><a href=""#"" onclick=""location.href='../cart/editQuantity.asp?eNumber=" & objPricesDict.Item("eNumber") & "&quantity=' + document.getElementById('quantity" & objPricesDict.Item("eNumber") & "').value;""><img src=""../Images/editQuantity.gif"" alt=""Klicka här för att ändra antal!"" border=""0""></a></td>"
Response.Write "<td class=""itabell""><a href=""deleteArticle.asp?eNumber=" & objPricesDict.Item("eNumber") & """><img src=""../Images/soptunna.gif"" alt=""Klicka här för att ta bort artikeln!"" border=""0""></a></td>"
end sub
Else
Response.Write "Ej inloggad"
End if
%>

Problemet är:

När jag loopar ut recordsetet skrivs rätt värde ut. När jag försöker få ut värdena i suben så stämmer ingenting!

Testade att skriva:

Response.Write strQuantity

i loopen och då listas rätt värde ut

När jag skriver:

& strQuantity &

i suben så kommer felaktiga värden ut

Vad kan detta bero på?
Håller på att bli galen!

Mvh

@ndersMedlem sedan juni 200032 969 inlägg
#2

Vad kan detta bero på?

Du sätter ju om värdet i loopen hela tiden, så strQuantity innehåller antagligen värdet från den sista posten.

Du kan ju försöka att skapa ett till dictionaryobjekt för antalen, där du lagrar artikelnumret som nyckel, och antal som value. SKicka sedan det dictionaryobjektet till subben också, och skriv ut värdena därifrån.

devotionMedlem sedan jan. 20013 582 inlägg
#3

Jo, din teori stämmer. Det är precis vad som händer!

Ok, det där dictionaryobjectet har jag inte så bra koll på...

Kan man bara skriva vidare eller skapar man ett nytt? Hur ska jag börja??

mvh

@ndersMedlem sedan juni 200032 969 inlägg
#4

Du kan nog förresten lägga in det i samma dictionary som du redan använder (om jag förstått rätt)

			set objDict = Server.CreateObject("Scripting.Dictionary")
			objDict.Add "eNumber", strENumber
			objDict.Add "articleName", strArticleName
			objDict.Add "articleUnit", strUnit
			objDict.Add "quantity", strQuantity

Och sedan byter du bara strQuantity i subrutinen till objPricesDict.Item("quantityl").

mvh

devotionMedlem sedan jan. 20013 582 inlägg
#5

:e
Ska testa det!

Det kommer nog att funka!

Mvh

devotionMedlem sedan jan. 20013 582 inlägg
#6

:(

Varför fungerar inte denna kodraden??

Response.Write "<td class=""itabell""><input class=""formular"" name=""quantity" & objPricesDict.Item("eNumber") & """ Value=" & objPricesDict.Item("quantity") & " type=""text"" size=""4"" maxlength=""4""></td>"

Jag vill att värdet för; objPricesDict.Item("quantity") skall visas i textrutan..

Istället visas: type="text"

Får inte till det...

Mvh

DonatelloMedlem sedan jan. 2005108 inlägg
#7
Response.Write "<td class=""itabell""><input class=""formular"" name=""quantity" & objPricesDict.Item("eNumber") & """ Value=""" & objPricesDict.Item("quantity") & """ type=""text"" size=""4"" maxlength=""4""></td>"

Blippar är jobbigt. Du missade några stycken. ;-)

devotionMedlem sedan jan. 20013 582 inlägg
#8

:e
Blippar ÄR jobbiga!

Nu funkar det!!

Tack Donatello!

Mvh

259 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
138 ms — hämta forumlista (db)
118 ms — hämta statistik (db)
139 ms — hämta tråd, inlägg och bilagor (db)