webForumDet fria alternativet

<hr> Följer inte familjenummer(ASP, Javascript)

ASP

18 svar · 653 visningar · startad av Frella

Medlem sedan feb. 200524 inlägg
Frågan#1

Jag har ett problem, jag har skrivit en kod som ska göra en <hr> efter varje familjenummer. Problemet just nu är att det skapas en <hr> efter varannan medlem och inte då familjenumren skiljer sig från varandra som det är tänkt att det ska göra. Tex att om det finns 4 medlemmar i familj 1 så ska <hr> dras efter dessa 4, innan den går till nästa familj osv.

Bifogar nuvarande kod, hoppas någon kan hjälpa.

<%
var current = 0;
var familj = 0;

while(rsMedlemmar && !rsMedlemmar.EOF)
{
familj = rsMedlemmar("Familjenummer");
	
	if(familj =! current) 
	{
		Response.Write("<tr><td colspan=9>");
		Response.Write("<hr noshade></td></tr>");
	}
%>
<tr id="famlista_cross_namn">
<td><%=rsMedlemmar("Efternamn")%></td>
<td><%=rsMedlemmar("Förnamn")%></td>
<td><%=rsMedlemmar("Adress")%></td>
<td><%=rsMedlemmar("Postnummer")%></td>
<td><%=rsMedlemmar("Ort")%></td>
<td><%=rsMedlemmar("Telefon")%></td>
<td><%=rsMedlemmar("Mobiltelefon")%></td>
<td><%=rsMedlemmar("Medlemsnummer")%></td>
<td><%=rsMedlemmar("Familjenummer")%></td>
</tr>

<%
current=familj;
rsMedlemmar.MoveNext();
}
%>
</table>
<%
rsMedlemmar.Close();
rsMedlemmar = null;
%>
Medlem sedan juni 200032 967 inlägg
#2

Borde inte det här funka?

<%
var current = 0;
var familj = 0;

while(rsMedlemmar && !rsMedlemmar.EOF)
{
familj = rsMedlemmar("Familjenummer");
	
	if(familj != current && current != 0) 
	{
		Response.Write("<tr><td colspan=9>");
		Response.Write("<hr noshade></td></tr>");
		current=familj;
	}
%>
<tr id="famlista_cross_namn">
<td><%=rsMedlemmar("Efternamn")%></td>
<td><%=rsMedlemmar("Förnamn")%></td>
<td><%=rsMedlemmar("Adress")%></td>
<td><%=rsMedlemmar("Postnummer")%></td>
<td><%=rsMedlemmar("Ort")%></td>
<td><%=rsMedlemmar("Telefon")%></td>
<td><%=rsMedlemmar("Mobiltelefon")%></td>
<td><%=rsMedlemmar("Medlemsnummer")%></td>
<td><%=rsMedlemmar("Familjenummer")%></td>
</tr>

<%
rsMedlemmar.MoveNext();
}
%>
</table>
<%
rsMedlemmar.Close();
rsMedlemmar = null;
%>

mvh

Medlem sedan dec. 200012 464 inlägg
#3

Hmm

if(familj =! current)
if(familj != current)
Medlem sedan feb. 200524 inlägg
#4

@anders: Nu får jag inte med en enda <hr>, den skriver bara listan rakt uppochned...

Medlem sedan juni 200032 967 inlägg
#5

Nä, självklart. Mitt misstag. Så här borde det se ut.

	if(familj != current) 
	{
		if (current != 0) {
			Response.Write("<tr><td colspan=9>");
			Response.Write("<hr noshade></td></tr>");
		}
		current=familj;
	}

edit: du kanske vill ha en linje ovanför den översta familjen? Ta bort den inre if-satsen i så fall.

mvh

Medlem sedan feb. 200524 inlägg
#6

Tyvärr så funkar det inte ändå, jag får fortfarande bara en rak lista utan några som helst linjer.

Medlem sedan juni 200032 967 inlägg
#7

Hur ser hela kodstycket ut nu alltså?

Medlem sedan feb. 200524 inlägg
#8

Ser ut som följer

<html>
<head>
<title>Familjelista NMK</title>
<link rel=stylesheet href="main.css" type="text/css">
</head>
<body id="famlista">
<%@ Language="javascript" %>
<%
var conn = Server.CreateObject("ADODB.Connection");
conn.open = "Driver={Microsoft Access Driver (*.mdb)};dbq=c:/inetpub/wwwroot/test/Medlemsregister.mdb";
var strSQL = "SELECT [QRY_BASE_Alla medlemmar].*, [QRY_BASE_Alla familjer].Efternamn FROM [QRY_BASE_Alla familjer] INNER JOIN [QRY_BASE_Alla medlemmar] ON [QRY_BASE_Alla familjer].Familjenummer = [QRY_BASE_Alla medlemmar].Familjenummer ORDER BY [QRY_BASE_Alla familjer].Familjenummer";

