webForumDet fria alternativet

Hämta data till listruta

ASP

69 svar · 2 231 visningar · startad av Vinnaren · sida 2 av 4

Frågan, av Vinnaren

Hej Jag undrar hur man skriver när man ska hämta data från en databas till en nedrullningsbar listruta?? min databaskopling är: Set objConn = Server.CreateObject("ADODB.Connection") Set objRS = Server.CreateObject("ADODB.recordset") objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("databas.mdb") samt HTML koden till rutan: <select name="skribenter" siz

Läs frågan i sin helhet →
Medlem sedan sep. 2005833 inlägg
#21

kan man även göra så att kolumnen Nyheter i tabellen Redaktionen ökar med 1 för varje nyhet man lägger till? Hur gör man i så fall?
har försökt med

objConn.Execute("update redaktionen set nyheter = nyheter + 1 where namn = 'skribent')

får felet:
Kompileringsfel i Microsoft VBScript (0x800A0409)
Oavslutad strängkonstant
admin.asp, line 429, column 86
objConn.Execute("update redaktionen set nyheter = nyheter + 1 where namn = 'skribent')
-------------------------------------------------------------------------------------^

vet inte om jag la in den rätt?

' Sparar nyheten
ElseIf Request.QueryString("visa") = "nyhetspara" AND Session("Admin") = "true" Then

	strDatum		= now()
	strRubrik		= SafeSQL(Request.Form("rubrik"))
	strNyhet		= SafeSQL(Request.Form("nyhet"))
	strSkribent		= SafeSQL(Request.Form("Skribent"))
	strlank 		= SafeSQL(Request.Form("lank"))
	strlanknamn		= SafeSQL(Request.Form("lanknamn"))
	stremail		= SafeSQL(Request.Form("email"))
	strkategori		= SafeSQL(Request.Form("kategori"))
	

	
	objConn.Execute("INSERT INTO nyheter(Datum,Rubrik,Nyhet,Skribent, lank, lanknamn, email,kategori) VALUES('" & strDatum & "','" & strRubrik & "','" & strNyhet & "','" & strSkribent & "','" & strlank & "','" & strlanknamn & "','" & stremail & "','" & 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
	

	
	Response.Redirect sidnamn & "?visa=nyhet"

:stud

Medlem sedan dec. 2003487 inlägg
#22

objConn.Execute("update redaktionen set nyheter = nyheter + 1 where namn = 'skribent'")

Medlem sedan sep. 2005833 inlägg
#23

nu får jag inget felmeddelande, men kolumnen nyheter uppdateras inte. Har jag formulerat den fel?

objConn.Execute("update redaktionen set nyheter = nyheter + 1 where namn = 'skribent'")

namn är kolumnen i tabellen redaktionen, o skribent är namnet på droppdown rutan och på kolumnen i tabellen nyheter.

Medlem sedan apr. 20031 660 inlägg
#24

calson skrev:

objConn.Execute("update redaktionen set nyheter = nyheter + 1 where namn = 'skribent'")

Klassiskt fnuttfel, löses genom att räkna desamma. Lösningen är rätt i teorin, men inte i praktiken (ok, i praktiken också.)

Men, är du inte ute efter en räknare? Ändra fälttypen till räknare, så fixar det sig själv.

Vad menar du med "luft"? Får du en extra option? Utan bild på hur det ser ut, svårt att gissa.

Sedan ska du, som skrivit innan, inte spara epost, namn etc, utan en siffra, som referens till personen i skribenttabellen.

Är de andra problemen fixade? Kan inte direkt påstå att jag är med på om ditt parameter-fel är löst.

Skrev detta innan din post.

Medlem sedan sep. 2005833 inlägg
#25

I listrutan så blir det typ såhär:

namn1

Namn2

Namn3 osv, ett mellanslag emellen.

jag hade tänkt att ha en statistik del på varje medlem så man kan se hur många nuheter denne har skrivit.

Hur gör man när man länkar ihopp nyhetern med personens id?

Alla andra problem är lösta, utan det är dessa 2 eller 3

Medlem sedan apr. 20031 660 inlägg
#26

Okej, då ger du dig in i html-koden, och ser troligen att du får med extra option-taggar. Därefter listar du ut varför de kommer med.
Vet inte om den kod som finns i http://www.webforum.nu/showthread.php?p=1196833#post1196833 är den som gäller, men där står "<option>". Det bör väl vara en avslutningstagg?

Att länka ihop person med id gör du enklast genom att skapa frågan i Access och kopiera sql-koden. Det är INNER JOIN vi är ute efter, och sådan kan man skriva själv, men enklast är att låta programmet skapa den.
http://www.devguru.com/Technologies/jetsql/quickref/inner_join.html

Bra övrigt löst sig, men vad var felet med parameter-frågan som vi höll på en stund med. ;)
http://www.webforum.nu/showthread.php?p=1196657#post1196657

Medlem sedan sep. 2005833 inlägg
#27

ok, nu avslutade jag med </option>, så nu är det ingen "luft" emellan.
Problemet innan med att hämta datan var att fältet hete email o inte epost.

Men hur löser jag de 2 återstående problemen?
att namnet sparas ihopp med nyheten, samt att fältet nyheter ökar med 1 efter varje nyhet man skriver?

Medlem sedan apr. 20031 660 inlägg
#28

epost/email, ger det sådant fel? Okej, nu fungerar det.

Ang namn, nu märker du problemet med att inte använda relationer. Du kan spara namn och epost i value i option-taggen, ta emot, splitta på mellanslag (eller annat tecken), stoppa in dem med artikeln.
ELLER:
skapar du räknare i skribenttabellen, använder den som value, lagrar med posten. När du hämtar använder du join, enligt tidigare.

Baksidan med hur många ställen du får ändra om namn/epost ändras i första fallet förstår du säkert. Andra fallet är ett ställe.

Ang att öka med ett, skapa en räknare, som jag skrivit.

Medlem sedan sep. 2005833 inlägg
#29

det går inte ändra till räknare i tabellen redaktion, det kommer upp:
Det är endast tillåtet med ett enda fältmed räknare per tabell.

Men kan man göra så att emailen och skribenten sparas ihopp med nyheten i stället för ett nummer, blir så mycket man måste ändra då?

Medlem sedan apr. 20031 660 inlägg
#30

Vad har du räknaren till där/då har du redan en räknare, använd den!

Nja, så mycket jobb är det inte, hur ofta ändras namn/epost?

Men, för att göra på rätt och enklast sätt, bör du inte göra så. I min pseudo-kod får du exempel på hur man kan göra det.

Medlem sedan sep. 2005833 inlägg
#31

räknaren ligger till ID. men hur gör man för att spara id nummret istället för fälten skribent och email?

för att spara anv jag

' Sparar nyheten
ElseIf Request.QueryString("visa") = "nyhetspara" AND Session("Admin") = "true" Then

	strDatum		= now()
	strRubrik		= SafeSQL(Request.Form("rubrik"))
	strNyhet		= SafeSQL(Request.Form("nyhet"))
	strSkribent		= SafeSQL(Request.Form("Skribent"))
	strlank 		= SafeSQL(Request.Form("lank"))
	strlanknamn		= SafeSQL(Request.Form("lanknamn"))
	stremail		= SafeSQL(Request.Form("email"))
	strkategori		= SafeSQL(Request.Form("kategori"))
	

	
	objConn.Execute("INSERT INTO nyheter(Datum,Rubrik,Nyhet,Skribent, lank, lanknamn, email,kategori) VALUES('" & strDatum & "','" & strRubrik & "','" & strNyhet & "','" & strSkribent & "','" & strlank & "','" & strlanknamn & "','" & stremail & "','" & 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
Medlem sedan apr. 20031 660 inlägg
#32

I listrutan ändrar du till RS("id") för value, namn/email bort.

På spara-sidan, ta bort allt med namn resp email, lägg till hämtning av id istället, tex skribent_id, justera INSERT också.

I databasen tas namn/email bort, lägg till tex strskribent_id.

NU förstår jag vad du vill med din addition för nyheter, du vill räkna antalet personen skrivit... :r
Du bör kunna göra som du gör.

Medlem sedan sep. 2005833 inlägg
#33

ok, har nu gjort följande:
gjort en kolumn med namnet skribent_id som är text.
sen ändrat till

' 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

men hur ska jag ändra droppdownrutan?

<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("email")&""">"&objRS("namn") & "</option>"
objRS.Movenext
Loop
objRS.close
else
objRS.close
end if
%>
</select>

tog bort rutan för email där.

Medlem sedan apr. 20031 660 inlägg
#34

Hmm, varför gör du fältet som text, det är väl siffror du ska ha in? :i

Ändra objRS("email") till objRS("skribent_id"), ändra också <select name="namn"> till det du frågar efter.

Sedan bör det fungera!

Medlem sedan sep. 2005833 inlägg
#35

ska det även stå objRS("skribent_id") i dropdownrutan?
finns ju ingen kolumne med namnet skribent_id i tabellen redaktion, utan den heter bara id?

Medlem sedan apr. 20031 660 inlägg
#36

Jag skrev skribent_id eftersom du kallar på Request.Form("skribent_id")).
Eftersom man oftast inte kan följa koden exakt, blir alla råd mer eller mindre exakta, och behöver anpassas. Detta är ett sådant fall.

För att få det konsekvent brukar jag ge nyheter, artiklar etc "huvudtabeller" namnet id för räknare, och "stödtabeller", skribenter, bilder, kategorier namn efter tex skribent_id.
Du får göra som du vill, men för överskådlighet är det lämpligast att hålla samma namn i alla tabeller, dvs antingen 'id' eller 'skribent_id'.

Medlem sedan sep. 2005833 inlägg
#37

nu hänger jag nog inte med redigt.
Jag har i tabellen Redaktion ett fält som heter ID
I tabellen Nyheter har jag ett fält som heter ID samt ett som heter skribent_id.
Är det inte i Skribent_id i nyheterna som skribentens ID nummer som man får från tabellen redaktion som ska skrivas in där?

Medlem sedan apr. 20031 660 inlägg
#38

Exakt!

Men, för att göra det överskådlig kan man kalla fältet samma i båda tabellerna, och eftersom du inte kan ha två fält i samma tabell med samma namn, kan du döpa det till skribent_id.

Du kan alltså ha det precis som du har det nu. Det väljer du själv.

Medlem sedan sep. 2005833 inlägg
#39

ok, men då är problemet att inget nummer sparas i skribent_id.

Medlem sedan apr. 20031 660 inlägg
#40

Och du har bytt namn på selecten som jag skrev?

Felsökning #1:
Skriv ut variabeln där den hämtas.

Felsökning #2:
Skriv ut sql-satsen om varibeln skrivs ut ovan.

Felsökning #3:
Allt annat :h

Felsökning #4:
wF :i

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