René Haagen skrev:
> Er der nogen der kan fortælle hvad det er jeg har glemt
Du har glemt flere ting. Når du spørger om hjælp her i gruppen gør
du det lettere for dine læsere - og i sidste ende også lettere for
dig selv - hvis du husker at beskrive dit problem så præcist som
muligt. Din overskrift fortæller at du har noget db-kode der ikke
virker - men vi kan ikke se hvordan det ikke virker.
Kig på de fejlmeddelelser du får når du afprøver siden. Skriver
browseren 500 internal error kan du læse hvad du skal gøre her:
<
http://www.asp-faq.dk/article/?id=45>. Får du en detaljeret
fejlbeskrivelse, så send den med her. Hvis der står at der er fejl
i linje 36 vil det være praktisk at fortælle gruppen hvilken linje
der er nummer 36 (ofte opstår problemet et par linjer før, så send
gerne flere linjer end den ene der genererer fejlen).
Endelig er det, når det drejer sig om sql-sætninger, altid en god
ide at udskrive den samlede sql-streng inden man kører den. En
streng der opbygges over flere linjer af tekststumper og request-
objekter kan være svær at overskue - selv for garvede folk. Et
enkelt lille <% Response.write SQL %> kan gøre underværker.
Det var dagens moralprædiken [1]
Selv om du ikke har sendt fejlmeddelelsen med har jeg en
fornemmelse af hvor det går galt.
> SQL = "SELECT * FROM bakketur"
> Rs.AddNew
Disse linjer bruger du faktisk slet ikke - væk med dem.
Når du indsætter (eller opdaterer) data har du to muligheder -
enten kører du en handlingsforespørgsel eller også sætter du data
ind med en cursor. Du skal kun gøre én af tingene
..Addnew og .Update bruges hvis man opdaterer med cursor - så
skriver man ind imellem disse linjer tildelingskode på formen:
Rs("feltnavn") = Request.Form("tilsvarendefeltnavn")
> ' SQL sætning opbygges
> strSQL = "Insert into bakketur (nick, url, dato, tid, ip)"
> strSQL = strSQL & "values( "
Der mangler et mellemrum før values (det er en af de ting der er
let at se hvis man udskriver sql-strengen)
> strSQL = strSQL & "nick= '" & request.form Rs("nick") & "', "
> strSQL = strSQL & "url= '" & request.form Rs("url") & "', "
Her er noget galt. Jeg vil tro at du mener Request.Form("nick")
hhv. Request.Form("url"). Rs("nick") og Rs("url") indeholder ikke
noget (du har lige tilføjet en post i Rs). Og Request.Form
Rs("nick") giver under alle omstændigheder ikke mening - det er to
separate udsagn, uden nogen operator til at binde dem sammen (det
svarer lidt til at skrive:
"Hans Otto" "Bisgaard" - for at virke skal der noget mellem de to
udtryk.
> strSQL = strSQL & "dato = '" & date & "', "
> strSQL = strSQL & "tid= '" & time & "', "
Hvis dato og tid er tekstfelter (i databasen) er ovenstående o.k.
Ellers skal datoer i Access markeres med #. Men det er langt
lettere at lade Access indsætte dags dato og klokkeslæt. Lav et
felt der hedder "oprettet" og giv det standardværdien Now(). Så
behøver du slet ikke tænke på det når du indsætter data (du skal
bare lade være med eksplicit at angive data for feltet - så bliver
standardværdien tildelt).
> strSQL = strSQL & "ip= '" &
> request.servervariables("REMOTE_ADDR") & "'"" )"
Der er vist også et par anførselstegn for meget herover. Fjern de
to gange " i midten af sidste strengdel (igen er det hurtigt at
opdage sådan en fejl ved at udskrive strSQL).
> Rs.update
Denne linje er (som de andre rs-linjer) overflødig.
> 'SQL sætning eksekveres
Præcis her skal du - når du har problemer med databasekoden - sætte
følgende ind:
Response.write strSQL
Linjen skal udkommenteres når siden fungerer som den skal.
> Conn.Execute(strSQL)
Denne linje er - sammen med en korrekt opbygget sql-sætning - det
eneste der skal til for at køre en handlingsforespørgsel. Du skal
altså slet ikke bruge et recordset.
Noter:
======
[1] Tag det ikke ilde op - de første par afsnit i henvendt til alle
begyndere i gruppen og er alene ment som hjælp til selvhjælp. Jo
bedre man kan formulere et problem, desto hurtigere kan man
forvente at få det løst.
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO -
www.fiduso.dk)
I ovenstående tekst benyttes nyt komma.