ΔΙΑΔΙΚΑΣΙΕΣ: ανάκτηση Bitmap από την Access και να την εμφανίσετε στη σελίδα Web


Σύνοψη


Αυτό το άρθρο παρουσιάζονται με βάση ένα παράδειγμα μπορείτε να εξαγάγετε τις φωτογραφίες bitmap στη βάση δεδομένων της Microsoft Access 97 Nwind.mdb, και να τα προβάλετε από ένα πρόγραμμα περιήγησης Web, χρησιμοποιώντας τις ενεργές σελίδες διακομιστή (ASP). Για να ολοκληρώσετε αυτήν την εργασία, μια βιβλιοθήκη DLL ActiveX πρέπει να δημιουργηθεί το λωρίδες τις κεφαλίδες πρόσβασης και OLE από το πεδίο. Αυτό το άρθρο παρουσιάζει τον τρόπο για να δημιουργήσετε αυτό το DLL ActiveX και τον τρόπο υλοποίησης του.

Περισσότερες πληροφορίες


ΠΡΟΕΙΔΟΠΟΊΗΣΗ: ΟΠΟΙΑΔΉΠΟΤΕ ΧΡΉΣΗ του ΚΏΔΙΚΑ που ΠΑΡΈΧΕΤΑΙ σε ΑΥΤΌ το ΆΡΘΡΟ ΕΊΝΑΙ ΚΙΝΔΥΝΕΎΟΥΝ ΔΙΚΉ η. Η Microsoft παρέχει αυτόν τον κωδικό "ως έχουν" χωρίς κανενός είδους εγγύηση, ρητή ή σιωπηρή, περιλαμβανομένων ενδεικτικά των σιωπηρών εγγυήσεων εμπορευσιμότητας ή/και καταλληλότητας για συγκεκριμένο σκοπό.


Αυτό το άρθρο περιγράφει τον τρόπο χρήσης της Visual Basic για να ανακτήσετε ένα bitmap που αποθηκεύονται σε ένα πεδίο αντικειμένου OLE. Επειδή ο ορισμός του χώρου αποθήκευσης αντικειμένων OLE δεν τεκμηριώνεται, ο παρακάτω κώδικας αναζητά το αντικείμενο OLE κεφαλίδας για χαρακτήρες που συμφωνούν με την έναρξη του γραφικού. Αυτή η μέθοδος ενδέχεται να μην λειτουργεί σε όλες τις περιπτώσεις.


Να θυμάστε ότι Internet Explorer 3.0 είναι δυνατό να εμφανίσει εικόνες bitmap φυσικά χρώματα. Για το λόγο αυτό, θα πρέπει να είναι όχι μεγαλύτερο από 256 χρώματα των bitmap που αποθηκεύονται σε βάση δεδομένων της Access.

Παράδειγμα βήμα προς βήμα, για να εξαγάγετε τις φωτογραφίες

  1. Δημιουργήστε ένα νέο έργο της Visual Basic και κάντε το έργο μια βιβλιοθήκη DLL ActiveX.
  2. Προσθέστε μια αναφορά για το ActiveX Data Objects (ADO), κάνοντας κλικ το μενού ' έργο ' και επιλέγοντας αναφορές. Επιλέξτε "Microsoft OLE DB ActiveX δεδομένων αντικείμενα 1.0 βιβλιοθήκη" και κάντε κλικ στο κουμπί OK.
  3. Προσθέστε μια νέα λειτουργική μονάδα στο έργο, επιλέγοντας το μενού ' έργο ' και κάνοντας κλικ στο κουμπί Προσθήκη λειτουργικής μονάδας. Επιλέξτε τη λειτουργική μονάδα και κάντε κλικ στο κουμπί Άνοιγμα.
  4. Τοποθετήστε τον ακόλουθο κώδικα στην ενότητα MODULE1 (γενικά) (δηλώσεις). BAS:
          ' Enter the following Declare statement as one single line:
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"
    (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)

    Type PT
    Width As Integer
    Height As Integer
    End Type

    Type OBJECTHEADER
    Signature As Integer
    HeaderSize As Integer
    ObjectType As Long
    NameLen As Integer
    ClassLen As Integer
    NameOffset As Integer
    ClassOFfset As Integer
    ObjectSize As PT
    OleInfo As String * 256
    End Type
  5. Τοποθετήστε τον ακόλουθο κώδικα στην ενότητα (γενικά) (δηλώσεις) του CLASS1. CLS:
            Function DisplayBitmap(ByVal OleField As Variant)
    Dim Arr() As Byte
    Dim ObjHeader As OBJECTHEADER
    Dim Buffer As String
    Dim ObjectOffset As Long
    Dim BitmapOffset As Long
    Dim BitmapHeaderOffset As Integer
    Dim ArrBmp() As Byte
    Dim i As Long

    'Resize the array, then fill it with
    'the entire contents of the field
    ReDim Arr(OleField.ActualSize)
    Arr() = OleField.GetChunk(OleField.ActualSize)

    'Copy the first 19 bytes into a variable
    'of the OBJECTHEADER user defined type.
    CopyMemory ObjHeader, Arr(0), 19

    'Determine where the Access Header ends.
    ObjectOffset = ObjHeader.HeaderSize + 1

    'Grab enough bytes after the OLE header to get the bitmap header.
    Buffer = ""
    For i = ObjectOffset To ObjectOffset + 512
    Buffer = Buffer & Chr(Arr(i))
    Next i

    'Make sure the class of the object is a Paint Brush object
    If Mid(Buffer, 12, 6) = "PBrush" Then
    BitmapHeaderOffset = InStr(Buffer, "BM")
    If BitmapHeaderOffset > 0 Then

    'Calculate the beginning of the bitmap
    BitmapOffset = ObjectOffset + BitmapHeaderOffset - 1

    'Move the bitmap into its own array
    ReDim ArrBmp(UBound(Arr) - BitmapOffset)
    CopyMemory ArrBmp(0), Arr(BitmapOffset), UBound(Arr) -
    BitmapOffset + 1

    'Return the bitmap
    DisplayBitmap = ArrBmp
    End If
    End If
    End Function
  6. Μετονομάστε το έργο, επιλέγοντας το μενού ' έργο ' και κάνοντας κλικ στην επιλογή "Ιδιότητες Project1" και πληκτρολογήστε το νέο όνομα στο πεδίο "Όνομα έργου". Αυτό το παράδειγμα προϋποθέτει ότι ονομάσατε το έργο "MyProject" και θα αναφέρεται σε αυτό το όνομα στη μελλοντική βήματα.
  7. Επιλέξτε το πλαίσιο ελέγχου "Εκτέλεση χωρίς παρακολούθηση". Κάντε κλικ στο κουμπί OK.
  8. Μετονομασία της κλάσης στο παράθυρο ιδιοτήτων. Αυτό το παράδειγμα υποθέτει ότι με το όνομα της κλάσης "MyClass" και αναφέρεται σε αυτό το όνομα στη μελλοντική βήματα.
  9. Η μεταγλώττιση του αρχείου DLL, κάνοντας κλικ στο μενού " αρχείο " και επιλέγοντας "Να MyProject.dll".
  10. Δημιουργήστε μια σελίδα ASP που ονομάζεται "bitmap.asp" που περιέχει τον ακόλουθο κώδικα:
          <%@ LANGUAGE="VBSCRIPT" %>
    <%
    ' You need to set up a System DSN named 'NWind' that points to
    ' the Northwind.mdb database
    Set DataConn = Server.CreateObject("ADODB.Connection")
    DataConn.Open "DSN=NWind", "admin", ""
    Set cmdTemp = Server.CreateObject("ADODB.Command")
    Set RS = Server.CreateObject("ADODB.Recordset")
    cmdTemp.CommandText = "SELECT Photo FROM Employees
    WHERE EmployeeID = 1"
    cmdTemp.CommandType = 1
    Set cmdTemp.ActiveConnection = DataConn
    RS.Open cmdTemp, , 0, 1
    Response.ContentType = "image/bmp"
    Set Bitmap = Server.CreateObject("MyProject.MyClass")
    Response.BinaryWrite Bitmap.DisplayBitmap(RS("Photo"))
    RS.Close
    %>
  11. Δημιουργήστε μια σελίδα HTML με το όνομα "BitmapTest.htm" που περιέχει τον ακόλουθο κώδικα:
          <HTML>
    <HEAD>
    <TITLE>Bitmap Test</TITLE>
    </HEAD>
    <BODY>
    <HR>
    <img src="Bitmap.asp">
    <HR>
    </BODY>
    </HTML>

Αναφορές


Για περισσότερες πληροφορίες, ανατρέξτε στο ακόλουθο άρθρο της Γνωσιακής Βάσης της Microsoft:

173308 ΔΙΑΔΙΚΑΣΙΕΣ: Εμφάνιση εικόνες που είναι αποθηκευμένες σε ένα πεδίο BLOB

Για την πιο πρόσφατη artices της Γνωσιακής βάσης και άλλες πληροφορίες υποστήριξης Visual InterDev και ενεργές σελίδες διακομιστή, ανατρέξτε στην ακόλουθη ιστοσελίδα στην τοποθεσία τεχνικής υποστήριξης της Microsoft: