webForumDet fria alternativet

Problem med rs.movenext (kanske)

ASP

14 svar · 289 visningar · startad av Wiberg

Medlem sedan juni 20003 169 inlägg
Frågan#1
<%
SQL = "SELECT * FROM nyheter ORDER BY id DESC"
rs.OPEN SQL, conn

WHILE NOT rs.EOF
%>

  <tr> 
    <td class="headtext" bgcolor="#F1F1EF" align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr><td width="150">
<span class="lines">|||</span><span class="head"> 
</span> <span class="header"><b><%=rs("dag")%></b> :: <%=rs("tid")%></span>
</td>
<td width="150" align="right">
<span class="header"><a href="profil.asp?id=<%=rs("user")%>" target="_self"><%=get_user(rs("user"))%></a></span>
</td>
</tr>
</table>
</td>
  </tr>
  <tr> 
    <td class="headtext" bgcolor="#FFFFFF">
    <%=rs("txt")%>
    </td>
  </tr>
  <tr> 
    <td class="headtext" bgcolor="#FFFFFF"><img src="gfx/pixel.gif" width="1" height="1"></td>
  </tr>
<%
rs.MOVENEXT
WEND
rs.CLOSE
%>

Detta funkar utmärkt på min server med följande db-koppling:

Dim Conn, Rs, SQL
Set conn = server.createobject("ADODB.Connection")
Set rs = server.createobject("ADODB.Recordset")
conn.open "DBQ=" & Server.Mappath("db.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"

En annan ska nu använda detta på sitt webhotell. För att det ska funka så måste hans db-koppling se ut så här:

'Dim Conn, rs
'Set Conn = Server.CreateObject("ADODB.Connection")
'Set rs = server.createobject("ADODB.Recordset")
'Conn.Open "DSN=b2081-db;Password=@01#$ikneedfmldbkjcclk"

Nu blir det problem. Det verkar som om raden rs.movenext aldrig körs. Det är nämligen bara den första posten i databasen som skrivs ut oändligt många gånger.

På en annan sida som använder samma db-koppling används också while not rs.eof och rs.movenext och där funkar det...

Obegripligt... :q

Medlem sedan mars 2002777 inlägg
#2
Dim Conn, rs
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=b2081-db;Password=@01#$ikneedfmldbkjcclk"

SQL = "SELECT * FROM nyheter ORDER BY id DESC"
set rs = Conn.execute(SQL)

WHILE NOT rs.EOF

...
...
Medlem sedan juni 20003 169 inlägg
#3

Ingen skillnad. :(
På vilket sätt skulle detta hjälpa?

Medlem sedan mars 2002777 inlägg
#4

Ursprungligen av Wiberg Ingen skillnad. :(
På vilket sätt skulle detta hjälpa?

Nje, var lite osäker om man inte var tvungen att ange någon cursor när man gjorde på ditt vis. Ska fundera vidare.

Medlem sedan juni 20003 169 inlägg
#5

Ingen som fattar vad som kan vara problemet?

Medlem sedan juni 20003 169 inlägg
#6

Felet verkar ligga här:

function get_user(id)
Set recset = server.createobject("ADODB.Recordset")
SQL = "SELECT namn FROM users WHERE id = " & id
recset.open SQL, conn
get_user = recset("namn")
recset.CLOSE
end function

För när jag inte anropade den så funkar det...

Medlem sedan juni 200032 967 inlägg
#7

Glö det, läste fel.
Jag läser igen istället! :)

Mvh,

Medlem sedan mars 20015 287 inlägg
#8

Har du alla tabeller i båda databaserna, speciellt då tabellen users?

Medlem sedan juni 200032 967 inlägg
#9

Förresten, du kan ju lätt undgå att använda funktionen get_user() om det är där problemet uppstår. En liten join bara i SQL-frågan du använder på sidan, så är problemet ur världen.

SQL = "SELECT nyheter.*, users.namn FROM nyheter, users where nyheter.user=users.id ORDER BY id DESC"

Mvh,

Medlem sedan juni 20003 169 inlägg
#10

@nders: Jag förstår inte riktigt din SQL-sats men den ger förljande fel. :)

Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Drivrutin för ODBC Microsoft Access] Det angivna fältet 'id' kan referera till fler än en av de tabeller som är uppräknade i SQL-uttryckets FROM-instruktion.

Medlem sedan juni 20003 169 inlägg
#11

Ändrade till:

 SQL = "SELECT nyheter.*, users.namn FROM nyheter, users where nyheter.user=users.id ORDER BY nyheter.id DESC"

och får då:

Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Drivrutin för ODBC Microsoft Access] Typblandningsfel i uttryck.

Medlem sedan juni 200032 967 inlägg
#12

Har du olika datatyper på nyheter.user och users.id? Varför?

Medlem sedan juni 20003 169 inlägg
#13

nyheter.user är tal och users.id är räknare...

Medlem sedan dec. 200012 464 inlägg
#14

Om nyheter.user är av typen text så borde du ändra typ till tal. Om du vill göra en join mellan två tabeller så måste de kolumner som du jämför vara av samma typ.

red: I så fall kan du glömma detta inlägg

Medlem sedan juni 20003 169 inlägg
#15

Nej, du hade helt rätt LarsG. @nders också för övrigt... :)
Jag trodde att id var tal men det var visst text i alla fall. Så nu funkar det!

Tack! :)

252 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)