/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
insæt i Db virker ikke.
Fra : René Haagen


Dato : 31-10-02 21:54

Er der nogen der kan fortælle hvad det er jeg har glemt eller sat for meget
ind her....

<html>
<title>Opdatere data i databasen</title>
<head>
</head>
<body>
<%
' Databaseforbindelse
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../db/dbase.mdb")
Conn.Open DSN

SQL = "SELECT * FROM bakketur"
Dim strsql, nick, url, dato, tid, ip
Set Rs = Server.CreateObject("ADODB.RecordSet")
Rs.Open SQL, Conn, 1,3

Rs.AddNew


' SQL sætning opbygges
strSQL = "Insert into bakketur (nick, url, dato, tid, ip)"
strSQL = strSQL & "values( "
strSQL = strSQL & "nick= '" & request.form Rs("nick") & "', "
strSQL = strSQL & "url= '" & request.form Rs("url") & "', "
strSQL = strSQL & "dato = '" & date & "', "
strSQL = strSQL & "tid= '" & time & "', "
strSQL = strSQL & "ip= '" & request.servervariables("REMOTE_ADDR") & "'"" )"

Rs.update

'SQL sætning eksekveres
Conn.Execute(strSQL)

' Luk databaseforbindelse
Rs.close
set Rs = Nothing
Conn.Close
Set Conn = Nothing
Response.redirect ("default.asp")
%>
</body>



 
 
Jens Gyldenkærne Cla~ (31-10-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 31-10-02 22:51

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.

René Haagen (31-10-2002)
Kommentar
Fra : René Haagen


Dato : 31-10-02 23:42

Jeg siger mange gang tak, er glad for de fine kommentar og forklaringer, det
er virklige noget jeg har manglet, så mange tak for dem, de hjælper en
newbee som mig.

nu for jeg bare denne fej... tager jeg fejl vis det har noget at gøre med at
databasen vil ha flere input end jeg giver den.

Insert into bakketur (nick, url, dato, tid, ip) values( nick= 'René', url=
'www.den-smukke.dk', dato = '31-10-2002', tid= '23:35:14', ip=
'62.79.23.186')
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 5.

/add.asp, line 31

line 31 = Conn.Execute(strSQL)


I db er der følgende felter id(auto num), ip, dato, tid, nick, url.

vil blive glad for et lige så god forklaring svar som før

René




Jakob Andersen (01-11-2002)
Kommentar
Fra : Jakob Andersen


Dato : 01-11-02 00:03

"René Haagen" <rene@haagen.dk> wrote
> Insert into bakketur (nick, url, dato, tid, ip) values( nick= 'René', url=
> 'www.den-smukke.dk', dato = '31-10-2002', tid= '23:35:14', ip=
> '62.79.23.186')
> Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
>
> [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 5.
>
> /add.asp, line 31


Du skal ikke skrive navnene på felterne 2 gange i din INSERT SQL sætning,
læs evt. mere om INSERT her:

<http://www.w3schools.com/sql/sql_insert.asp>

--
Jakob Andersen



René Haagen (01-11-2002)
Kommentar
Fra : René Haagen


Dato : 01-11-02 00:23


>
> <http://www.w3schools.com/sql/sql_insert.asp>

Takker for linket...

René



Jens Gyldenkærne Cla~ (31-10-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 31-10-02 23:59

René Haagen skrev:

> Insert into bakketur (nick, url, dato, tid, ip) values( nick=
> 'René', url= 'www.den-smukke.dk', dato = '31-10-2002', tid=
> '23:35:14', ip= '62.79.23.186')

Du skal ikke skrive feltnavnene i den anden parantes. Altså:

INSERT INTO tabelnavn (felt1, felt2, felt3)
VALUES (værdi1, værdi2, værdi3)

> vil blive glad for et lige så god forklaring svar som før

Den bliver noget kortere - men spørg igen hvis du ikke forstår den.
Og så er det i øvrigt dejligt at se at du har fået noget ud af mit
første svar. Der var både sqludskrivning og fejlmeddelelser i dit
andet indlæg - meget fint.
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma.

René Haagen (01-11-2002)
Kommentar
Fra : René Haagen


Dato : 01-11-02 00:22


> Den bliver noget kortere - men spørg igen hvis du ikke forstår den.
Skulle lige tænke lidt denne gang, men nu lære jeg..
og det virker Tak.

> Og så er det i øvrigt dejligt at se at du har fået noget ud af mit
> første svar. Der var både sqludskrivning og fejlmeddelelser i dit
> andet indlæg - meget fint.

er osse glad for det lille hint udskriv sql.
man må jo lære ......

René



Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408952
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste