webForumDet fria alternativet

SELECT

12 svar · 490 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#1

:)
Premiär i detta forum!

Varför visar inte denna SQL-string dubletter i databasen?

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"

Har testat att göra en fråga i access med exakt samma sträng och det funkar...

mvh

LarsGMedlem sedan dec. 200012 464 inlägg
#2

?

Dubletter i vadå?

Vilket resultat förväntar du dig och vilket får du?

Exemplifiera med datainnehåll.

devotionMedlem sedan jan. 20013 582 inlägg
#3

:(
Ok, kanske inte så bra förklarat...

SQL-satsen ska hämta information från en kundkorg, tblcart. I tblCart ligger bara antal, artikelnummer, benämning samt ett userId. Resten joinas fran tblPrice, tblArticle mfl.

Informationen loopas fram med ett recordset och presenteras i tabellform.

Problemet är att om jag lagt till samma artikel 2 gånger (dublett i databas) så visas bara en i presentationen.

När jag summerar priserna recordsetet så räknas alla priserna dvs även dubletterna. Så alla posterna loopas igenom.

Det fungerar som en SELECT DISTINCT fast det bara är en SELECT.

Kanske är något i asp-koden som gör det?
Mvh

devotionMedlem sedan jan. 20013 582 inlägg
#4

Hej!

Här kommer hela scrpitet...

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<% Option Explicit %>
<%session.lcid=1053%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Kundvagn</title>
<link href="../Stylesheet/stylemainFrame.css" rel="stylesheet" type="text/css">
</head>
<body>
<%

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

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

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DSN=IntranetSydostel"
objConn.Open 

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"

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=""text"">Kundvagnen är tom!</span><br>")
Else
	
	Response.Write("<span class=""text"">Följande artiklar finns i kundvagnen:</span><br><br>")

	Response.write "<table width=""690"" border=""0"" cellspacing=""0"" cellpadding=""0""><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=""50"" class=""tabellhuvud"">ta bort</td></tr>"
	

	Do While not objRS.EOF
		strENumber = "" & objRS("ENumber")
		strArticleName = "" & objRS("articleName")
		strUnit = "" & objRS("articleUnit")
		strSupplier = "" & objRS("SupplierName")
        
          'If strShow = "avtal" then  
        'curPrice = "" & FormatCurrency(Cdbl(objRS("articlePriceWithDiscount")))
         ' End If
           'If strShow = "netto" then
         curPrice = "" & FormatCurrency(Cdbl(objRS("articlePrice"))*0.01)
           'End If
Select case strSupplier
     Case "Storel"
          lngTotalStorel = lngTotalStorel + CLng(objRS("articlePrice")*0.01)
     Case "Solar"
          lngTotalSolar = lngTotalSolar + CLng(objRS("articlePrice")*0.01)

End Select

		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=""tabellhuvud""><td width=""60"" height=""18"" class=""tabellhuvud""></td><td width=""250"" class=""tabellhuvud""></td><td width=""45"" class=""tabellhuvud"">Summa</td><td width=""75"" class=""tabellhuvud"">" & FormatCurrency(lngTotalSolar) & "</td><td width=""75"" class=""tabellhuvud"">" & FormatCurrency(lngTotalStorel) & "</td><td width=""75"" class=""tabellhuvud""></td><td width=""60"" class=""tabellhuvud""></td><td width=""50"" class=""tabellhuvud""></td></tr>"
	Response.Write "</table>"
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""><a href=""removeArticle.asp?eNumber=" & objPricesDict.Item("eNumber") & """><img src=""../Images/soptunna.gif"" alt=""Klicka här för att lägga till artikeln!"" width=""31"" height=""17"" border=""0""></a></td>"

end sub
Else
Response.Write "Ej inloggad"
End if
%> 
</body>
</html>

Mvh

devotionMedlem sedan jan. 20013 582 inlägg
#5

:)
Någon?

mvh

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Du har ju någon kontroll om det kommer flera likadana ENumber efter varandra

if strENumber <> strLastEnumber then

Det är väl där du får ändra så att det passar.

devotionMedlem sedan jan. 20013 582 inlägg
#7

:(
Vetifan om jag reder ut det där skriptet... Har fått jättemycket hjälp av bla @nders. Tack! Problemet nu är att jag bygger på det med nya funktioner som krockar med andra och jag själv har inte tillräcklig kunskap för att reda ut det....

Känns som jag får börja om och ställa specifikationen för hur det ska fungera innan jag börjar koda... och läsa på mer.... eller göra det simpelt och enkelt.

Om någon vill hjälpa mig är det bara att höra av sig...

Tack alla som hjäpt till!

:x :x :x

@ndersMedlem sedan juni 200032 969 inlägg
#8

Jag förstår inte riktigt vad du är ute efter... Men:

Problemet är att om jag lagt till samma artikel 2 gånger (dublett i databas) så visas bara en i presentationen.

Så hade jag inte gjort. Ligger artikeln redan i kundvagnen skulle jag uppdaterat antalet på den posten i tabellen, inte lägga till en ny post. Det är kanske där du ska börja?

Mvh

devotionMedlem sedan jan. 20013 582 inlägg
#9

Hej du barmhärtige människa.... :)

Jo, jag har tänkt på det och även tänkt åtgärda det. Och det är väl rätt väg att gå.

Men jag kände på att det kanske skulle bli ett "inbyggt fel" om man inte åtgärdar det....

Som sagt. Mina ideér är större än kunskaperna...

Men det är väl i cart.asp som posterna skall uppdateras istället för att läggas till om de redan finns där.

MEN (detta ständiga men)

Hur gör jag för att uppdatera en post och samtidigt ha kvar de antal som redan finns i kundvagnen

Dvs ta om antalet av en vara i kundvagnen är 3 så lägger jag till en till

Efter uppdateringen skall det vara 4 i kundvagnen

Jag får trösta mig med att jag inte behöver ställa 2 frågor på samma sak eftersom jag lär mig hela tiden.... Det är dock mycket kvar att lära!

mvh

En mycket frustrerad

aasahMedlem sedan mars 20034 471 inlägg
#10

devotion skrev:

... Jo, jag har tänkt på det och även tänkt åtgärda det. Och det är väl rätt väg att gå. ...

Ja. I en relationsdatabas (vilket du använder) ska man inte lagra dubbletter.

@ndersMedlem sedan juni 200032 969 inlägg
#11

Hur gör jag för att uppdatera en post och samtidigt ha kvar de antal som redan finns i kundvagnen

http://www.webforum.nu/showthread.php?s=&postid=994544#post994544

I din UPDATE kan du ju alltid skriva, exempel:

UPDATE tbl SET fält = fält + 1 WHERE fält = värde

mvh

aasahMedlem sedan mars 20034 471 inlägg
#12

Med risk för att vara övertydlig:

@nders skrev:

... I din UPDATE kan du ju alltid skriva, exempel:

UPDATE tbl SET fält = fält + 1 WHERE fält = värde

Troligtvis vill du nog använda ett annat fält i Where-klausulen än i set-delen, dock... Annars uppdateras alla varor i den kvantiteten samtidigt....

Alltså exempel:
UPDATE tbl SET kvantitet = kvantitet + 1 WHERE produktnr = värde

devotionMedlem sedan jan. 20013 582 inlägg
#13

:e
Då fixade det till sig oxå...

Blir mycket bättre om man gör rätt ffrån början!!! :birp

Mvh

131 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)