Avatar billede j-b-l Nybegynder
24. oktober 2001 - 09:20 Der er 12 kommentarer og
1 løsning

Billeder fra Access til web via ASP

HEJ

Jeg har en database med to tabeller

KUNSTNER
KunstnerID
Fornavn
Efternavn

&

KUNSTVÆRK
KunstværkID
Titel
URL (dette felt indeholder stien til billedet der ligger i en mappe for sig. Mappen hedder Files)

Jeg kan godt finde ud af at sql-forbinde de to tabeller i en forespørgelse.

MIT SPØRGSMÅL:

Hvordan trækker jeg ved hjælp af ASP et billed ud af mappen Files, når en bestem kunstner med tilhørende kunstværk forespørges ?

Håber der er nogle der har lyst til at hjælpe :-)
Avatar billede starleicht Nybegynder
24. oktober 2001 - 09:39 #1
\'Her er et eksempel uden DSN med en Access-database (Er ikke testet!!)

\' Definer connection-objekt
Set objConnection = Server.CreateObject(\"ADODB.Connection\")

\' Definer recordset-objekt
Set objRecordSet = Server.CreateObject(\"ADODB.Recordset\")

\' Åbn forbindelse til databasen
objConnection.Open \"Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\\databaser\\kunst.mdb;\"

\' Definer hvad der skal trækkes ud af databasen
strSQL = \"SELECT * FROM DinTable\"

\' Åbn recordset (hent data ud af databasen)
objRecordSet.Open strSQL, objConnection

\' Lav udtræk af billede fra databasen
BilledUdtraek = objRecordSet(\"URL\")

\' Udskriv billede
Response.Write \"<img src=\'\"&BilledUdtraek &\"\'>\"
Avatar billede chrille Nybegynder
24. oktober 2001 - 09:56 #2
Hej...

FRÅGA1!
har du någon ASP kod klar? eller är det bara databasen du har än så länge?

FRÅGA2!
Hur skall du uppdatera databasen? via ASPScript
eller skriva rakt in i databasen??

det jag kan säga på rak arm så här är att du måste skapa en relation mellan de två tabellerna(om du nu inte redan har det??).
Du behöver egentligen inte ha något speciellt fält för URL (om du inte kommer att byta namn på mappen hela tiden?)detta anger du i ASP i stället!

Avatar billede j-b-l Nybegynder
24. oktober 2001 - 10:28 #3
Hej chrille

?1
Har ikke nogen asp-kode klar (er nybegynder)

?2
Hvis muligt ville det være bedst at opdatere via ASP

Relation mellem de to tabeller er skabt. Jeg benytter en tredje tabel KUNSTNER_KUNSTVÆRK til at forbinde de to mange-til-mange-relationer:
SELECT KUNSTNER.KunstnerID, KUNSTNER.Fornavn, KUNSTNER.Efternavn, KUNSTVÆRK.KunstværkID, KUNSTVÆRK.Titel, KUNSTNER_KUNSTVÆRK.KunstnerID, KUNSTNER_KUNSTVÆRK.KunstværkID FROM KUNSTNER, KUNSTVÆRK, KUNSTNER_KUNSTVÆRK WHERE KUNSTNER.KunstnerID=KUNSTNER_KUNSTVÆRK.KunstnerID AND KUNSTVÆRK.KunstværkID=KUNSTNER_KUNSTVÆRK.KunstværkID

Som du kan se har jeg droppet URL-feltet nu hvor du siger den ikke er nødvendig...
Avatar billede chrille Nybegynder
24. oktober 2001 - 10:58 #4
hmm..den där relationen är den många till många??
man får resonera lite såhär
först kan vi börja med databasen!!
en konstnär kan ha många olika konstverk,medans ett konstverk inte kan ha mer en en konstnär!!?
så därför borde relationen bli en(ifrån konstnär)
till många(konstverk)
sedan skulle du kunna lägga till ett fält i tabellen konstverk som heter \"KunstnerID\",ge det formatet \"tal\"(långt heltal), där kommer Knonstnärens unika ID att lagras!!
Avatar billede j-b-l Nybegynder
24. oktober 2001 - 21:45 #5
Relationen er en mange til mange fordi databasen også skal kunne håntere kunstnere fra en særlig kunstgruppe (Cobra) - der ofte malede kollektive værker, hvor flere kunstnere var sammen om det samme billede
Avatar billede chrille Nybegynder
25. oktober 2001 - 10:08 #6
oops..jag visste inte att flera konstnärer arbetade kollektivt på ett och samma verk!!

ok då kan vi fortsätta..

Fråga: har du någon Webbserver tillgänglig för att köra ASP sidorna på??
Avatar billede j-b-l Nybegynder
25. oktober 2001 - 13:32 #7
Hej chrille

Jeg har lagt siderne, mappen Files, og databasen hos Brinkster.com. Har iøvrigt lavet databasen med engelske titler istedet og forsøgt at komme så langt som muligt med koden:

TABELLER I DATABASEN:

ARTIST
---------
ArtistID (PK)
Firstname
Surname

ARTWORK
------------
ArtworkID (PK)
OriginalTitle
Year
Size
MediaID (FK)
GenreID (FK)

ARTIST_ARTWORK
----------------------
ArtistID
ArtworkID

MEDIA
-------
MediaID (PK)
Media

GENRE
--------
GenreID (PK)
Genre


SQL der forbinder tabellerne (er testet OK):

SELECT ARTIST.Firstname, ARTIST.Surname, ARTWORK.ArtworkID, ARTWORK.OriginalTitle, ARTWORK.Year, ARTWORK.Size, GENRE.Genre, MEDIA.Media FROM ARTIST, ARTWORK, ARTIST_ARTWORK, MEDIA, GENRE WHERE ARTIST.ArtistID=ARTIST_ARTWORK.ArtistID AND ARTWORK.ArtworkID=ARTIST_ARTWORK.ArtworkID AND ARTWORK.MediaID=MEDIA.MediaID AND ARTWORK.GenreID=GENRE.GenreID


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Fra en søgeside (search.htm) vil jeg gerne kunne søge på kunstnerens navn (Firstname, Surname), billedtitel (OriginalTitle), (eventuelt også Year og Media), og få et resultat på en ny side (result.asp).

Min søgeside ser ud som denne:
-------------------------------------

<html>
<head>
<title>Search</title>
</head>
<body>
<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
  <tr>
    <td width=\"10%\"></td>
    <td></td>
    <td><img src=\"Files/LogoEx1.gif\" width=\"180\" height=\"100\"></td>
    <td width=\"30%\"></td>
  </tr>
  <tr>
    <td width=\"15%\"></td>
    <td colspan=\"2\"></td>
    <td width=\"30%\"></td>
  </tr>
  <tr>
    <td width=\"15%\"></td>
    <td colspan=\"2\"></td>
    <td width=\"30%\"></td>
  </tr>
  <tr>
    <td width=\"15%\"></td>
    <td width=\"5%\"></td>
    <td width=\"50%\"><td>
    <td width=\"30%\"></td>
  </tr>
  <tr>
    <td width=\"15%\"></td>
    <td width=\"5%\"></td>
    <td width=\"50%\">
      <form action=\"result.asp\" method=\"POST\">
        <font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><br>
        <br>
        Search artist or image title</font><br>
        <br>
        <input type=\"text\" name=\"keyword\" style=\"width:200px; color:#333333; background-color:#FFFFFF; font: 11px verdana\">
        <input type=\"submit\" style=\"font-size:11px; color:#333333; background-color:#FFFFFF\" name=\"Action\" value=\"Search\">
        <br>
      </form>
    </td>
    <td width=\"30%\"></td>
  </tr>
  <tr>
    <td width=\"15%\"></td>
    <td colspan=\"2\"></td>
    <td width=\"30%\"></td>
  </tr>
  <tr>
    <td width=\"15%\"></td>
    <td colspan=\"2\"></td>
    <td width=\"30%\"></td>
  </tr>
</table>
</body>
</html>


Min resultatside ser ud som denne:
-----------------------------------------
<% Response.Buffer = True %>
<html><head>
<title>Result of your search</title>
</head><body>

<%
\' Henter værdien fra search.htm
strKeyword = Trim(Request.Form(\"Keyword\"))

If Len(strKeyword) = 0 Then
    \' Hvis der ikke er skrevet i feltet
    Response.Clear
    Response.Redirect(\"search.htm\")
Else
    \' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,\"\'\",\"\'\'\")
End If

\' Opbygger dynamisk SQL streng
strSQL = \"SELECT ARTIST.Firstname, ARTIST.Surname, ARTWORK.ArtworkID, ARTWORK.OriginalTitle, ARTWORK.Year, ARTWORK.Size, GENRE.Genre, MEDIA.Media FROM ARTIST, ARTWORK, ARTIST_ARTWORK, MEDIA, GENRE WHERE ARTIST.ArtistID=ARTIST_ARTWORK.ArtistID AND ARTWORK.ArtworkID=ARTIST_ARTWORK.ArtworkID AND ARTWORK.MediaID=MEDIA.MediaID AND ARTWORK.GenreID=GENRE.GenreID AND\"
strSQL = strSQL & \" (ARTIST.Firstname LIKE \'%\" & strKeyword & \"%\')\"
strSQL = strSQL & \" OR (ARTIST.Surname LIKE \'%\" & strKeyword & \"%\')\"
strSQL = strSQL & \" OR (ARTWORK.OriginalTitle LIKE \'%\" & strKeyword & \"%\')\"

\' Skaber forbindelse til databasen
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & Server.MapPath(\"\\smidud\\db\\Image.mdb\")

\' Skaber et recordset udfra SQL strengen
Set rs = Conn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then
    \' Hvis der er fundet poster på søgningen
    Response.Write \"<p>Result of your search</p>\"
    Response.Write \"<table border=0>\"
    Response.Write \"<tr><th>Firstname</th><th>Surname</th><th>Title</th><th>Year</th><th>Size</th><th>Media</th><th>Genre</th>\"
        Do While Not rs.EOF
        Response.Write \"<tr><td>\" & rs(\"ARTIST.Firstname\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"ARTIST.Surname\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"ARTWORK.OriginalTitle\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"ARTWORK.Year\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"MEDIA.Media\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"GENRE.Genre\") & \"</td></tr>\"
    rs.MoveNext
    Loop
    Response.Write \"</table>\"
Else
    \' Hvis søgning ikke finder poster
    Response.Write \"<p>Sorry.<br>No records were found</p>\"
End If

\' Lukker forbindelsen og rydder op
Conn.Close
Set Conn = Nothing
%>

</body></html>


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

To problemer

1.

Min result.asp genererer fejl i linie 37 (her angivet ved #FEJL#):

If Not (rs.BOF Or rs.EOF) Then
    \' Hvis der er fundet poster på søgningen
    Response.Write \"<p>Result of your search</p>\"
    Response.Write \"<table border=0>\"
#FEJL#    Response.Write \"<tr><th>Firstname</th><th>Surname</th><th>Title</th><th>Year</th><th>Size</th><th>Media</th><th>Genre</th>\"
        Do While Not rs.EOF


Hvorfor gør den det ?

2.

Udover de nævnte data vil jeg også gerne vise et billede på resultatsiden. Billederne ligger i en mappe for sig (Files). De er alle .jpg, og er navngivet med samme nummer som ArtworkID, således at for eksempel ArtworkID=3 har et tilhørende billede der hedder 3.jpg

Hvordan skaber jeg forbindelsen, og viser billederne på min resultatside ?
Avatar billede chrille Nybegynder
25. oktober 2001 - 14:12 #8
Hej...

felet ligger i att du anger en felaktig sökväg till fältet.
LINE37 ser ut så här nu:
Response.Write \"<tr><td>\" & rs(\"ARTIST.Firstname\") & \"</td>\"

ändra den till:
Response.Write \"<tr><td>\" & rs(\"Firstname\") & \"</td>\"
Avatar billede j-b-l Nybegynder
25. oktober 2001 - 19:21 #9
Hej chrille

DET VIRKER - 1000 TAK. Nu får jeg resultater på siden (RIGTIGT mange fordi der åbenbart alligevel er noget galt med sql\'en...men det prøver jeg selv at rode med)


Er det sådan at jeg kan lave de billedtitler der dukker frem på resultatsiden om til link, der fører til en side hvor jeg kan vise selve billedet (eventuelt med kunstnerens navn under) ?
Avatar billede chrille Nybegynder
26. oktober 2001 - 09:39 #10
Byt ut:

Response.Write \"<tr><td>\" & rs(\"ARTIST.Firstname\") & \"</td>\"

mot:

Response.Write \"<tr><td><a href=\'minsida.htm?art=\" & rs(\"ArtworkID\")&\"\'>\" & rs(\"Firstname\") & \"</a></td>\"

på \"minsida.htm\" som du hänvisar till, måste du ha något som fångar upp ID:t som du skickar med länken.lägg detta överst på sidan samt gör om värdet till en sträng som du kan använda:
<%strArtID=request.querystring(\"art\")%>
Avatar billede j-b-l Nybegynder
26. oktober 2001 - 11:37 #11
Hej chrille...
Kan ikke afprøve lige nu (på job)...afprøver iaften...

Er du på eksperten i weekenden ? Vil gerne give dig 50 point for din hjælp allerede, og så give nogle point særskilt for hjælp til det med billederne :-)
Avatar billede chrille Nybegynder
26. oktober 2001 - 11:44 #12
lycka till och hoppas att allt löser sig!

skall se om jag kikar in till helgen.
är det något mer ar det bara att fråga!

//Christian
Avatar billede j-b-l Nybegynder
26. oktober 2001 - 12:02 #13
Hej Chrille,

Kan se at du allerede har fået point...håber det er OK. Din hjælp har været SUPER. Kommer garanteret i vanskeligheder i løbet af weekenden, især det der med at få vist billeder...opretter nyt spørgsmål med samme overskrift, når jeg har afprøvet det du skriver i dit seneste svar...

God weekend :-)

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