Avatar billede dp2001 Juniormester
25. juni 2001 - 19:03 Der er 23 kommentarer og
1 løsning

\"Id\" i forespørgseler

Jeg har gennemgået html.dk\'s ASP-tutorial og ser store muligheder i det hér ASP.

Især muligheden for at lave links ud af forekomster fra tabel og efterfølgende \'pakke disse ud\'.

Med udgangspunkt i eksempel 3 på http://www.html.dk/tutorials/asp/lektion19.asp har jeg følgende spørgsmål:

1) Er man tvunget til at bruge en \"Id\" i select statement og tilsvarende når man laver linket og querystring?

2) Er det det samme \"Id\" der hér er tale om? Hvordan ville eksemplet have set ud, hvis tabellen havde indeholdt feltet \"Nr\" i stedet for \"Id\"?

3) Kan man med udgangspunkt i én tabel, liste disse forekomster og slå op i anden tabel? Hvis ja, hvordan?

Koden til liste.asp og person.asp fra html.dk er som følger...

Koden til liste.asp
<html>
<title>Hente data fra database</title>
<head>
</head>
<body>
<ul>
<%
\' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject(\"ADODB.Connection\")
DSN = \"DRIVER={Microsoft Access Driver (*.mdb)}; \"
DSN = DSN & \"DBQ=\" & Server.MapPath (\"/cgi-bin/database.mdb\")
Conn.Open DSN

strSQL = \"Select * From personer Order by Fornavn Desc\"
Set rs = Conn.Execute(strSQL)

