Avatar billede ceec Nybegynder
16. maj 2004 - 14:39 Der er 43 kommentarer og
3 løsninger

Hente billed fra Access database

Hej Eksperter

Jeg har fundet en stump kode på nettet som skulle kunne hente et billed ude fra en access database. Men jeg kan ikke få det til at virke. Jeg afvikler det på en IIS, og det eneste jeg ser er billed ikonet med et lille rødt kryds. I access database har jeg lagt billedet ind som et OLE objekt, og det kan fint vises, hvis jeg klikker på det i tabelen. Kan en af jer "hajer" fortælle mig hvad jeg gør galt?

Koden:

<%
Set myConn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("data.mdb")
myConn.Open strDSN
strSQL = "SELECT ImageData FROM Images WHERE ImageID=1"

rs.Open strSQL, myConn
 
Response.ContentType = "image/gif"
Response.BinaryWrite rs("ImageData")

rs.Close
myConn.Close
Set rs = Nothing
Set myConn = Nothing
Response.End
%>

På forhånd, tak for hjælpen

Ceec
Avatar billede ellebaek Nybegynder
16. maj 2004 - 14:41 #1
<%
Set myConn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("data.mdb")
myConn.Open strDSN
strSQL = "SELECT TOP 1 ImageData FROM Images order by ImageID desc"

rs.Open strSQL, myConn
 
Response.ContentType = "image/gif"
Response.BinaryWrite rs("ImageData")

rs.Close
myConn.Close
Set rs = Nothing
Set myConn = Nothing
Response.End
%>

Prøv lige det her i stedet..
Avatar billede ceec Nybegynder
16. maj 2004 - 14:48 #2
Samme resultat. Faktisk har jeg ændret det stykke selv, som du ændre. Meningen er at jeg vil kalde asp filen fra en anden fil, med en query. Men for fejlfindingens skyld ændrede jeg det.

Ceec
Avatar billede ellebaek Nybegynder
16. maj 2004 - 14:49 #3
oki...

Tænkte bare at det kunne være hvis du ikke havde noget billede med id'et = 1.

Er billederne af typer gif..?
Avatar billede ceec Nybegynder
16. maj 2004 - 14:50 #4
Ja, pt. har jeg kun et billed i databasen, og det er et gif billed.
Avatar billede ellebaek Nybegynder
16. maj 2004 - 14:55 #5
<%
Set myConn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("data.mdb")
myConn.Open strDSN
strSQL = "SELECT ImageData FROM Images WHERE ImageID=1"

rs.Open strSQL, myConn
 
Response.ContentType = "image/gif"
Response.BinaryWrite rs("ImageData")

myConn.Close
Set myConn = Nothing
Response.End
%>

Burde nok ikke gøre nogen forskel, men prøv ikke at lukke dit rs..
Avatar billede ceec Nybegynder
16. maj 2004 - 14:57 #6
Næ samme resultat. Jeg kan ikke gennemskue hvorfor det ikke virker.

:)

Ceec
Avatar billede ellebaek Nybegynder
16. maj 2004 - 14:58 #7
hmm...
Gætter på det er et eks. fra activedeveloper du har brugt:?

<%
Dim Image
Set myConn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/aspdigital/db/demo.mdb")
myConn.Open strDSN
strSQL = "SELECT ImageData FROM Images WHERE ImageID = 1"

rs.Open strSQL, myConn, 1
If Not rs.EOF Then
  strImage = rs("ImageData").GetChunk(1024000)
  Response.ContentType = "image/gif"
  Response.BinaryWrite strImage
Else
  Response.Write "Billedet findes ikke i databasen"
End If
rs.Close
myConn.Close
Set rs = Nothing
Set myConn = Nothing
Response.End
%>

