Avatar billede jacand Nybegynder
25. juli 2005 - 14:30 Der er 9 kommentarer og
1 løsning

Flytning fra MSSQL til MySql

Jeg er ved at flytte min side fra MSSQL til MySQL og er løbet ind i et lille problem.

intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
    intPage = 1
End If
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM bruger where brugerkode <> 'F59A4662T6k1NbqN2c915c78Vd879O' order by balance desc"
rs.Open strSQL, strDSN,1

If Not (rs.BOF Or rs.EOF) Then
    rs.PageSize = 100
    rs.AbsolutePage = intPage
    intRecCount = rs.PageSize
    intPageCount = rs.PageCount
    Response.Write "<p><b>Side " & intPage & " af " & intPageCount & "</b></p>"
    Do While Not rs.EOF And intRecCount > 0
    %>
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
    <tr>
        <td width="31%">&nbsp;<a href="default.asp?sid=<%=rs("brugernr")%>"><%=rs("stutterinavn")%></a></td>
        <td width="69%">&nbsp;Værdi: <%=FormatNumber(rs("balance"))%> Wkr.</td>
    </tr>
</table>
    <%
    intRecCount = intRecCount - 1
    rs.MoveNext
    Loop
End If
rs.Close
Set rs = Nothing

giver mig:
ADODB.Recordset error '800a0cb3'

Current Recordset does not support bookmarks. This may be a limitation of the provider or of the selected cursortype.

/4.asp, line 21

linie 21 er rs.AbsolutePage = intPage

Skal det laves på en anden måde med en MySql server?
Avatar billede fennec Nybegynder
25. juli 2005 - 14:38 #1
Ja det skal laves anderledes.
MySQL understøtter ikke bookmarks, men de har lavet deres egen funktion. Det du skal kikke på er LIMIT. Din select sætning skal ændres til noget i denne stil:

select * from bruger where ... limit 5 <-- første 5 rækker
select * from bruger where ... limit 5, 10 <-- 6-10 række


Du kan finde info om syntaxen her:
http://dev.mysql.com/doc/mysql/en/select.html
Avatar billede jacand Nybegynder
25. juli 2005 - 15:11 #2
Ja det fandt jeg også ud af :-)
Men hvordan får jeg lige strikket limit og strSQL = "SELECT * FROM bruger where brugerkode <> 'F59A4662T6k1NbqN2c915c78Vd879O' order by balance desc"
sammen.
Avatar billede fennec Nybegynder
25. juli 2005 - 15:23 #3
Hele din kode skal ændres. Jeg kan ikke finde en artikkel om det, så her har du noget kode jeg har bikset samme her og nu:

if request.querystring("firstpost") <> "" then
  firstPost = cint(request.querystring("firstpost"))
else
  firstPost = 0
end if
lastPost = firstPost + 10
strSQL = "SELECT * FROM bruger where brugerkode <> 'F59A4662T6k1NbqN2c915c78Vd879O' order by balance desc limit "& firstPost &","& lastPost
rs.Open strSQL, strDSN,1
while not rs.eof
  response.write "UDSKRIV DATA HER"
  rs.MoveNext
loop %>
<a href="denneside.asp?firstpost=0">side 1</a>
<a href="denneside.asp?firstpost=10">side 2</a>
<a href="denneside.asp?firstpost=20">side 3</a>
Avatar billede jacand Nybegynder
25. juli 2005 - 15:43 #4
det virker næsten.
der manglede lige en do :-)

Problemet er at side 1 indeholder 10 poster som den skal men 2 indeholder 20 og 3 30.

if request.querystring("firstpost") <> "" then
  firstPost = cint(request.querystring("firstpost"))
else
  firstPost = 0
end if
lastPost = firstPost + 10
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM bruger where brugerkode <> 'F59A4662T6k1NbqN2c915c78Vd879O' order by balance desc limit "& firstPost &","& lastPost
rs.Open strSQL, strDSN,1
%>
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">

<%
do while not rs.eof
%>
    <tr>
        <td width="31%">&nbsp;<a href="default.asp?sid=<%=rs("brugernr")%>"><%=rs("stutterinavn")%></a></td>
        <td width="69%">&nbsp;Værdi: <%=FormatNumber(rs("balance"))%> Wkr.</td>
    </tr>

<%
  rs.MoveNext
loop
rs.Close
Set rs = Nothing

%>
</table>
<a href="default.asp?sideid=22&firstpost=0">side 1</a>
<a href="default.asp?sideid=22&firstpost=10">side 2</a>
<a href="default.asp?sideid=22&firstpost=20">side 3</a>
Avatar billede fennec Nybegynder
25. juli 2005 - 15:54 #5
Min fejl. Jeg glemte hvordan limit fungere :o)
Vi laver lige lidt om på starten af koden:

PostAmount = 10
if request.querystring("firstpost") <> "" then
  firstPost = cint(request.querystring("firstpost"))
else
  firstPost = 0
