Bitmap van Access ophalen en weergeven in webpagina 's


Samenvatting


In dit artikel wordt door voorbeeld haalt u de bitmap foto's in de database Noordenwind.mdb van Microsoft Access 97 en ze bekijken vanuit een webbrowser met behulp van Active Server Pages (ASP). De verwezenlijking van deze taak, moet een ActiveX DLL maken die stroken in de Access- en OLE-headers van het veld. Dit artikel wordt het maken van deze ActiveX DLL en het implementeren van deze.

Meer informatie


Waarschuwing: het gebruik van de CODE die IN dit artikel IS voor uw eigen risico. Microsoft biedt deze code "as is" zonder enige garantie, hetzij uitdrukkelijk hetzij impliciet, met inbegrip van maar niet beperkt tot de impliciete garanties van verkoopbaarheid en/of geschiktheid voor een bepaald doel.


Dit artikel wordt beschreven hoe u met Visual Basic voor het ophalen van een bitmap die is opgeslagen in een OLE-objectveld. Omdat de definitie van de opslag van OLE-object niet wordt beschreven, zoekt de volgende code van het object OLE-header voor de tekens overeen met het begin van de afbeelding. Deze methode werkt mogelijk niet in alle omstandigheden.


Vergeet niet dat Internet Explorer 3.0 is kan geen bitmaps in ware kleuren weergeven. Om deze reden moet de bitmaps die zijn opgeslagen in de Access-database niet meer dan 256 kleuren.

Stapsgewijs voorbeeld om uit te pakken van de foto 's

  1. Maak een nieuw project in Visual Basic en een ActiveX DLL voor het project maken.
  2. Voeg een verwijzing naar ActiveX Data Objects (ADO) door te klikken in het menu Project en verwijzingen te selecteren. Selecteer "Microsoft OLE DB ActiveX Data Objects 1.0 Library" en klik op OK.
  3. Een nieuwe module aan het project toevoegen door te selecteren het menu Project en klikt u op Module toevoegen. Selecteer de Module en klik op openen.
  4. Plaats de volgende code in de sectie (algemene) (declaraties) van 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. Plaats de volgende code in de sectie (algemene) (declaraties) van 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. Wijzig de naam van het Project door het menu Project te selecteren en te klikken op 'Eigenschappen Project1' en typ de nieuwe naam in het veld "Naam van het Project". In dit voorbeeld wordt ervan uitgegaan dat u de naam het project "MyProject" en verwijst naar deze naam in het toekomstige werk.
  7. Schakel het selectievakje 'Uitvoering zonder toezicht'. Klik op OK.
  8. De naam van de klasse in het deelvenster eigenschap. In dit voorbeeld wordt ervan uitgegaan dat u MijnKlasse de klasse "" en naar deze naam in de toekomstige stappen verwijst.
  9. Compileer het DLL-bestand op het menu bestand en selecteer 'MyProject.dll maken'.
  10. Maak een ASP-pagina met de naam 'bitmap.asp' met de volgende 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. Maak een HTML-pagina met de naam 'BitmapTest.htm' met de volgende code:
          <HTML>
    <HEAD>
    <TITLE>Bitmap Test</TITLE>
    </HEAD>
    <BODY>
    <HR>
    <img src="Bitmap.asp">
    <HR>
    </BODY>
    </HTML>

Referenties


Raadpleeg het volgende artikel in de Microsoft Knowledge Base voor meer informatie:

173308 het weergeven van afbeeldingen die zijn opgeslagen in een BLOB-veld

Zie de volgende pagina op de Microsoft Technical Support-site voor de meest recente Knowledge Base artices en overige ondersteuningsinformatie over Visual InterDev en Active Server Pages: