webForumDet fria alternativet

slumpa databas inlägg

ASPur ASP

24 svar · 1 144 visningar · startad av noshornin

Medlem sedan aug. 2008816 inlägg
Frågan#1

Tjenare. Jag stör mig på alla dom dära små tecknen.
Jag vill slumpa fram en rad i databasen.

<%
Dim Slumptal

Randomize
Slumptal = Int(Rnd * 10)
%>

<%	
	Set RecSet = Server.CreateObject("ADODB.Recordset")
   Visa = "SELECT * FROM users where id = '" & Slumptal & "'"
   RecSet.Open Radera, oConn, adOpenStatic, adLockOptimistic %>

Vad har jag gjort för fel?

Medlem sedan dec. 2004736 inlägg
#2

Jag misstänker att id är ett tal, och tal omges inte av ' i SQL. Alltså:
Visa = "SELECT * FROM users where id = " & Slumptal

Medlem sedan dec. 20025 483 inlägg
#3

1. Slumptal kommer bara att innehålla ett tal i intervallet [0,9].
2. Vad händer om du inte får någon träff med det slumpade talet?
3. Kika på andra alternativ.

Medlem sedan juli 20003 825 inlägg
#4

Föslag:
1. Läs in all data i en application-variabel, som array.
2. Slumpa på storleken på arrayen.

Fördelen är att du gör detta EN gång per dag (till exempel) samt att du inte kan slumpa tal som inte finns.

****
Du använder den där bökiga varianten av SQL-kommando som Microsoft hittat på som jag ännu inte fattar... och som jag klarat mig utan i snart 10 år.

Byt tillvägagångssätt! :-)

Medlem sedan feb. 20001 590 inlägg
#5

bökiga varianten av SQL-kommando som Microsoft hittat på

????

Medlem sedan dec. 2004736 inlägg
#6

Toonster skrev:

????

Gissar att han syftar på ...adOpenStatic, adLockOptimistic...

Medlem sedan juni 20008 205 inlägg
#7

noshornin skrev:

Vad har jag gjort för fel?

Bortsett från det som redan nämnts, så använder du en variabel som heter "Radera" när jag misstänker att du menar att använda "Visa". Snabbt åtgärdat, men dock ett symptom på något mycket, mycket allvarligare - jag misstänker att du har kod som baserats på IDG Webstudios bortom bedrövliga ASP-tutorial, denna milstolpe i misslyckande? Glöm allt du läst i den, den är en katastrof.

Medlem sedan dec. 2004736 inlägg
#8

Du skulle kunna byta ut:

<%	
Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa = "SELECT * FROM users where id = '" & Slumptal & "'"
RecSet.Open Radera, oConn, adOpenStatic, adLockOptimistic
%>

mot

SQL = "SELECT TOP 1 * FROM users ORDER BY Rnd(id)"
Set RecSet = oConn.Execute(SQL);

Vilket är bättre kod! Vad gäller SQL-satsen är jag inte helt säker på att den är korrekt, men testa och säg till om det inte fungerar!

Medlem sedan mars 20041 505 inlägg
#9

Är det bara jag som undrar vilken databashanterare noshornin använder, eller trivs ni med att sitta och gissa? :P
noshornin, gäller det Access, MSSQL eller möjligen MySQL? :)

Ledel skrev:

Gissar att han syftar på ...adOpenStatic, adLockOptimistic...

Det är ADODB-konstanter och jag förstår inte varför det skulle vara bökigt.

Medlem sedan juli 20003 825 inlägg
#10

Jag tror att det är Access.

Jag har open.asp som jag inkluderar på alla sidor:
Där står bland annat:

'## OPEN THE DATABASE
DIM Conn, SQL, mySQL, myPost, myRow, i, j
Set Conn = Server.CreateObject("ADODB.Connection")

'## OPEN THE DATABASE
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & session("databasePath")

sessionen för detta sätts i global.asa , då med exakt sökväg och inte server.mappath då det inte fungerar med global.asa .

Jag har även close.asp, men i den filen stänger jag bara databasen och det är egentligen inte mycket kod/text:

'## CLOSE THE DATABASE
Conn.Close
Set Conn = Nothing

******************

Så alla mina sidor ser ut som följer:

<!-- #INCLUDE VIRTUAL="/admin/open.asp" -->
<%
' ## kod.... och ännu mera kod!
%>
<!-- #INCLUDE VIRTUAL="/admin/close.asp" -->

******************

Med detta i åtanke, skulle jag skriva så här:

<!-- #INCLUDE VIRTUAL="/admin/open.asp" -->
<%
SQL = "SELECT intID, strName FROM [users];"
Set mySQL = Conn.Execute(SQL);

IF NOT mySQL.EOF THEN myArray = mySQL.GetRows()

' ## SLUMPA
talAttSlumpa = UBound(myArray,2)
%>
<!-- #INCLUDE VIRTUAL="/admin/close.asp" -->

Kör på det! Det blir aldrig fel.

Funkar med Access och MS SQL Server rakt av, med marginell modifikation även med mySQL.

Skippa det där med adOptimistic, pessimistic och all den skiten. Det är nåt som Microsoft har hittat på och det är ändå ingen som fattar.

Det är lite som "snälla felmeddelanden" i Explorer. Ingen vettig kodare använder det. Alla stänger av det.

Medlem sedan dec. 2004736 inlägg
#11

Troxy skrev:

Det är ADODB-konstanter och jag förstår inte varför det skulle vara bökigt.

Helt bökigt är det väl inte, men i det här fallet är det enklare att lära sig den motsvarande siffran, eftersom man då slipper inkludera adovbs i varje fil.
Gör man sedan som jag skrev i mitt sista inlägg, att du skapar ditt recordset med hjälp av .execute, slipper du dessa helt!

Medlem sedan dec. 2007467 inlägg
#12

Jag bettar också på Access, inte kan det vara MySQL ..

Medlem sedan juni 20008 205 inlägg
#13

Eclipse skrev:

Skippa det där med adOptimistic, pessimistic och all den skiten. Det är nåt som Microsoft har hittat på och det är ändå ingen som fattar.

Suck. Nej, Microsoft har inte "hittat på" optimistisk/pessimistisk låsning, inte mer än de "hittat på" saker som cursors, SQL eller prepared statements. Det stämmer förvisso att det är överflödigt här, men att avfärda det med att "ingen fattar det" är bara barnsligt. Jag vet att "dokumentation" är ett i stort sett okänt begrepp för många här på ASP-forumet, men det finns faktiskt sådan (och den är hyfsat lätt att hitta medelst en vanlig sökmotor), och häpnadsväckande nog kan den kan berätta för en vad som händer - nästan som magi! Plötsligt slipper man all cargokultsprogrammering och kan begripa vad som händer i ens kod. Förstår man inte vad som står i dokumentationen, använder man Google eller Wikipedia.
http://msdn.microsoft.com/en-us/library/ms680855(VS.85).aspx

Ledel skrev:

Helt bökigt är det väl inte, men i det här fallet är det enklare att lära sig den motsvarande siffran

Det är alltid fel att använda en siffra istället för en namngiven konstant. När du övergett ASP och glömt bort vad i helvete den där trean betydde, kommer din webbapp automatiskt - magiskt, på en gång - att paja och du får sitta med hundra sura användare som ringer var trettionde sekund samtidigt som du rotar igenom dokumentationen för att lista ut varför du skrev "3" och inte "4", eller (Gud förbjude) "2".

lalja skrev:

Jag bettar också på Access, inte kan det vara MySQL ..

Sätter också mina pengar på det, med tanke på att det är Webstudio-kod skulle jag bli förvånad om det var något annat.

Medlem sedan mars 20041 505 inlägg
#14

Ledel skrev:

Gör man sedan som jag skrev i mitt sista inlägg, att du skapar ditt recordset med hjälp av .execute, slipper du dessa helt!

Slipper och slipper, du får ett Read-only och Forward-only recordset.
Ibland måste man kanske navigera med MovePrevious/MoveFirst eller använda PageSize för sidindelning etc. och då måste man sätta lite egenskaper själv.
Men visst, om man gillar att leva i ovisshet och bara ta saker för givet så kör på med Execute() och var glad :birp

spango, (y) (y) (y)

Medlem sedan mars 20041 505 inlägg
#15

Ledel skrev:

...eftersom man då slipper inkludera adovbs i varje fil.

Det är onödigt eftersom ADO har ett blibliotek med alla konstanter. Lägg bara till detta först i global.asa:

<!--METADATA TYPE="typelib" UUID="2A75196C-D9EB-4129-B803-931327F72D5C"-->
Medlem sedan aug. 2008816 inlägg
#16

spango skrev:

Bortsett från det som redan nämnts, så använder du en variabel som heter "Radera" när jag misstänker att du menar att använda "Visa". Snabbt åtgärdat, men dock ett symptom på något mycket, mycket allvarligare - jag misstänker att du har kod som baserats på IDG Webstudios bortom bedrövliga ASP-tutorial, denna milstolpe i misslyckande? Glöm allt du läst i den, den är en katastrof.

ok! Jag tycker den var ganska bra. Vad är det som är misslyckat?
Jag har acces databas.
tack för alla svar!:) ska testa det lite senare.

Medlem sedan mars 20041 505 inlägg
#17

noshornin skrev:

Jag har acces databas.

Då är detta allt som behövs: (Ledels förslag)

<%
Set RecSet = oConn.Execute("SELECT TOP 1 * FROM users ORDER BY Rnd(id)")
%>
Medlem sedan juni 20008 205 inlägg
#18

noshornin skrev:

ok! Jag tycker den var ganska bra. Vad är det som är misslyckat?

Allt, precis allt. Ska vi peka ut något enastående så är det väl inloggningsfunktionen i lektion 47 som jag (och många med mig) anser borde klassas som brott mot mänskligheten. Radera all kod du kopierat från WebStudio. Tyvärr är den låga nivån genomgående för typ alla ASP-tutorials jag sett (och i ärlighetens namn, för en förfärande stor andel av alla tutorials för andra sorters webbprogrammering också).

Om man inte kan programmera är det dumt att lära sig Classic ASP av tusen olika skäl (om man inte gör det för att man måste underhålla befintlig programvara). Förutom att Classic ASP är helt skrotat till förmån för ASP.NET, är webbprogrammering i allmänhet och Classic ASP i synnerhet en ganska dålig miljö att lära sig programmering i. Med ASP blir det mycket COM-magi som är svårgreppat för en nybörjare (något som bevisats i den här tråden), dessutom använder det ett i de flesta andra sammanhang nästan oanvändbart programmeringsspråk (Microsofts nya flaggskepp är ju C#, som har ungefär noll släktband till Vbscript), dokumentationen är svåröverskådlig (och svårfunnen, om man inte har tur på Google), plus att man får leva med den allmänna extra förvirringen som uppstår när man håller på med webb.

red. Stafvel

Medlem sedan nov. 20014 054 inlägg
#19

spango skrev:

Allt, precis allt. Ska vi peka ut något enastående så är det väl inloggningsfunktionen i lektion 47 som jag (och många med mig) anser borde klassas som brott mot mänskligheten. Radera all kod du kopierat från WebStudio. Tyvärr är den låga nivån genomgående för typ alla ASP-tutorials jag sett (och i ärlighetens namn, för en förfärande stor andel av alla tutorials för andra sorters webbprogrammering också).

Om man inte kan programmera är det dumt att lära sig Classic ASP av tusen olika skäl (om man inte gör det för att man måste underhålla befintlig programvara). Förutom att Classic ASP är helt skrotat till förmån för ASP.NET, är webbprogrammering i allmänhet och Classic ASP i synnerhet en ganska dålig miljö att lära sig programmering i. Med ASP blir det mycket COM-magi som är svårgreppat för en nybörjare (något som bevisats i den här tråden), dessutom använder det ett i de flesta andra sammanhang ett nästan oanvändbart programmeringsspråk (Microsofts nya flaggskepp är ju C#, som har ungefär noll släktband till Vbscript), dokumentation är svåröverskådlig (och svårfunnen, om man inte har tur på Google), plus att man får leva med den allmänna extra förvirringen som uppstår när man håller på webb.

Vi på jobbet brukar hänvisa Classic ASP som CASP ... kan nästan höras som kass-asp. :OO

Medlem sedan aug. 2008816 inlägg
#20

spango skrev:

Allt, precis allt. Ska vi peka ut något enastående så är det väl inloggningsfunktionen i lektion 47 som jag (och många med mig) anser borde klassas som brott mot mänskligheten.

red. Stafvel

Det ända dåliga med inloggningen är väl att den enbart ser om användarnamnet och lösenordet man skriver finns i data basen.
Inte om dom tillhör samma acc?
Men om man ändrar det till att både användarnamnet och lösenordet måste ha samma id, funkar det riktigt bra.. :l

137 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)