HEJ! Håller med andreas, är ju rent utsagt idiotiskt att ha ett ett textfält istället för tal om det bara ska innehålla nummer... Joo jag kan förstå att ni tycker så :-) men funkar det att sortera så då? även om det är ett text fält som innehåller tal? Det går att sortera det. Men eftersom det är en sämre lösning är det att föredra att byta fälttyp. Sen kan man slänga på WHERE CLng(poäng) > 400 så får man bara dom som är större än 400 också. Tack för alla svaren! Är inte säker på att det här funkar i Access men prova. :) får bara top 50 % att funka här, fattar inte vart och hur jag skall lägga in det andra. Varför överväger du inte att ändra fälttypen till tal? lagrar du annat än tal i kolumnen? Har du begynnande nollor? eller vad är din anledning? Du får skapa två recordsets. Ett för den första delen och ett för den andra delen. Sen kan du plocka från båda recordsets på samma gång. Testa istället med: FIck det att funka :-) kanske kan man fixa det på ett annat sätt oxå?? fixa till det så här iaf. Om du skapar två recordsets som jag beskrev tidigare, kan du lösa det såhär: jag hajar inte hur jag skall fixa med SQL och RecSet2 som du säger att jag skall göra :-) du får gärna fixa koden om du vill och orkar så får jag se hur du menar. Okay, forsöker lägga in i din kod: Detta kanske är till någon hjälp? HEJSAN Det finns ett alternativ, använd GetRows funktionen för att få en Vektor, det är snabbare samt att du kan hoppa i den som du vill. Eller kör + 45 för att visa det n+45:e värdet, för att kunna visa två st värde på samma TR-rad... nää det funkade inte alls :-( hur jag än trixa med koden så fick jag det inte att funka :( hittade artiklarna som visar hur man använder GetRows Detta kanske är ett steg i rätt riktning: hejsan Andreas! Den raden ska bort. ;o) hur menar du med ojämt antal och lägga in en koll efter for loopen :-) Var det inte så här jag hade skrivit? joo du skrev så :-) då blir det: Det är dimensionerna som skall bytta plats. Har fixat till beräkning för ojämna poster oxå. YES!!!!!!!!!!!!!!!!!!!!!!SQL problem (Order By )
har i accessdatabasen en tabell "listan" har där 2 fält "namn" & "poäng" inget id fält(datatyp Räknare) finns.
vill kunna lista så att det högsta poängen kommer överst typ:
Kalle 3025
Jocke 2005
Anders 1256
osv.
vill att det är som det är nu i accessdatabasen att fälen är text fält (datatyp text)
fixar jag så att fältet poäng är datatyp tal så funkar det med min SQL men jag vill ha det som datatyp text
<code> "Select * From listan Order By poäng DESC" </code>
vill oxå att om det finns poäng som är minder än 400 så skall de inte synas, någon som har ett bra tips till mig ang. detta?
/TommySv: SQL problem (Order By )
Sv: SQL problem (Order By )
Sv: SQL problem (Order By )
Access:
"SELECT * FROM listan ORDER BY CLng(poäng) DESC" Sv: SQL problem (Order By )
<code>
SELECT * FROM listan WHERE CLng(poäng) > 400 ORDER BY CLng(poäng) DESC"
</code>
// JarleSv: SQL problem (Order By )
tänkte på en annan grej oxå.
om man listar alla och att det kanske är 70 st som har 400 poäng eller mer. vill skriva ut det på en sida i en snygg tabell, kan man då göra så att hälften hamnar i cell och den andra hälften hamnar i en annan, så att det inte alla hamnar under varandra.
och att det fixar sig så att den med högst poäng får en 1 och nummer två en 2:a osv.bakom <code> <%= rs("Namn") %> </code>
skriver alltså ut det med
<code> <%= rs("Namn") %> </code>
och
<code> <%= rs("Poäng") %> </code>
hajar ni hur jag menar :-)
//TommySv: SQL problem (Order By )
<code>
SELECT TOP 50 PERCENT * FROM listan WHERE CLng(poäng) > 400 ORDER BY CLng(poäng) DESC"
</code>
gör att du får den förste halvan av raderna. Sen kan du plocka ut resten genom att göra på följande sätt:
<code>
SELECT * FROM listan WHERE (NOT (poäng =
(SELECT TOP 50 PERCENT poäng FROM listan WHERE CLng(poäng) > 400 ORDER BY CLng)))
</code>
Inte så snyggt, men det borde fungera.
Men sen kan man ju också bygga upp sidan så den fyller upp en TABLE med två kolumner. Man lägger alltså en TABLE i en TABLE.
// JarleSv: SQL problem (Order By )
här är all kod iaf.
<code> <%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/databas.mdb") &";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "SELECT TOP 50 PERCENT * FROM listan WHERE CLng(poäng) > 400 ORDER BY CLng(poäng) DESC" , Connect, 1, 3
%>
<style type="text/css">
<!--
.ram {
border: 1px solid #333333;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #000000;
text-decoration: none;
list-style-position: outside;
list-style-type: circle;
}
-->
</style>
<body bgcolor="#eeeeee" leftmargin="0" topmargin="0">
<table width="440" border="0" cellpadding="0" cellspacing="0" class="ram">
<%
DO Until RecSet.EOF
nummer = nummer + 1
If nummer Mod 2 = 0 Then
color = "#DCDBD6"
Else
color = "#eeeeee"
End If
%>
<tr align="left" valign="top" bgcolor="<%=color%>">
<td width="200"><%=RecSet("Namn")%> </td>
<td width="240"><%=RecSet("Poäng")%></td>
</tr>
<%
RecSet.MoveNext
Loop
%>
</table>
<%
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
%></code>Sv: SQL problem (Order By )
Lättast är att lista poster:
1, 2
3, 4
5, 6
<code>
<style type="text/css">
<!--
.ram {
border: 1px solid #333333;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #000000;
text-decoration: none;
list-style-position: outside;
list-style-type: circle;
}
-->
</style>
<body bgcolor="#eeeeee" leftmargin="0" topmargin="0">
<table width="440" border="0" cellpadding="0" cellspacing="0" class="ram">
<%
Dim RecSet
Dim Connect
Dim AltRow
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/databas.mdb") &";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "SELECT * FROM listan WHERE CLng(poäng) > 400 ORDER BY CLng(poäng) DESC" , Connect
Do Until RecSet.EOF
If AltRow Then
color = "#DCDBD6"
AltRow = False
Else
color = "#eeeeee"
AltRow = True
End If
Response.Write "<tr align=""left"" valign=""top"" bgcolor=""<%=color%>"">"
Response.Write "<td width=""200""><%=RecSet("Namn")%></td>"
Response.Write "<td width=""240""><%=RecSet("Poäng")%></td>"
RecSet.MoveNext
If RecSet.EOF Then
Exit Do
Else
Response.Write "<td width=""200""><%=RecSet("Namn")%></td>"
Response.Write "<td width=""240""><%=RecSet("Poäng")%></td>"
End If
Response.Write "</tr>"
RecSet.MoveNext
Loop
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
%>
</table>
</code>Sv: SQL problem (Order By )
Men jag undrar om jag inte har missuppfattat dig lite.
Vilket av alternativen passar?:
1. Mark 4323 7. Nisse 2100
2. Ola 4100 8. Mats 1900
3. Jens 3800 9. Hans 1500
4. ...
5. ...
6. ...
eller......
1. Mark 4323 2. Ola 4100
3. Jens 3800 4. ...
5 ... ...
Som jag fattade det var det alternativ 1, men jag kanske fattade fel?
Eller du kanske menade nånting helt annat? :)
// JarleSv: SQL problem (Order By )
Får ett fel, här är den info jag får ang. detta
(det spelar ingen roll nu för mig om det är text eller tal som gäller för fältet poäng i accessdatabasen)
Feltyp:
Kompileringsfel i Microsoft VBScript (0x800A0409)
Oavslutad strängkonstant
/hockey/html/poang.asp, line 35, column 68
Response.Write "<tr align=""left"" valign=""top"" bgcolor=""<%=color
detta är line 35:
<code>Response.Write "<tr align=""left"" valign=""top"" bgcolor=""<%=color%>"">"
</code>Sv: SQL problem (Order By )
<code>
Response.Write "<tr align=""left"" valign=""top"" bgcolor=""" & color & """>"
</code>Sv: SQL problem (Order By )
<code> Response.Write "<tr align=""left"" valign=""top"" bgcolor=""" & color & """>"
Response.Write "<td width=""200"">"
Response.Write (RecSet("Namn"))
Response.Write "<td width=""200"">"
Response.Write (RecSet("Poäng"))
</code>
då jag testar detta så skrivs det ut bra men det kummer lite fel.
vill inte som nu att den skriver ut efter poäng så här:
Kalle 1500 Ola 1200
Anders 1000 Stefan 750
vill att det blir så här:
Kalle 1500 Anders 1000
Ola 1200 Stefan 750
nu blir det ju placering:
1 2
3 4
vill att det blir:
1 3
2 4
hajjar någon hur jag menar :-)
/TommySv: SQL problem (Order By )
<code>
Response.Write "<tr align=""left"" valign=""top"" bgcolor=""" & color & """>"
Response.Write "<td width=""200"">"
Response.Write (RecSet("Namn"))
Response.Write "</td><td width=""200"">"
Response.Write (RecSet("Poäng"))
Response.Write "</td><td width=""200"">"
Response.Write (RecSet2("Namn"))
Response.Write "</td><td width=""200"">"
Response.Write (RecSet2("Poäng"))
Response.Write "</td>"
</code>
sen måste du kontrollera så alla rader och inget mera hämtas från både recordsetten.
// JarleSv: SQL problem (Order By )
/TommySv: SQL problem (Order By )
<code>
<style type="text/css">
<!--
.ram {
border: 1px solid #333333;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #000000;
text-decoration: none;
list-style-position: outside;
list-style-type: circle;
}
-->
</style>
<body bgcolor="#eeeeee" leftmargin="0" topmargin="0">
<table width="440" border="0" cellpadding="0" cellspacing="0" class="ram">
<%
Dim RecSet, RecSet2
Dim Connect
Dim AltRow
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/databas.mdb") &";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
Set RecSet2 = Server.CreateObject("ADODB.Recordset")
RecSet.Open "SELECT TOP 50 PERCENT * FROM listan WHERE CLng(poäng) > 400 ORDER BY CLng(poäng) DESC" , Connect
RecSet2.Open "SELECT * FROM listan WHERE (NOT (poäng = (SELECT TOP 50 PERCENT poäng FROM listan WHERE CLng(poäng) > 400))) AND CLng(poäng) > 400 ORDER BY CLng(poäng) DESC" , Connect
Do Until RecSet.EOF Or RecSet2.EOF
If AltRow Then
color = "#DCDBD6"
AltRow = False
Else
color = "#eeeeee"
AltRow = True
End If
Response.Write "<tr align=""left"" valign=""top"" bgcolor=""<%=color%>"">"
Response.Write "<td width=""200""><%=RecSet("Namn")%></td>"
Response.Write "<td width=""240""><%=RecSet("Poäng")%></td>"
Response.Write "<td width=""200""><%=RecSet2("Namn")%></td>"
Response.Write "<td width=""240""><%=RecSet2("Poäng")%></td>"
RecSet.MoveNext
RecSet2.MoveNext
Response.Write "</tr>"
RecSet.MoveNext
Loop
RecSet.Close
RecSet2.Close
Set RecSet = Nothing
Set RecSet2 = Nothing
Connect.Close
Set Connect = Nothing
%>
</table>
</code>
Har inte testat koden så den kan vara full med fel, men principen skall väl fungera. :)
// JarleSv: SQL problem (Order By )
<code>
<style type="text/css">
<!--
.ram {
border: 1px solid #333333;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #000000;
text-decoration: none;
list-style-position: outside;
list-style-type: circle;
}
-->
</style>
<body bgcolor="#eeeeee" leftmargin="0" topmargin="0">
<table width="440" border="0" cellpadding="0" cellspacing="0" class="ram">
<tr>
<%
Dim RecSet
Dim Connect
Dim Column
Dim RecordCount
Const Columns = 2
Const adOpenStatic = 3
Const adLockReadOnly = 1
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/databas.mdb") &";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "SELECT * FROM listan WHERE CLng(poäng) > 400 ORDER BY CLng(poäng) DESC" , Connect, adOpenStatic, adLockReadOnly
If RecSet.Eof Then
Response.Write "Det finns inga poster!"
Else
RecordCount = RecSet.RecordCount
For Column = 0 to (RecordCount + 1) \ Columns
Response.Write "<tr><td><table border=""0"">"
AltRow = True
Do Until RecSet.EOF
If AltRow Then
color = "#DCDBD6"
AltRow = False
Else
color = "#eeeeee"
AltRow = True
End If
Response.Write "<tr align=""left"" valign=""top"" bgcolor=""" & color & """>"
Response.Write "<td width=""200"">" & RecSet("Namn") & "</td>"
Response.Write "<td width=""240"">" & RecSet("Poäng") & "</td>"
Response.Write "</tr>"
RecSet.MoveNext
Loop
Response.Write "</table><td>"
Next
End If
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
%>
</tr>
</table>
</code>Sv: SQL problem (Order By )
joo det är så där jag vill få det att funka :-)
vad fälttypen är spelar ingen för mig, fälttypen för poäng är tal nu iaf
vad jag vill då jag skriver ut detta är om det funkar att få det numrerat
och att halva 50 % av de som har 400 poäng eller mer hamnar i en kolum
och nästa hamnar i den andra så som det ser ut här nere vill jag att det blir
i det färdiga resultatet. så om det är 500 st som har 400 poäng eller mer så
skall de 250 st med högsta numret hammna till vänster och de andra 250 till
höger i en egen kolum, men alla skall finnas i samma tabell.
hoppas du/ni förstår hur jag tänker
1. Mark 4323 7. Nisse 2100
2. Ola 4100 8. Mats 1900
3. Jens 3800 9. Hans 1500
4. ...
5. ...
6. ...
/TommySv: SQL problem (Order By )
Tyvärr hinner jag inte visa hur det ska göras just nu, men sök i artikel registeret om jag inte minns fel ska det finnas en artikel som beskriver hur GetRows metoden funkar och används, rekommenderas varmt.Sv: SQL problem (Order By )
Sv: SQL problem (Order By )
http://www.pellesoft.se/login/articles/asp/asp_getrowscol.asp
http://www.pellesoft.se/login/articles/asp/getrows.asp
http://www.pellesoft.se/login/articles/article.asp?artid=514, ett paging exempel, går lika bra att modifiera för att fungera för dig...
Genom att köra UBound på GetRows resultatet får man reda på hur många poster det finns, dividera dem med 2 och du har antalet som du skall ha i vänsterkolumnen samt hur länge du ska iterera i GetRows vektorn.
Sen är det bara att skriva ut värdena, där den högra kolumnen ska ha id värde som är n+(antaletposter/2)....
jaja det är hur det ska göras, vill du ha mer hjälp får du vänta lite tillSv: SQL problem (Order By )
<code>
<style type="text/css">
<!--
.ram {
border: 1px solid #333333;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #000000;
text-decoration: none;
list-style-position: outside;
list-style-type: circle;
}
-->
</style>
<body bgcolor="#eeeeee" leftmargin="0" topmargin="0">
<table width="440" border="0" cellpadding="0" cellspacing="0" class="ram">
<tr>
<%
Dim RecSet
Dim Connect
Dim Data
Dim Rows
Dim Index1
Dim Index2
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/databas.mdb") &";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "SELECT Namn, Poäng FROM listan WHERE poäng > 400 ORDER BY poäng DESC" , Connect
If RecSet.Eof Then
Response.Write "Det finns inga poster!"
Else
Data = RecSet.GetRows()
Rows = UBound(Data, 1) \ 2
Index2 = Rows
For Index1 = 0 to Rows
Index2 = Index2 + 1
If AltRow Then
color = "#DCDBD6"
AltRow = False
Else
color = "#eeeeee"
AltRow = True
End If
Response.Write "<tr align=""left"" valign=""top"" bgcolor=""" & color & """>"
Response.Write "<td width=""200"">" & Data(Index1, 0) & "</td>"
Response.Write "<td width=""240"">" & Data(Index1, 1) & "</td>"
Response.Write "<td width=""200"">" & Data(Index2, 0) & "</td>"
Response.Write "<td width=""240"">" & Data(Index2, 1) & "</td>"
Response.Write "</tr>"
RecSet.MoveNext
Next
End If
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
%>
</table>
</code>Sv: SQL problem (Order By )
får det inte att funka :-(
Feltyp:
ADODB.Recordset (0x800A0BCD)
Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats. Den begärda åtgärden kräver en aktuell post.
/hockey/html/poang.asp, line 55
här är rad 55
<code> RecSet.MoveNext </code>Sv: SQL problem (Order By )
Om det blir ojämt antal kommer den strula ut tror jag. Du får lägga in en koll efer for loopen som skriver ut den ojämna ráden.Sv: SQL problem (Order By )
Michael Peterzon Olle Olsson 1525 1250
så är blir det nu, men jag vill få det så här typ :-)
Michael Peterzon 1525 Olle Olsson 1250
fixa lite och nu funkar det lite bättre *s*
nu skriver den bara ut en rad alltså namn och poäng på 1:a raden en gång bara sedan inget mer och då blir det ju så här:
Michael Peterzon 1525 Olle Olsson 1250
här är koden som är ändrad
<code> Response.Write "<tr align=""left"" valign=""top"" bgcolor=""" & color & """>"
Response.Write "<td width=""200"">" & Data(Index1, 0) & "</td>"
Response.Write "<td width=""240"">" & Data(Index2, 0) & "</td>"
Response.Write "<td width=""200"">" & Data(Index1, 1) & "</td>"
Response.Write "<td width=""240"">" & Data(Index2, 1) & "</td>"
Response.Write "</tr>" </code>
Sv: SQL problem (Order By )
<code>
Response.Write "<tr align=""left"" valign=""top"" bgcolor=""" & color & """>"
Response.Write "<td width=""200"">" & Data(Index1, 0) & "</td>"
Response.Write "<td width=""240"">" & Data(Index1, 1) & "</td>"
Response.Write "<td width=""200"">" & Data(Index2, 0) & "</td>"
Response.Write "<td width=""240"">" & Data(Index2, 1) & "</td>"
Response.Write "</tr>"
</code>
Varför ändrade ordningen om du vill ha det så som jag gjort det?Sv: SQL problem (Order By )
Michael Peterzon Olle Olsson 1525 1250
men som jag skrev så kommer poängen efter namnen men det blir bara att det skriver ut en rad, alla andra som har 400 poäng eller mer kommer inte med, det förstår jag inteSv: SQL problem (Order By )
<code>
<style type="text/css">
<!--
.ram {
border: 1px solid #333333;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #000000;
text-decoration: none;
list-style-position: outside;
list-style-type: circle;
}
-->
</style>
<body bgcolor="#eeeeee" leftmargin="0" topmargin="0">
<table width="440" border="0" cellpadding="0" cellspacing="0" class="ram">
<tr>
<%
Dim RecSet
Dim Connect
Dim Data
Dim Rows
Dim Records
Dim Color
Dim AltRow
Dim Index1
Dim Index2
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/databas.mdb") &";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "SELECT Namn, Poäng FROM listan WHERE poäng > 400 ORDER BY poäng DESC" , Connect
If RecSet.EOF Then
Response.Write "Det finns inga poster!"
Else
Data = RecSet.GetRows()
Records = UBound(Data, 2) + 1
Rows = (Records) \ 2
Index2 = Rows + (Records And 1)
For Index1 = 0 To Rows - 1
If AltRow Then
Color = "#DCDBD6"
AltRow = False
Else
Color = "#eeeeee"
AltRow = True
End If
Response.Write "<tr align=""left"" valign=""top"" bgcolor=""" & color & """>"
Response.Write "<td width=""200"">" & Data(0, Index1) & "</td>"
Response.Write "<td width=""240"">" & Data(1, Index1) & "</td>"
Response.Write "<td width=""200"">" & Data(0, Index2) & "</td>"
Response.Write "<td width=""240"">" & Data(1, Index2) & "</td>"
Response.Write "</tr>"
Index2 = Index2 + 1
Next
If Records And 1 Then
Response.Write "<tr align=""left"" valign=""top"" bgcolor=""" & color & """>"
Response.Write "<td width=""200"">" & Data(0, Index1) & "</td>"
Response.Write "<td width=""240"">" & Data(1, Index1) & "</td>"
Response.Write "</tr>"
End If
End If
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
%>
</table>
</code>Sv: SQL problem (Order By )
nu funkar det så som det skall ju! :-)
TACK så jätte mycket!!
//Tommy Lindblim