Hvis det er det, så prøv lige sådan her i stedet..
Avatar billede ceec Nybegynder
16. maj 2004 - 15:03 #8
Ja det er det. Rettede lige database stien. Men resultatet er det samme. :(

Ceec
Avatar billede ellebaek Nybegynder
16. maj 2004 - 15:05 #9
mystisk..
2 sek. har et eksempel (tror jeg) på et script der virker et sted..

Øjeblik.
Avatar billede ceec Nybegynder
16. maj 2004 - 15:06 #10
Hehe, ok.....kanon
Avatar billede ellebaek Nybegynder
16. maj 2004 - 15:11 #11
fandt lige noget her..

<%@ LANGUAGE="VBSCRIPT"%>
<!--#include file="ms/adovbs.inc"-->
<%
Response.Expires = 0
Response.Buffer = TRUE
strId = Request.QueryString("ID")

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("base.mdb")

Set objRS = Server.CreateObject("ADODB.RecordSet")
objRS.CursorLocation = adUseServer
objRS.CursorType = adOpenForwardOnly
objRS.LockType = adLockOptimistic
objRS.Open "select ContentType,image from tilbud where id=" & strId, objConn, , , adCmdText

Response.Clear
if objRS("ContentType") <> "" then
  Response.ContentType = objRS("ContentType")
end if

Dim pic, len
len = objRS("image").ActualSize
if len > 0 then
  pic = objRS("image").GetChunk(len)
  Response.BinaryWrite pic
end if
Response.End
Pic = Nothing
objRS.Close
objConn.Close

' Henter et billede fra databasen med ID=? og returnerer det som images
%>
Så må du lige rette feltnavne mm. til..
Avatar billede ceec Nybegynder
16. maj 2004 - 15:16 #12
Du inkludere en fil, er det noget jeg skal bruge???
Avatar billede ellebaek Nybegynder
16. maj 2004 - 15:20 #13
hmm..
tror jeg ikke.. Prøv at fjerne den.
Avatar billede ceec Nybegynder
16. maj 2004 - 15:24 #14
Ok, jeg har ændret sådan at data/tabeler passer. Samt fjernet inklude filen. Desuden har jeg "rem'met" nogle limier ud. Og nu får jeg da noget frem, hehe
Men ikke et billed. Jeg har ændret koden til dette:

<%@ LANGUAGE="VBSCRIPT"%>

<%
Response.Expires = 0
Response.Buffer = TRUE
strId = 1 'Request.QueryString("ID")

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("data.mdb")

Set objRS = Server.CreateObject("ADODB.RecordSet")
' objRS.CursorLocation = adUseServer
objRS.CursorType = adOpenForwardOnly
' objRS.LockType = adLockOptimistic
objRS.Open "select ImageData from Images where ImageId=" & strId, objConn, , , adCmdText

Response.Clear
' if objRS("ContentType") <> "" then
'  Response.ContentType = objRS("ContentType")
' end if

Dim pic, len
len = objRS("ImageData").ActualSize
if len > 0 then
  pic = objRS("ImageData").GetChunk(len)
  Response.BinaryWrite pic
end if
Response.End
Pic = Nothing
objRS.Close
objConn.Close

' Henter et billede fra databasen med ID=? og returnerer det som images
%>

Og det jeg får ud ser sådan ud:

"ÿÿÿÿPakkePackagePackageɱBg.gifC:\Inetpub\wwwroot\Test\Images\bg.gif&C:\Inetpub\wwwroot\Test\Images\bg.giff±GIF89aw,÷ÿÿÿŽƒ„\ST¤œ^\]ÖÌÔ5,4EL;KUCT_z‹–›«µ4DM$4<¤´¼ vƒˆÎßä´¼¾ˆ—š¬ÁÅÙäæ£¤$ 4LL$44%%4DD4ŒzÄzõÂÅÙ·ÿ¾¬°Ï7¾ü/ùü¢Ï‚úØaà,ù䃊>™¤’I&¿£‰.ºø²Os¹ø’ˈ¹0¨Æ)ÞœõÍ8ûœÕK2 ðƒLpºÔ·Ì#ˈ#ÛŽáâã=š4òH Dn±EbÜÓKjÌr‹1µL $n8ÒH&Ÿ|rÊ)—xb )™L"&$R²1I#“8’‡&šH^.)†èKZ@†²?½èH{ì¡„ ½´‚ ?¡”×F$dI-¢ìL"¢4"J"†XbÉ.»’&ŽXj)&—„ꉛa^™I#¨¢za&ãôbJ>ûàÿ£_+öì³Â iì³L14ÄO0ýð(,C+¶KìB$ Fn!†1ȨѤ&µÔ‚&82I'¡ÎBÊ%ŸxBŠ$b¢*¦™h:¦&¨L’L.ȈsÊg“‰+ä¹gŸÈ(?„žÉÀD2I*¬x"Š(˜`2i§–0ã &†‚I"ž&j—nªz¡©º¹F«âüâ >¦ô‚L­+øÂÏ)'Ð Lv¢F(¤èÒGŸ}ÊÑ 2­¤Qè)oHÒÉ–JßÿRKÇ™H"‰&˜ÜrK&KÒˆ§¬lìI$¤ž:Ë© —!I¼¦à³‚¬¦¬pÇ>Ò’Ò(~øQD0ñ¤‘óêÜ *S~"F´;[Œ=u«‘Iµ³˜;e#¡„ZK(–„Z(婦 I!]C2 $§$ƒŒ)Ö&1“°F+šð ·(­Â)wky$¹ðx&³¸™¦á‚ >‹§ zªà§æåþ§®Œ«øÊzŠT´Avjjæ‡Cbª ;&ÈÖ Ë¾x‘& ‘‡f©b(?ìö‹Zø MbêÚ)쇉P4î{›åÄ$&EekJ’€žôzá¡9ùãv°SÿZaŒ@lámJàƒ)p±4”G;§ •“X1¹U5"‡ð›þ A?Ç] ljžÓ–7%~ô£g+˜ƒŒ:q‡7¼ammø‚éL}XÀxlG;&hAÙ cNà˜’&ˆFƒ¢c½¸•ÒŒ1¹3Mi‘Å%, Mdi¡á™Î…¦luÍJÃó2ü‹\ƒ-ø¸ƒ{a>]¡O|P™øžØ ID¢‘P+jq!nJð³¢§Š*KÈpƒê$× Á5Gà©wØ\+ZÑ ;¼Á§XöP„Ct3ûðU<àñw챏±ù9Ä‘‹lMˆ΢ Šq¤…&äe˜~ÿ‰ú…¢@ƒD&µFC6¤‹k¼t^‡H©¢BÒZÁÊ*Ñ„@(!E€ 7͍¨+DQ‹)5˜Èâ-¸ÅYJc—ÀDIKÊ M¨‹kn`^• ñ¿žícúQNÚÇ-˜î›ûÄ<äQŒx\ÀœDçXÀ‘ Ú¨K„p’hP„zxƒIÉ0aïšö´/@ÓD(w&ƒžJ¢ð(xÁ h¨,s2ÅT¹‚!c_J DæÖRLps“Hýö42ɘCž§1IG8¬a¬#× ÁÙBðT?ŸË‡~P‘} 5 6C
Avatar billede ellebaek Nybegynder
16. maj 2004 - 15:27 #15
hmm..
Så skriver den da noget ;-)

<%@ LANGUAGE="VBSCRIPT"%>

<%
Response.Expires = 0
Response.Buffer = TRUE
strId = 1 'Request.QueryString("ID")

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("data.mdb")

Set objRS = Server.CreateObject("ADODB.RecordSet")
' objRS.CursorLocation = adUseServer
objRS.CursorType = adOpenForwardOnly
' objRS.LockType = adLockOptimistic
objRS.Open "select ImageData from Images where ImageId=" & strId, objConn, , , adCmdText

Response.Clear
' if objRS("ContentType") <> "" then
  Response.ContentType = "image/gif"
' end if

Dim pic, len
len = objRS("ImageData").ActualSize
if len > 0 then
  pic = objRS("ImageData").GetChunk(len)
  Response.BinaryWrite pic
end if
Response.End
Pic = Nothing
objRS.Close
objConn.Close

' Henter et billede fra databasen med ID=? og returnerer det som images
%>

Så prøver vi sådan her..
Avatar billede ceec Nybegynder
16. maj 2004 - 15:29 #16
Hehe, wierd...Så er vi tilbage til ikonet med det røde kryds.

Ceec
Avatar billede ceec Nybegynder
16. maj 2004 - 15:32 #17
Ahh det den skrev ud før er selvfølgelig fordi den ikke kan genkende contenttype.
Avatar billede ellebaek Nybegynder
16. maj 2004 - 15:37 #18
tænkte jeg også..
Så der er måske en fejl der..

et forsigtigt gæt:
ret det her:
Response.ContentType = "image/gif"