Do
  \' Personens navn
  strNavn = rs(\"Fornavn\") & \" \" & rs(\"Efternavn\")

  \' lav et link til person.asp med Id-værdien i URL
  strLink = \"<a href=\'person.asp?id=\" & rs(\"Id\") & \"\'>\" & strNavn & \"</a>\"

  \' Liste med links
  Response.Write \"<li>\" & strLink & \"</li>\"

  rs.MoveNext
Loop While Not rs.EOF

Conn.Close
Set Conn = Nothing
%>
</ul>
</body>
</html>





Koden til person.asp
<html>
<title>Hente data fra database</title>
<head>
</head>
<body>
<dl>
<%
\' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject(\"ADODB.Connection\")
DSN = \"DRIVER={Microsoft Access Driver (*.mdb)}; \"
DSN = DSN & \"DBQ=\" & Server.MapPath (\"/cgi-bin/database.mdb\")
Conn.Open DSN

\' Hent fra databasen afhængig af værdien id fra URL
strSQL = \"Select * From personer Where Id = \" & Request.Querystring(\"id\")
Set rs = Conn.Execute(strSQL)

\' Skriv personens data
Response.Write \"<dt>Navn:</dt><dd>\" & rs(\"Fornavn\") & \" \" & rs(\"Efternavn\") & \"</dd>\"
Response.Write \"<dt>Telefon:</dt><dd>\" & rs(\"Telefon\") & \"</dd>\"
Response.Write \"<dt>Fødselsdato:</dt><dd>\" & FormatDateTime(rs(\"Foedselsdato\"), vbLongDate) & \"</dd>\"

Conn.Close
Set Conn = Nothing
%>
</dl>
<p><a href=\"liste.asp\">Retur til listen</a></p>
</body>
</html>

Avatar billede tommyf Nybegynder
25. juni 2001 - 19:05 #1
2) ID er bare det man normalt kalder en kolonne hvis den er sat til autonummering og man kun skal bruge den til at identficere de enkelte poster (primary key)
Avatar billede dp2001 Juniormester
25. juni 2001 - 19:07 #2
Dvs. at \"id\" i URL\'en og ID i realiteten er to forskellige ting, eller hvad?
Avatar billede tommyf Nybegynder
25. juni 2001 - 19:26 #3
I den øverste er ID et felt i databasen.
Først tager den feltet fornavn og efternavn og sætter dem sammen og gemmer dem i stringen strNavn
(strNavn = rs(\"Fornavn\") & \" \" & rs(\"Efternavn\"))
Derefter tager den og laver en string som blandt andet indeholder strNavn og feltet ID i databasen:
strLink = \"<a href=\'person.asp?id=\" & rs(\"Id\") & \"\'>\" & strNavn & \"</a>\"

strSQL = \"Select * From personer Where Id = \" & Request.Querystring(\"id\")
- I ovenstående eksempel henter ASP en streng URL\'en, hvis URL\'en havde været;
person.asp?id=321
Så ville den hente de informationer i databasen der står i samme kolonne som det felt hvor ID er 321.

Avatar billede tommyf Nybegynder
25. juni 2001 - 19:30 #4
Det er bare et navn, de kunne have kaldt feltet i kolonnen i databasen for \"primary\", og I URL\'en kunne de bruge \"valg\".
Avatar billede dp2001 Juniormester
25. juni 2001 - 19:30 #5
Så StrNavn er udelukkende med henblik på at opbygge en URL?

Hvis jeg nu gerne ville have lavet et link, hvor jeg fandt alle personer der boede i \"Vestergade\" (forudsat, at jeg have et DB-felt ved navn \"Adresse\"), hvordan skulle jeg så have grebet det an?

Og hvordan skal man gribe det an, hvis jeg i tabellen personer, blot havde en adresse-id og skulle over og slå denne op i en tabel ved navn adressetabel?
Avatar billede dp2001 Juniormester
25. juni 2001 - 20:04 #6
Nu har jeg lavet følgende

a.asp:

<%
\' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject(\"ADODB.Connection\")
DSN = \"DRIVER={Microsoft Access Driver (*.mdb)}; \"
DSN = DSN & \"DBQ=\" & Server.MapPath (\"peter.mdb\")
Conn.Open DSN

strSQL = \"Select * From navn_tbl Order by Fornavn Desc\"
Set rs = Conn.Execute(strSQL)

Do
  \' Personens navn
  strNavn = rs(\"Fornavn\") & \" \" & rs(\"Efternavn\")
 

  \' lav et link til b.asp med id-værdien i URL
  strLink = \"<a href=\'b.asp?Adresse-ID=\" & rs(\"Adresse-ID\") & \"\'>\" & strNavn & \"</a>\"
 

  \' Liste med links
  Response.Write \"<li>\" & strLink & \"</li>\"
 

  rs.MoveNext
Loop While Not rs.EOF

Conn.Close
Set Conn = Nothing
%>



og b.asp:

<%
\' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject(\"ADODB.Connection\")
DSN = \"DRIVER={Microsoft Access Driver (*.mdb)}; \"
DSN = DSN & \"DBQ=\" & Server.MapPath (\"peter.mdb\")
Conn.Open DSN

\' Hent fra databasen afhængig af værdien id fra URL
strSQL = \"Select * From adresse_tbl Where Adresse-ID = \" & Request.Querystring(\"id\")
Set rs = Conn.Execute(strSQL)

\' Skriv personens data
Response.Write \"<dt>Gade:</dt><dd>\" & rs(\"Gade\") & \" \" & rs(\"By\") & \"</dd>\"

Conn.Close
Set Conn = Nothing
%>


Det jeg vil er udfra Adresse-ID i tabel navn_tbl at slå adressen (Gade og By) op i adresse_tbl. Men jeg får følgende fejl i b.asp:

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket \"Adresse-ID =\".
/b.asp, line 16


???

Avatar billede twm Nybegynder
25. juni 2001 - 20:07 #7
strSQL = \"Select * From adresse_tbl Where Adresse-ID = \'\" & Request.Querystring(\"id\")&\"\'\"
Avatar billede twm Nybegynder
25. juni 2001 - 20:07 #8
Prøv at bruge denne linje i stedet for linje 16
Avatar billede dp2001 Juniormester
25. juni 2001 - 20:09 #9
Nope, det er det samme.

Hvad skulle det bevirke?
Avatar billede twm Nybegynder
25. juni 2001 - 20:11 #10
jeg satte apostrofer rundt om værdien, hvis den ikke var en integer i din database
Avatar billede twm Nybegynder
25. juni 2001 - 20:15 #11
strSQL = \"Select * From adresse_tbl Where Adresse-ID = \'\" & Request.Querystring(\"Adresse-ID\")&\"\'\"
du skal huske at spørge efter den samme værdi som du sender
Avatar billede dp2001 Juniormester
25. juni 2001 - 20:18 #12
Hmmm....ja, det burde jeg have sagt mig selv, men jeg får nu stadig følgende fejl...

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][ODBC Microsoft Access-driver] Der er for få parametre. Der var ventet 2.
/b.asp, line 16
Avatar billede twm Nybegynder
25. juni 2001 - 20:22 #13
er
Set Conn = Nothing
linje 16 for dig?
eller hvad er din linje 16
Avatar billede dp2001 Juniormester
25. juni 2001 - 20:24 #14
Forudsat, at blanke og kommentarer ikke tæller med, er linje 16 følgende....

Set rs = Conn.Execute(strSQL)
Avatar billede twm Nybegynder
25. juni 2001 - 20:25 #15
Prøv at bruge denne!
<%
\' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject(\"ADODB.Connection\")
DSN = \"DRIVER={Microsoft Access Driver (*.mdb)}; \"
DSN = DSN & \"DBQ=\" & Server.MapPath (\"peter.mdb\")
Conn.Open DSN

\' Hent fra databasen afhængig af værdien id fra URL
strSQL = \"Select * From adresse_tbl Where Adresse-ID = \'\" & Request.Querystring(\"Adresse-ID\")&\"\'\"
Set rs = Conn.Execute(strSQL)

if not rs.eof then
\' Skriv personens data
Response.Write \"<dt>Gade:</dt><dd>\" & rs(\"Gade\") & \" \" & rs(\"By\") & \"</dd>\"
else
response.write(\"Ingen Data fundet\")
end if

Conn.Close
Set Conn = Nothing
%>

Avatar billede dp2001 Juniormester
25. juni 2001 - 20:27 #16
Det giver sg* samme resultat!
Avatar billede twm Nybegynder
25. juni 2001 - 20:28 #17
kan du ikke prøve at ændre adresse-id til adresseid i databasen og i koden?
Avatar billede dp2001 Juniormester
25. juni 2001 - 20:30 #18
Igen...samme resultat!

Flere forslag? :)
Avatar billede dp2001 Juniormester
25. juni 2001 - 20:30 #19
Er det i øvrigt case sensitive?
Avatar billede twm Nybegynder
25. juni 2001 - 20:33 #20
kan du ikke prøve at sende db\'en
mail: twm@twm.dk
Avatar billede twm Nybegynder
25. juni 2001 - 20:37 #21
nu ved jeg hvorfor du bruger BY det er et reserveret ord, kald den city i stedet for
nej der burde ikke være nogen prob med store og små bogstaver
Avatar billede dp2001 Juniormester
25. juni 2001 - 20:45 #22
Det hjalp nu heller ikke helt, men jeg kom videre...

Først fik jeg en fejl om forkert dataformat.....

Hvorefter jeg fjernede \"\'\".

Nu brokker den sig over

Fejltype:
ADODB.Recordset (0x800A0CC1)
Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.
/b.asp, line 20
Avatar billede dp2001 Juniormester
25. juni 2001 - 20:55 #23
Det virker fint, hvis jeg ryger ind i denne...

else
response.write(\"Ingen Data fundet\")
Avatar billede dp2001 Juniormester
25. juni 2001 - 22:45 #24
Nu fik jeg det endelig til at virke efter lidt meget korrespondance med twm (tak for hjælpen!).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester