Zusammenfassung

Dieser Artikel veranschaulicht anhand eines Beispiels Bitmap Fotos in Microsoft Access 97 Nwind.mdb Datenbank extrahieren und in einem Webbrowser mit Active Server Pages (ASP) anzeigen. Um diese Aufgabe auszuführen, muss eine ActiveX-DLL, Streifen Zugriff und OLE-Header aus dem Feld erstellt werden. Dieser Artikel beschreibt diese ActiveX DLL erstellen und Implementierung.

Weitere Informationen

Warnung: die Verwendung des Codes gemäß diesem Artikel ist Ihr eigenes Risiko. Microsoft stellt diese "wie besehen" ohne Gewährleistung, ausdrücklich oder konkludent, einschließlich, aber nicht beschränkt auf die gesetzlichen Garantien der Handelsüblichkeit und/oder Eignung für einen bestimmten Zweck.


Dieser Artikel veranschaulicht, wie Visual Basic abrufen eine Bitmap in einem OLE-Objektfeld gespeichert. Da die Definition der OLE-Objektspeicher nicht dokumentiert ist, sucht der folgende Code das Objekt OLE-Header für Zeichen mit Beginn der Grafik. Diese Methode funktioniert nicht in allen Fällen.


Beachten Sie, dass Internet Explorer 3.0 nicht true Color Bitmaps anzuzeigen. Aus diesem Grund sollte nicht mehr als 256 Farben Bitmaps in der Datenbank gespeichert.

Schrittweises Beispiel zum Extrahieren der Fotos

  1. Erstellen Sie ein neues Projekt in Visual Basic und dem Projekt eine ActiveX-DLL.

  2. Fügen Sie einen Verweis auf ActiveX Data Objects (ADO), indem Sie im Menü Projekt und Verweise. Wählen Sie "Microsoft OLE DB ActiveX Data Objects 1.0-Bibliothek", und klicken Sie auf OK.

  3. Fügen Sie ein neues Modul zum Projekt im Menü Projekt und klicken Sie auf Modul hinzufügen. Wählen Sie Modul aus und auf Öffnen.

  4. Fügen Sie folgenden Code im Bereich (Allgemein) (Deklarationen) von 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. Fügen Sie folgenden Code im Bereich (Allgemein) (Deklarationen) von 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. Benennen Sie das Projekt, indem im Menü Projekt auswählen und auf "Project1 Properties" und geben Sie Ihren neuen Namen im Feld "Projektname". In diesem Beispiel wird davon ausgegangen, dass Sie das Projekt "MyProject" benannt und auf diesen Namen in späteren Schritten.

  7. Aktivieren Sie das Kontrollkästchen "Unbeaufsichtigte Ausführung". Klicken Sie auf OK.

  8. Benennen Sie die Klasse im Eigenschaftenbereich. Es wird angenommen, dass die Klasse namens "MyClass" und auf den Namen in späteren Schritten verweist.

  9. Kompilieren Sie die DLL, indem Sie im Menü Datei und "Stellen MyProject.dll."

  10. Erstellen einer ASP-Seite mit dem Namen "bitmap.asp" mit dem folgenden Code:

          <%@ 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. Erstellen Sie eine HTML-Seite mit dem Namen "BitmapTest.htm" mit dem folgenden Code:

          <HTML>
    <HEAD>
    <TITLE>Bitmap Test</TITLE>
    </HEAD>
    <BODY>
    <HR>
    <img src="Bitmap.asp">
    <HR>
    </BODY>
    </HTML>

Referenzen

Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:

173308 Anzeigen von Bildern in einem BLOB-Feld gespeichert

Die aktuellsten Knowledge Base-Artikel sowie weitere Supportinformationen zu Visual InterDev und Active Server Pages finden Sie auf der folgenden Seite der Microsoft Technical Support-Website:

http://support.microsoft.com/search/default.aspx?qu=vinterdev

Benötigen Sie weitere Hilfe?

Ihre Office-Fähigkeiten erweitern
Schulungen erkunden
Neue Funktionen als Erster erhalten
Microsoft Insider beitreten

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Übersetzungsqualität?
Was hat Ihre Erfahrung beeinflusst?

Vielen Dank für Ihr Feedback!

×