Just nu i M3-nätverket
Gå till innehåll

Problem med Inner Join


Gerteniua

Rekommendera Poster

Jag får följande fel:

ADODB.Field (0x80020009)

Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats. Den begärda åtgärden kräver en aktuell post.

/bowling/gert.asp

 

<% Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open ="Bowling"

 

Set RecSet = Server.CreateObject("ADODB.Recordset")

Wiew = "SELECT medlemmar.ID, medlemmar.Namn, Resultat.Spelare, Resultat.Resultat FROM medlemmar INNER JOIN Resultat ON medlemmar.Namn = resultat.spelare WHERE medlemmar.Namn = 'Gert' "

RecSet.Open Wiew, Connect, adOpenStatic, adLockOptimistic

 

%>

 

I access databasen har jag tabellen

medlemmar: ID och Namn

2 Gert

Resultat: Nr, Spelare, Resultat

1 2 743

2 2 889 osv.

 

Försöker få en snittlista med bowlingresultat på en webbsida. Förmodar att jag gjort ngt. enkelt fel. Men jag sitter fast i min blindo..

Länk till kommentar
Dela på andra webbplatser

Mikael Ericsson

Får du verkligen felet i den här delen av koden?

Enligt felmeddelandet försöker du använda dig av poster som inte finns.

En SELECT-sats som inte gett någon träff etc.

Visa mer kod.

 

Länk till kommentar
Dela på andra webbplatser

Här är koden:

 

<!-- #include file="ADOVBS.INC" -->

<% Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open ="Bowling"

 

Set RecSet = Server.CreateObject("ADODB.Recordset")

Wiew = "SELECT medlemmar.ID, medlemmar.Namn, Resultat.Spelare, Resultat.Resultat FROM medlemmar INNER JOIN Resultat ON medlemmar.Namn = resultat.spelare WHERE medlemmar.Namn = 'Gert' "

RecSet.Open Wiew, Connect, adOpenStatic, adLockOptimistic

 

%>

<h2>Bowling Resultat <%=RecSet("Spelare")%></h2>

 

<table CELLPADDING="3" BORDER="0" COLSPAN="8">

<tr>

<%

Response.Write "<TD CLASS=header>" & "Snitt" & "</TD>"

Response.Write "<TD CLASS=header>" & "Ser" & "</TD>"

Response.Write "<TD CLASS=header>" & "Hemma" & "</TD>"

Response.Write "<TD CLASS=header>" & "Ser" & "</TD>"

Response.Write "<TD CLASS=header>" & "Borta" & "</TD>"

Response.Write "<TD CLASS=header>" & "Ser" & "</TD>"

Response.Write "<TD CLASS=header>" & "PSnitt" & "</TD>"

Response.Write "<TD CLASS=header>" & "Bästa" & "</TD>"

Response.Write "<TD CLASS=header>" & "Sämsta" & "</TD>"

%>

</tr>

 

<% Do Until RecSet.EOF%>

<TR>

 

<TD align=center CLASS=Formtable nowrap><A HREF="displayp.asp?Spelare=<%=RecSet("medlemmar.Namn")%>">

<%=RecSet("Resultat.Spelare")%></A></TD>

<TD align=center CLASS=Formtable> <%=RecSet("Resultat.Resultat")%></TD>

<% RecSet.MoveNext

Loop %>

 

 

Länk till kommentar
Dela på andra webbplatser

Mikael Ericsson

Du skriver

<h2>Bowling Resultat <%=RecSet("Spelare")%></h2>

innan du testat

if not RecSet.EOF then

Kan det vara felet?

 

Länk till kommentar
Dela på andra webbplatser

MattiasCanberger

Felet ligger i din join

"ON medlemmar.Namn = resultat.spelare" skall ändras till

"ON medlemmar.ID = resultat.spelare"

Så som du gör nu försöker du joina namnet i medlemmar-tabellen till id't i tabellen spelare.

 

/Mattias

 

Länk till kommentar
Dela på andra webbplatser

Mycket underlig kod:

 

1) MattiasCanberger har rätt, din join var fel. Annars skall banne mig SQLen funka:

SELECT ID, Namn, Resultat 
FROM Medlemmar, Resultat
WHERE ID = Spelare
AND Namn = 'Gert'

2) Mikael Ericsson har också rätt. Du måste testa .EOF först. Men det förklarar inte arför du inte får några resultat.

3) Din table har olika antal TDs. Du har 9 kolumner som "header" men bara 2 i loopen.

4) Du avslutar inte med </TR>

5) Du använder Namn i länken, och skriver ut ID (=2) ?

6) Behövs tablenamn i utskriften ? Jag har aldrig gjort så men det kanske funkar. (Annars: <%=RecSet("Namn")%>)

 

Slutligen, kan du verfiera att du får ett resultat ?

1) Är RecSet.EOF sant direkt efter RecSet.Open ?

2) Om så, kan du testa något annat, typ SELECT * FROM Medlemmar, Resultat WHERE ID = Spelare för att kontrollera att det verkligen fungerar med dbn ?

 

/Dave

 

Länk till kommentar
Dela på andra webbplatser

När jag lagt upp din SELECT sats så fungerar det. Men inte fullt ut som jag tänkt det.

 

Jag vill hämta dom olika resultaten och summera dom sen ska nästa spelares resultat summeras. Så här är det skrivet nu?

Wiew = "SELECT ID, Namn, Serier, Poang, H_B, Resultat FROM Medlemmar, Resultat WHERE medlemmar.Namn ='Gert' "

'Wiew = "SELECT medlemmar.ID, medlemmar.Namn, Resultat.Spelare, Resultat.Resultat FROM medlemmar INNER JOIN Resultat ON medlemmar.Id = resultat.Spelare "

RecSet.Open Wiew, Connect, adOpenStatic, adLockOptimistic

%>

<% Do Until RecSet.EOF%>

<%Response.write RecSet("Namn")%>

<%Summa=Summa + RecSet("Resultat")%>

 

 

 

Länk till kommentar
Dela på andra webbplatser

Lite osäker på vad du är ute efter men chansar på detta:

 

SELECT Namn, SUM(Resultat) FROM Medlemmar, Resultat WHERE ID = Spelare GROUP BY Namn

 

Ger alla spelare och deras totala poäng.

 

 

/David

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...