til:
Response.ContentType = "images/gif"
Avatar billede ellebaek Nybegynder
16. maj 2004 - 15:38 #19
hmm...
det virker nok næppe egentlig.
kan du ikke prøve med et andet billede..?
Avatar billede ceec Nybegynder
16. maj 2004 - 15:41 #20
Så kan den igen ikke genkende contenttype. Jeg tror den skal hedde "image/gif"
Kan det være et plug-in til min IIS jeg mangler, er efterhånden løbet tør for ideer.
Avatar billede ceec Nybegynder
16. maj 2004 - 15:42 #21
Jo, lad mig smide et andet billed i databasen.
Avatar billede ellebaek Nybegynder
16. maj 2004 - 15:44 #22
eventuelt et billede af typen jpg..
Avatar billede ceec Nybegynder
16. maj 2004 - 15:44 #23
Nu valgte jeg et meget lille gif billed. 24x24 1,5kb
Samme resultat. Prøver med et jpg billed istedet.
Avatar billede ceec Nybegynder
16. maj 2004 - 15:50 #24
Wierd, når jeg ændre det til jpg, vil browseren ikke vise det. Hvis jeg åbner det alligevel, vises kun koden. Det bliver mere og mere underligt. hehe
Avatar billede ellebaek Nybegynder
16. maj 2004 - 15:52 #25
ja meget...
Prøv at se om du har en fil der hedder adovbs.inc på din server og så inkluder den som i det jeg skrev før..
Avatar billede ceec Nybegynder
16. maj 2004 - 15:58 #26
Jeg havde filen. Inkludere den, skiftede tilbage til gif. Samme resultat. Ikon med rødt kryds. Wierd........
Avatar billede ellebaek Nybegynder
16. maj 2004 - 16:16 #27
ja det må du nok sige..
Hmm.

Kigger lige lidt på mine filer en tur igen..
2 sek.
Avatar billede ellebaek Nybegynder
16. maj 2004 - 16:22 #28
prøv at slette alle unødige linier, så det kommer til at se ud i stilen af:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("data.mdb")

strSQL = "SELECT ImageData FROM Images WHERE ImageID = 1"
Set RS = Conn.Execute(strSQL)

Response.ContentType = "image/gif"
Response.BinaryWrite rs("ImageData")
%>
Avatar billede ceec Nybegynder
16. maj 2004 - 16:25 #29
Hmm samme resultat.
Avatar billede ceec Nybegynder
16. maj 2004 - 16:28 #30
Er der ikke noget med at man kan "nøjes" med at linke til billedet via sin database. Sådan at billedet ikke behøver ligge i databasen. Har du evt. et script der løser opgaven på den måde?
Avatar billede ellebaek Nybegynder
16. maj 2004 - 16:54 #31
<%
'  Variables
'  *********
  Dim mySmartUpload
  Dim file
  Dim intCount
  intCount=0
       
'  Object creation
'  ***************
  Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")

'  Upload
'  ******
  mySmartUpload.Upload
