Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Εμφάνιση εικόνας μέσα από Access2007

Îåêßíçóå áðü ôï ìÝëïò tasos. Τελευταία δημοσίευση από το μέλος darklynx στις 23-07-2010, 20:02. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  21-07-2010, 11:32 59464

    Εμφάνιση εικόνας μέσα από Access2007

    Καλημέρα σας,

        Έχω μία βάση δεδομένων σε Access 2007 και σε έναν πίνακα έχει ένα πεδίο τύπου Attachment και εκεί είναι αποθηκευμένη η φωτογραφία του προϊόντος. Όταν όμως διαβάζω το πεδίο αυτό, αντί να πάρω ένα το περιεχόμενο του αρχείου (σε binary), παίρνω το filename του. Σας παραθέτω τον κώδικα για το image.asp αρχείο, όπου το καλώ ως εξής:

    <img src="image.asp?code=myProductCode" />

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <% 
    set myConn=Server.CreateObject("ADODB.Connection")
    ConnStr= "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" & Server.MapPath("data\ItemsData.accdb")
    myConn.open(
    ConnStr)

    query="SELECT picture FROM NewItemTable where CodeStore='" & request("code") & "'"
    Set rsimage = myConn.Execute(query)

    If not rsimage.EOF Then
    response.Expires = 0
    response.Buffer = True
    response.Clear
    Response.ContentType = "image/jpeg"
    set strtemp = rsimage("picture")
    Response.BinaryWrite strtemp
    Response.End
    end if

    rsimage.close
    set rsimage=nothing
    myConn.close
    %>

    Προσπάθησα κάτι αντίστοιχο με asp.net αλλά δυστυχώς και εκεί έχω την ίδια συμπεριφορά. Ψάχνωντας στο google βρήκα παραδείγματα παρόμοια με το παραπάνω, αλλά για κάποιο λόγο δεν μπορώ να το κάνω να δουλέψει.

    Τάσος Καραγιάννης

    Baby debugging steps...
  •  21-07-2010, 12:21 59465 σε απάντηση της 59464

    Απ: Εμφάνιση εικόνας μέσα από Access2007

    Αν και δεν μπορώ να σου δώσω ολοκληρωμένη απάντηση, ψάχνοντας διαπίστωσα οτι το attachment data type στην Access συμπεριφέρεται διαφορετικά από ένα κοινό blob field. Συγκεκριμένα, κάνει wrap το binary περιεχόμενο μέσα σε ένα object, γι'αυτό και δεν σου δουλεύει το binarywrite. Δυστυχώς λόγω περιορισμένου χρόνου δεν μπόρεσα να βρω πώς γίνεται "unbox" το πραγματικό περιεχόμενο, αλλά νομίζω ότι ψάχνοντας να βρεις κάτι για αυτό θα κινηθείς προς τη σωστή κατεύθυνση.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  21-07-2010, 17:36 59476 σε απάντηση της 59465

    Απ: Εμφάνιση εικόνας μέσα από Access2007

    Σωστή η κατεύθυνση σου και μπόρεσα κ προχώρησα λίγο. Αυτό που βρήκα είναι ότι το πεδίο τύπου Attachment είναι container και (προφανώς) έχει πεδία, με ένα από αυτά να είναι το FileData. Άρα αντί να γράψω στο SQL query "SELECT Picture" γράφω "SELECT Picture.[FileData]". Ο κώδικας μου πλέον είναι κάπως έτσι:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <%@  language="VBSCRIPT" codepage="1253" %>
    <%
    set myConn=Server.CreateObject("ADODB.Connection")
    myConnStr="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server.MapPath("App_Data\ItemsData.accdb") & ";Persist Security Info=False;"
    myConn.open(myConnStr)

    set rsimage=Server.CreateObject("ADODB.Recordset")
    query="SELECT Picture.[FileData] FROM NewItemTable where CodeStore='ΑΕΡΟ-001'"
    rsimage.open query,myConn,3,3

    If not rsimage.EOF Then

    set strtemp = rsimage(0)

    response.Expires = 0
    response.Buffer = True
    response.Clear

    Response.ContentType = "image/jpg"
    Response.BinaryWrite strtemp

    Response.End
    end if

    rsimage.close
    set rsimage=nothing
    myConn.close
    %>


    Παρόλα αυτά, η εικόνα δεν εμφανίζεται.
    Βέβαια, η αρχική εικόνα έχει μέγεθος 5.04kb ενώ αυτό που δίνει ο server είναι 5.06kb. Άρα μήπως από την Access παίρνω σωστά τα δεδομένα, και χαλάω κάτι με τους headers;

    Edit: Όπως ανέφερα κ πιο πριν, προσπάθησα το ίδιο script σε asp.net. Αυτό που βρήκα είναι ότι με το ίδιο sql query (SELECT Picture.[FileData] FROM....) παίρνω ένα byte array, αλλά αυτό είναι 20 byte μεγαλύτερο από το μέγεθος της εικόνας. Αν κάνω λοιπόν, Response.BinaryWrite() από το 21ο byte και μετά η εικόνα εμφανίζεται σωστά!! Άρα κάπως αλλιώς πρέπει να διαβάσω τα data. Πάντως βρήκα αρκετά threads που ρωτάνε το ίδιο πράγμα, αλλά σε κανένα δεν υπήρχε λύση.

    Υ.Γ. Σε asp πάντως δεν μπόρεσα να "κόψω" τα 20 πρώτα bytes από το rsimage(0). Sad

    Τάσος Καραγιάννης

    Baby debugging steps...
  •  22-07-2010, 22:49 59509 σε απάντηση της 59476

    Απ: Εμφάνιση εικόνας μέσα από Access2007

    Το "FileData" που έχεις πάρει με το query προφανώς είναι Field2 αντικείμενο και όχι "αμιγής" buffer με τα δεδομένα του αρχείου σου.Αν αντί για την BinaryWrite χρησιμοποιήσεις την SaveToFile που είναι μέλος της Field2 ειδικά για attachments,μήπως έτσι δουλέψει;Εικάζω δηλαδή ότι γράφεις ολόκληρο το αντικείμενο και όχι μόνο τα δεδομένα που σε ενδιαφέρουν.
  •  23-07-2010, 14:37 59511 σε απάντηση της 59509

    Απ: Εμφάνιση εικόνας μέσα από Access2007

    Έτσι όπως το κατάλαβα, παίρνω το field2 αντικείμενο όταν δεν χρησιμοποιώ το FileData και αναφέρομαι στο πεδίο του όταν το χρησιμοποιώ. Βρήκα διάφορα παραδείγματα που είχαν κώδικα όπου μπορούσα να γράψω rs(0).Fields("FileData").Value και να πάρω το περιεχόμενο του αρχείου αλλά δεν δούλεψε. Ίσως να θέλει κάτι άλλο στον κώδικα για να μπορέσω να πάρω το αντικείμενο τύπου field2. Δοκίμασα την SaveToFile που πρότεινες και δεν έπαιξε, με το .FileData στο query και χωρίς. Και στις δύο περιπτώσεις το μήνυμα ήταν "Object doesn't support this property or method" για την SaveToFile.

    Edit: Τελικά έχεις δίκιο για το FileData και το Field2 πεδίο. Βρήκα αυτό σαν reference. Αλλά από ότι φαίνεται η asp δεν αναγνωρίζει αυτόν τον τύπο πεδίου. 


    Τάσος Καραγιάννης

    Baby debugging steps...
  •  23-07-2010, 17:20 59520 σε απάντηση της 59511

    Απ: Εμφάνιση εικόνας μέσα από Access2007

    Και εγώ αυτήν την αναφορά κοίταγα,μόνο που αφορά DAO Record Sets και όχι ADO Record Sets.Λογικό λοιπόν το μήνυμα λάθους που βγαίνει.Αν κάνεις αυτό που λέγαμε με DAO μήπως δουλέψει;Αλήθεια αυτά τα extra 20 byte κοίταξες τι περιέχουν;Φαντάζομαι επίσης το πρόβλημα δεν το έχεις μόνο με μια συγκεκριμένη εικόνα αλλά με όλες,σωστά;
  •  23-07-2010, 18:58 59523 σε απάντηση της 59520

    Απ: Εμφάνιση εικόνας μέσα από Access2007

    Ναι, τα 20 byte "περισσεύουν" από κάθε εικόνα. Μάλλον λοιπόν θα πρέπει να γράψω κάτι σε DAO. Αλλά αυτό από Δευτέρα Smile

    Και μια γενική ερώτηση τώρα, το ADO δεν θεωρείται εξέλιξη του DAO; Πάντα είχα την εντύπωση πως το ADO ήρθε να αντικαταστήσει το DAO. Μου κάνει εντύπωση λοιπόν πως δεν υπάρχει λύση (ή μάλλον δεν κατάφερα να βρω) με ADO για το συγκεκριμένο θέμα.


    Τάσος Καραγιάννης

    Baby debugging steps...
  •  23-07-2010, 20:02 59524 σε απάντηση της 59523

    Απ: Εμφάνιση εικόνας μέσα από Access2007

    Πράγματι το DAO είχε κηδευτεί προ πολλού,αλλά με την έλευση του Office 2007 επέστρεψε από τους νεκρούς Stick out tongue.Δε νομίζω ότι δεν υπάρχει λύση για το ADO,απλά ίσως θα είναι λιγότερο κομψή.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems