VVinnarenMedlem sedan sep. 2005833 inlägg kan visa hur koden ser ut just nu
dropdownrutan:
<select name="namn" style="width: 150px;">
<%
Set objRS = objConn.Execute("SELECT * FROM redaktionen")
if not objRS.eof then
Do until objRS.EOF
response.write "<option value="""&objRS("id")&""">"&objRS("namn") & "</option>"
objRS.Movenext
Loop
objRS.close
else
objRS.close
end if
%>
</select>
Spara
' Sparar nyheten
ElseIf Request.QueryString("visa") = "nyhetspara" AND Session("Admin") = "true" Then
strDatum = now()
strRubrik = SafeSQL(Request.Form("rubrik"))
strNyhet = SafeSQL(Request.Form("nyhet"))
strlank = SafeSQL(Request.Form("lank"))
strlanknamn = SafeSQL(Request.Form("lanknamn"))
strskribent_id = SafeSQL(Request.Form("skribent_id"))
strkategori = SafeSQL(Request.Form("kategori"))
objConn.Execute("INSERT INTO nyheter(Datum,Rubrik,Nyhet,lank,lanknamn,skribent_id,kategori) VALUES('" & strDatum & "','" & strRubrik & "','" & strNyhet & "','" & strlank & "','" & strlanknamn & "','" & strskribent_id & "','" & strkategori & "')")
objConn.Execute("update redaktionen set nyheter = nyheter + 1 where namn = 'skribent'")
' Stänger och förstör alla objekt
Set objRS = nothing : objConn.Close : Set objConn = nothing
J.N.Medlem sedan apr. 20031 660 inläggOch vad sade vi om <select name="namn"> i http://www.webforum.nu/showthread.php?p=1197092#post1197092?
Citerar även mig själv:
"Sedan bör det fungera!"
VVinnarenMedlem sedan sep. 2005833 inlägg ok, nu hamnar det något i skribent_id kolumnen :D
J.N.Medlem sedan apr. 20031 660 inläggDet ska samma som du frågar efter, Request.Form("skribent_id").
Nu ser du finessen med att hämta skribent_id, lagra det i strskribent_id och sedan i databasen ha fältet skribent_id, ev i båda tabellerna!
Och så redigerar du inlägget med frågan jag svarade på: "och det ska vara ID?"!
Då fungerar allt?
VVinnarenMedlem sedan sep. 2005833 inlägg men hur gör man för att uppdatera statistiken i tabellen redaktion?
den vill inte uppdatera sig med uttrycket
objConn.Execute("update redaktionen set nyheter = nyheter + 1 where namn = 'skribent'")
jag har tilldelat den startvärde 0.
samt Hur gör man nu på sidan som presenterade nyheten så anv. jag fälten skribent och email?
Koden jag har där är:
Set objRS=objConn.Execute("SELECT * FROM nyheter WHERE kategori='Allsvenskan' ORDER BY datum DESC")
'Gör så att sidan börjar med rätt post!
objRS.Move((intPage*intPagesize)-intPagesize)
Do
' Om det inte finns poster att skriva ut så slutar den loopen (Exit do)
If objRS.EOF then
Exit Do
Response.Write "<b>Det finns inga nyheter!</b>"
' Om det är 10 poster (eller vad du har valt) så slutar den loopa
ElseIf strCount = intPageSize then
Exit Do
End If
' Räknar posterna
strCount = strCount + 1
%>
</span></font>
<table border="0" width="449" cellspacing="0" cellpadding="0">
<tr>
<td class="mork" width="449" valign="top">
<font color="#000000" size="2" face="Verdana"><b><%=objRS("Rubrik")%></b></font><font color="#000000" size="3" face="Verdana"> </font> - <font color="#000000" size="1" face="Verdana"><%=objRS("Datum")%><br>
Skrivet av <a href="mailto:<%=objRS("email")%>" style="text-decoration: none"><%=objRS("Skribent")%></a></font></td>
</tr>
<tr>
<td class="ljus" width="449" valign="top" style="border: 3px solid #C0C0C0">
<font style="font-size: 8pt">
<%=nyhet(objRS("Nyhet"))%>
</font>
<a target="_top" href="http://<%=objRS("lank")%>" style="text-decoration: none">
<font face="Verdana" style="font-size: 8pt"><%=objRS("lanknamn")%></font></a><font size="2" style="font-size: 8pt">
</font>
</td>
</tr>
<tr>
<td width="449" valign="top" class="dot"></td>
</tr>
</table><br>
<font size="1" face="Verdana">
<%
objRS.Movenext
Loop
' En funktion som skriver ut sidorna
Response.Write sidor(intPage,intPages)
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
J.N.Medlem sedan apr. 20031 660 inläggJa, nu har du ju en siffra istället, och det är mycket roligare!
namn = 'skribent' ska alltså vara id=" & strskribent_id.
Visningen löser du enklast genom att ställa frågan i access, för att få relationen mellan tabellerna korrekt.
Då får du namn och epost som ett värde i recordsetet tillsammans med rubrik, datum, nyhet osv.
http://www.webforum.nu/showthread.php?p=1197052#post1197052
VVinnarenMedlem sedan sep. 2005833 inlägg ok, tack så mycket, nu fungerar all det, så nu är det bara själva hämntningen kvar :D
VVinnarenMedlem sedan sep. 2005833 inlägg ska man skapa relationer i Access mellan Redaktionen och nyheterna?
J.N.Medlem sedan apr. 20031 660 inläggJa, det kan du göra, men i enkla databaser behövs det ej, tex med två tabeller, en relation. Det korrekta är att göra det.
Jag skapar alltid dem; har man flera tabeller och relationer mellan olika fält kan man inte komma ihåg hur allt hänger ihop.
VVinnarenMedlem sedan sep. 2005833 inlägg ok, har nu lagt in som relationer, är det fälten i ID i tabellen Redaktion som ska dras ihop med skribent_id i nyheter??
Räcker det med detta sen, behöver man inte ändra något i asp koden som ska visa nyheten?
J.N.Medlem sedan apr. 20031 660 inläggJapp, de fält som hör ihop ska dras till varandra. Sedan kan man klicka i om man vill att poster ska försvinna automatiskt, men det behöver du inte göra.
Läs mer på http://www.webforum.nu/showthread.php?p=1195948#post1195948
OBS!
De siffror som står i de två kolumnerna måste stämma överrens, du kan inte ska en relation om det finns skribenter med tex id 1,2,3, och du har tex fått in en 6:a i nyhetstabellen. Då får man ett felmeddelande, och får manuellt rätta till det, innan man försöker igen.
Detta kan hända när man gör relationer mellan fält som har data, därför ska man alltid försöka göra relationerna när tabellerna är tomma.
VVinnarenMedlem sedan sep. 2005833 inlägg ok, jag drog ID till skribent_id, valde inget mer utan tog skapa. Relationtyp 1:N
Men nu när jag skulle prova så får jag felmeddelandet:
ADODB.Recordset (0x800A0CC1)
Objektet kunde inte hittas i mängden med det begärda namnet eller numret..
Tog ju bort kolumnerna Email och skribent i tabellen nyheter.
Felet får jag på raden:
Skrivet av <a href="mailto:<%=objRS("email")%>" style="text-decoration: none"><%=objRS("namn")%></a></font></td>
jag har kollat så att kolumnerna heter namn och email :i
Kolumnen ID är en räknare, medan skribent_id är text, inget fel där?
samt så ser jag i tabellen Redaktion att det har kommit fram ett + framför varje post, men när man trycker på det så blir det något felmeddelande:
Detta uttryck är antingen felaktigt eller för komplicerat för att kunna utvärderas. Ett numeriskt uttryck kan tex. innehålla för många komplicerade eliment.
J.N.Medlem sedan apr. 20031 660 inläggJag gissar att du inte justerat din sql som vi avhandlade tidigare i inlägg #25 mht inner join?
http://www.webforum.nu/showthread.php?p=1197052#post1197052
Felet är precis vad det säger, du försöker visa något som inte finns i det recordset du hämtat.
Ändrade du inte skribent_id till tal? Det är det det är, och det borde inte gå göra relationer då, ska väl vara Långt heltal tom? Fast, eftersom det är siffror i textfältet fungerar det tydligen. Ändra i vilket fall.
Att du får + beror på att Access förstår att andra tabeller har värden kopplade till detta, dvs nyheten kommer att visa skribenten i rutor under. (Alltså i programmet, har inget med webben att göra.)
VVinnarenMedlem sedan sep. 2005833 inlägg har nu satt skribent_id till tal samt långt heltal.
Har provat med denna SQL:
Set objRS=objConn.Execute("SELECT N.*, R.* FROM nyheter N INNER JOIN Redaktionen R ON N.Skribent_id = R.id WHERE N.kategori='Start' ORDER BY N.datum DESC")
men med den får jag felmeddelandet:
ADODB.Recordset (0x800A0CC1)
Objektet kunde inte hittas i mängden med det begärda namnet eller numret.
på raden:
<font color="#000000" size="2" face="Verdana"><b><%=objRS("Rubrik")%></b></font><font color="#000000" size="3" face="Verdana"> </font> - <font color="#000000" size="1" face="Verdana"><%=objRS("Datum")%><br>
:r
J.N.Medlem sedan apr. 20031 660 inläggAlias på tabeller (FROM nyheter N INNER JOIN Redaktionen R ON ) använder jag inte, och andra kunniga sql:are håller (nog) med om att det är onödigt i enkla frågor, som här.
Men, det är inget fel, endast en upplysning.
Du hämtar två fält, vilket är det som inte fungerar?
Är du säker på att du får ett resultat? Fast, om ej borde du fått annat fel.
Prova ta bort WHERE, gå ned till en fråga där du får resultat, lägg sedan till steg för steg tills det blir problem.
VVinnarenMedlem sedan sep. 2005833 inlägg hur skulle man skriva istället för att anv N och R?
såhär?
Set objRS=objConn.Execute("SELECT * FROM nyheter INNER JOIN Redaktionen ON Skribent_id = id")
har provat med:
Set objRS=objConn.Execute("SELECT N.*, R.* FROM nyheter N INNER JOIN Redaktionen R ON N.Skribent_id = R.id")
men får:
ADODB.Recordset (0x800A0CC1)
Objektet kunde inte hittas i mängden med det begärda namnet eller numret.
på samma rad :S
Gjorde jag rätt?
J.N.Medlem sedan apr. 20031 660 inläggJavisst, du får ju samma fel.
Ur prestandasynpunkt, och överskådlighet, kan det dock vara bra att skriva fälten man hämtar, tex skribent.namn, nyhet.rubrik osv. Men, när man provar kan man sätta stjärna istället. Ska man ändå hämta kanske 5 fält av 7, då är det enklare att skriva stjärna. Beror på hur ordentlig man vill vara.
VVinnarenMedlem sedan sep. 2005833 inlägg men när jag provar
Set objRS=objConn.Execute("SELECT * FROM nyheter INNER JOIN Redaktionen ON Skribent_id = id")
så får jag ett annat felmeddelande:
Microsoft JET Database Engine (0x80040E14)
Kopplingsuttrycket stöds inte.
men hur ska jag göra så att det fungerar :S?
J.N.Medlem sedan apr. 20031 660 inläggOkej, det är svårt veta när du inte skrev det.
Har du gjort frågan i Access? Hämta alla de fält som behövs, då SKA det fungera.
VVinnarenMedlem sedan sep. 2005833 inlägg nej, jag har inte gjort frågan i Access :(