rsMedlemmar = conn.Execute(strSQL);
%>
<table id="famlista_tbl" cellpadding="0" cellspacing="0">
<tr>
<td><h3>Familjelista NMK</h3></td>
</tr>
<tr id="famlista_cross_rubrik">
<td><h5><h5>Efternamn</h5></td><td><h5>Förnamn</h5></td><td><h5>Adress</h5></td><td><h5>Postnr</h5></td><td><h5>Ort</h5></td><td><h5>Telnr</h5></td><td><h5>Mobilnr</h5></td><td><h5>Medlemsnr</h5></td><td><h5>Familjenr</h5></td>
</tr>
<%
var current = 0;
var familj = 0;

while(rsMedlemmar && !rsMedlemmar.EOF)
{
familj = rsMedlemmar("Familjenummer");
	
	if(familj != current) 
	{
		if (current != 0) {
			Response.Write("<tr><td colspan=9>");
			Response.Write("<hr noshade></td></tr>");
		}
		current=familj;
	}
%>
<tr id="famlista_cross_namn">
<td><%=rsMedlemmar("Efternamn")%></td>
<td><%=rsMedlemmar("Förnamn")%></td>
<td><%=rsMedlemmar("Adress")%></td>
<td><%=rsMedlemmar("Postnummer")%></td>
<td><%=rsMedlemmar("Ort")%></td>
<td><%=rsMedlemmar("Telefon")%></td>
<td><%=rsMedlemmar("Mobiltelefon")%></td>
<td><%=rsMedlemmar("Medlemsnummer")%></td>
<td><%=rsMedlemmar("Familjenummer")%></td>
</tr>

<%
rsMedlemmar.MoveNext();
}
%>
</table>
<%
rsMedlemmar.Close();
rsMedlemmar = null;
%>
</body>
</html>
Medlem sedan juni 200032 967 inlägg
#9

Gör lite testutskrifter för att se vad familj resp. current innehåller. Jag tycker dock att det ser rätt ut...

Medlem sedan feb. 200524 inlägg
#10

Testade det och det den skriver ut är True för familj och False för Current, alternativt 1 och 0. Men varför bool?

Medlem sedan feb. 200524 inlägg
#11

Allting verkar uppdateras innan utskriften, alltså blir resultatet alltid samma. Nån lösning med pekare eller nåt annat vis kanske?

Medlem sedan apr. 20031 660 inlägg
#12

HEJ!

Men, @nders, kan man verkligen skriva != i VBScript?

Det finns inte med i dokumentationen (på DevGuru), men det kanske är inbyggt underförstått att det ska fungera?

http://www.devguru.com/Technologies/vbscript/quickref/vbscript_list.html

Jag använder alltid <> istället.
http://www.devguru.com/Technologies/vbscript/quickref/inequality.html

Medlem sedan juni 200032 967 inlägg
#13

J.N., vi pratar inte VBScript.

Men, nej, man kan inte skriva != i VBScript.

Medlem sedan apr. 20031 660 inlägg
#14

HEJ!

@nders skrev:

J.N., vi pratar inte VBScript.

Men, nej, man kan inte skriva != i VBScript.

Nä, det gör vi ju inte, det står ju tom i rubriken. :r

Kontrollerade dessutom att det var inom <% %>, men missade helt att det kan vara Javascript ändå!

Medlem sedan feb. 200524 inlägg
#15

Ingen som har något nytt att komma med här? Lade detta på is ett tag då det inte funkade, och det gör det fortfarande inte nu när jag testat igen. Oerhört frustrerande.

Som jag sa innan så verkar det som att Current och Familj byter värde samtidigt, och värdet verkar heller inte sparas, alltså är de alltid lika, därav inga linjer...

Medlem sedan nov. 20017 144 inlägg
#16

Typkonvertera lite:

var current = 0;

while(rsMedlemmar && !rsMedlemmar.EOF)
{
	if(current!=parseFloat(rsMedlemmar("Familjenummer"))) 
	{
		if (current != 0) {
			Response.Write("<tr><td colspan=9>");
			Response.Write("<hr noshade></td></tr>");
		}
		current=parseFloat(rsMedlemmar("Familjenummer"));
	}
Medlem sedan feb. 200524 inlägg
#17

Tack!, funkade kanon nu. men varför kan man inte spara så som jag testade innan? Och vad är parseFloat? Förutom att den verkar spara currents värde på ett bättre sätt än en egen variabel.

Medlem sedan nov. 20017 144 inlägg
#18

Visst, du kan lägga in det i en variabel också.
Men när värdet kommer ifrån databasen så är datatypen en sträng/variant och då kan du inte göra en jämförelse med ett tal.
Du kan även använda parseInt() för heltal.

var current = 0;
var familj;
while(rsMedlemmar && !rsMedlemmar.EOF)
{
familj = parseInt(rsMedlemmar("Familjenummer"));
	if(current!=familj)
	{
		if (current != 0) {
			Response.Write("<tr><td colspan=9>");
			Response.Write("<hr noshade></td></tr>");
		}
		current=familj;
	}
Medlem sedan feb. 200524 inlägg
#19

Ok, jag försökte göra det till en int, men på samma sätt som i c++, då jag inte hittade nåt exempel. Men det funkade ju inget vidare, men då är jag med.

Tack återigen.

270 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)