set myconn = server.createobject("ADODB.connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("data.mdb")
myconn.open strDSN

'  Select each file
'  ****************
  For each file In mySmartUpload.Files
  '  Only if the file exist
  '  **********************
      If file.IsMissing = false Then
      '  Save the files with his original names in a virtual path of the web server
      '  **************************************************************************
        file.SaveAs(server.mappath("mappe/" & file.FileName))
        ' sample with a physical path
        'file.SaveAs("c:\" & file.FileName)

      '  Tæl antal filer...
      '  ******************************************
        intCount = intCount + 1
sql = "insert into tabel(felt, felt, image) values('"&mySmartUpload.form("form1")&"','"&mySmartUpload.form("form2")&"','"&file.FileName&"')"
myconn.execute(sql)
      End If
  Next

'  Display the number of files which could be uploaded
'  ***************************************************
  Response.Write("<BR>" & mySmartUpload.Files.Count & " files could be uploaded.<BR>")

'  Display the number of files uploaded
'  ************************************
  Response.Write(intCount & " file(s) uploaded.<BR>")
%>

</BODY>
</HTML>

Sådan her fx.. Så skal du bare selv vælge hvad du vil have med i databasen, samt at rette hvor billedet skal gemmes i denne linie:
file.SaveAs(server.mappath("mappe/" & file.FileName))
Avatar billede ceec Nybegynder
16. maj 2004 - 17:02 #32
Scriptet er til upload af billeder ikke? Ikke til visning. Anyways, prøvede det, men min server kender ikke objectet aspsmartupload. Går udfra jeg mangler et plug-in.
Avatar billede ellebaek Nybegynder
16. maj 2004 - 17:07 #33
nåå...
Hvis du kun vil vise så skal du gøre sådan her:

<%
Set rs = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("data.mdb")
strSQL = "SELECT ImageData FROM Images WHERE ImageID=1"
rs.open strDSN

set rs = rs.execute(sql)

response.write "<img src=""" & rs.fields("ImageData") & """>"
 
rs.Close
Set rs = Nothing
%>

så skal du bare ligge stien fx.
billeder/jpg/test.jpg ind i databasen..
Avatar billede ceec Nybegynder
16. maj 2004 - 19:18 #34
Får denne fejl

Tekniske oplysninger (for supportteknikere)

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E0C)
Der er ikke angivet nogen kommandotekst for kommandoobjektet.
/test/pull_image2.asp, line 7
Avatar billede ceec Nybegynder
16. maj 2004 - 19:19 #35
Ahh rettede selv fejlen, og fik vist et billed :)

Nu skal jeg bare implementere det med det andet jeg har lavet

Tak for din tålmodighed, og store hjælp. Smid et svar også giver jeg point.
Avatar billede ceec Nybegynder
16. maj 2004 - 21:18 #36
Hmm hvordan returnere jeg værdien til en anden asp side???
Avatar billede ellebaek Nybegynder
16. maj 2004 - 21:20 #37
hvilken værdi vil du returnere,...?
Avatar billede ceec Nybegynder
16. maj 2004 - 22:34 #38
Selve strengen til billedet. Så laver jeg en <img src="" i den anden asp fil
Avatar billede ellebaek Nybegynder
17. maj 2004 - 22:03 #39
vil du ikke bare så hvis du fx. har en fil der hedder vis.asp

og så kalder den med: vis.asp?id=12 viser billedet med id = 12

for så skal du bare bruge det her:

<%
if not isEmpty(request.querystring("id")) then
Set rs = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("data.mdb")
strSQL = "SELECT ImageData FROM Images WHERE ImageID=" & request.querystring("id")
rs.open strDSN

set rs = rs.execute(sql)

response.write "<img src=""" & rs.fields("ImageData") & """>"
 
rs.Close
Set rs = Nothing
else
response.redirect("default.asp")
end if
%>
Avatar billede ceec Nybegynder
17. maj 2004 - 22:38 #40
Hej Ellebaek

Det jeg prøver er fra min index fil (index.asp) er at lave en <img src="pull_image.asp?id=1">
Selve det du har lavet oven over virker perfekt, men jeg får ikke billedet (strengen på billedet) tilbage til min index fil.

Anyways, det er vel egentligt et nyt spørgsmål.
Avatar billede ellebaek Nybegynder
18. maj 2004 - 09:20 #41
Arh... Nu forstår jeg hvad du vil..

Hvis du vil lave det på den måde, så skal du i stedet lave en funktion..
Sådan her fx. vil jeg tro..

<%
function getImage(ImageID)

Set rs = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("data.mdb")
strSQL = "SELECT ImageData FROM Images WHERE ImageID=" & request.querystring("id")
rs.open strDSN

set rs = rs.execute(sql)

getImage = rs("ImageData") 
rs.Close
Set rs = Nothing
end function
%>

når du så vil hente billedet så skriv:
<img src="<%=getImage(1)%>">

Det andet kan ikke betale sig at lave det på den måde..
Avatar billede ceec Nybegynder
18. maj 2004 - 14:27 #42
Kanon, har fået det til at virke med en funktion. Tusind tak for hjælpen.
Avatar billede ceec Nybegynder
18. maj 2004 - 14:28 #43
Smid lige et svar så du kan få point ;)
Avatar billede ellebaek Nybegynder
18. maj 2004 - 16:58 #44
Jamen det gør jeg da ;-)
Avatar billede ellebaek Nybegynder
20. maj 2004 - 14:12 #45
håber ikke du har glemt mig ;-)
Avatar billede ellebaek Nybegynder
07. juni 2004 - 00:10 #46
hej Ceec...?

Håber som sagt ikke du har glemt mig ??
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