end if
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM bruger where brugerkode <> 'F59A4662T6k1NbqN2c915c78Vd879O' order by balance desc limit "& firstPost &","& PostAmount
rs.Open strSQL, strDSN,1
Avatar billede jacand Nybegynder
25. juli 2005 - 16:16 #6
Jeg fik denne her til at virke.

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDSN


Set objRs = Conn.Execute("SELECT COUNT(*) AS records FROM bruger where brugerkode <> 'F59A4662T6k1NbqN2c915c78Vd879O';")
intRecords = clng(objRs("records"))
objRs.Close
Set objRs = Nothing

intPage = Request.QueryString("page")
if intPage = "" OR not isNumeric(intPage) then
  intPage = 1
else
  intPage = intPage
end if
intPageSize = 100
intStart = intPage*intPageSize
intStart = intStart-intPageSize
intPages = (intRecords/intPageSize)+1

Set objRs = Conn.Execute("SELECT * FROM bruger order by balance desc LIMIT " & intStart & ", " & intPageSize & ";")
 
  if objRs.EOF or objRs.BOF then
    Response.Write "Ingen poster"
  else
%>

<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">

<%
Do while not objRs.EOF


%>
    <tr>
        <td width="31%">&nbsp;<a href="default.asp?sid=<%=objRs("brugernr")%>"><%=objRs("stutterinavn")%></a></td>
        <td width="69%">&nbsp;Værdi: <%=FormatNumber(objRs("balance"))%> Wkr.</td>
    </tr>

<%
objRs.movenext
loop
  end if

objRs.Close
Set objRs = Nothing

For i = 1 to intPages
  if i = intPage then
    Response.Write "<b>" & i & "</b> "
  else
    Response.Write "<a href=""default.asp?sideid=22&page=" & i & """>"
    Response.Write i
    Response.Write "</a> "
  end if
next
response.write "<br>"
Conn.Close
Set Conn = Nothing

Kan du fortælle mig hvorfor den skriver 1-2-3-4 osv. før den skriver posterne ud, og hvordan får jeg 1-2-3-4 ovs. i bunden?
Avatar billede fennec Nybegynder
25. juli 2005 - 16:25 #7
Det er fordi ud udskriver i en tabel og ikke har dem i en <td>. Eks:
<table>
<tr><td>en tekst</td></tr>
Dette kommer til at stå først, og er desuden ulovlig ifølge HTML standarten.
</table>

Der skal bare en <tr><td></td></tr> omkring loopet.

For i = 1 to intPages
  if i = intPage then
    Response.Write "<b>" & i & "</b> "
  else
    Response.Write "<a href=""default.asp?sideid=22&page=" & i & """>"
    Response.Write i
    Response.Write "</a> "
  end if
next

skal altså være:

response.write "<tr><td>"
For i = 1 to intPages
  if i = intPage then
    Response.Write "<b>" & i & "</b> "
  else
    Response.Write "<a href=""default.asp?sideid=22&page=" & i & """>"
    Response.Write i
    Response.Write "</a> "
  end if
next
response.write "</td></tr>"
Avatar billede jacand Nybegynder
25. juli 2005 - 16:44 #8
he ja det er s.. rigtigt det gik vist lidt for stærkt :-)

nu har jeg denne kode er virker som den skal.

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDSN


Set objRs = Conn.Execute("SELECT COUNT(*) AS records FROM bruger where brugerkode <> 'F59A4662T6k1NbqN2c915c78Vd879O';")
intRecords = clng(objRs("records"))
objRs.Close
Set objRs = Nothing

intPage = Request.QueryString("page")
if intPage = "" OR not isNumeric(intPage) then
  intPage = 1
else
  intPage = intPage
end if
intPageSize = 100
intStart = intPage*intPageSize
intStart = intStart-intPageSize
intPages = (intRecords/intPageSize)+1

Set objRs = Conn.Execute("SELECT * FROM bruger order by balance desc LIMIT " & intStart & ", " & intPageSize & ";")
 
  if objRs.EOF or objRs.BOF then
    Response.Write "Ingen poster"
  else
%>
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
<%
Do while not objRs.EOF
%>
    <tr>
        <td width="31%">&nbsp;<a href="default.asp?sid=<%=objRs("brugernr")%>"><%=objRs("stutterinavn")%></a></td>
        <td width="69%">&nbsp;Værdi: <%=FormatNumber(objRs("balance"))%> Wkr.</td>
    </tr>
<%
objRs.movenext
loop
%>
</table>
<%
end if

objRs.Close
Set objRs = Nothing

response.write "<br>"
For i = 1 to intPages
  if i = intPage then
    Response.Write "<b>" & i & "</b> "
  else
    Response.Write "<a href=""default.asp?sideid=4&page=" & i & """>"
    Response.Write i
    Response.Write "</a> "
  end if
next

så nu mangler jeg bare de sidste 25 sider der har denne funktion :-|

Smid et svar så du kan få nogle point.
Avatar billede fennec Nybegynder
26. juli 2005 - 08:21 #9
.o) <-- One Eyed Jack
Avatar billede jacand Nybegynder
26. juli 2005 - 13:34 #10
:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester