Hvordan hente punktgrafikk fra Access og vise den i Web-side


Sammendrag


Denne artikkelen viser ved eksempel hvordan du trekke ut punktgrafikk bildene i Nwind.mdb for Microsoft Access 97-databasen, og vise dem i en webleser ved hjelp av Active Server Pages (ASP). Hvis du vil gjøre dette, må en ActiveX DLL opprettes som strimler Access og OLE-hodene fra-feltet. Denne artikkelen viser hvordan du oppretter denne ActiveX DLL, og hvordan du implementerer den.

Hvis du vil ha mer informasjon


Advarsel: Bruk av koden som er angitt i denne artikkelen er på din egen risiko. Microsoft tilbyr denne koden "som den er" uten garantier av noe slag, enten direkte eller indirekte, herunder, men ikke begrenset til, eventuelle stilltiende garantier om salgbarhet og anvendelighet for særskilte formål.


Denne artikkelen beskriver hvordan du bruker Visual Basic til å hente et punktgrafikkbilde som er lagret i et OLE-objektfelt. Fordi definisjonen av lagring av OLE-objektet ikke er dokumentert, søker den følgende koden objektets OLE topptekst for tegnene samsvarer med begynnelsen av grafikken. Denne metoden fungerer kanskje ikke i alle tilfeller.


Vær oppmerksom på at Internet Explorer 3.0 kan ikke vise millioner av farger punktgrafikk. Derfor må punktgrafikk som er lagret i Access-databasen ikke være høyere enn 256 farger.

Trinnvist eksempel å trekke ut bildene

  1. Opprett et nytt prosjekt i Visual Basic, og gjøre en ActiveX DLL for prosjektet.
  2. Legge til en referanse til ActiveX Data Objects (ADO) ved å klikke Prosjekt-menyen og velge referanser. Velg "Microsoft OLE DB ActiveX Data Objects 1.0 Library", og klikk OK.
  3. Legge til en ny modul i prosjektet ved å velge Prosjekt-menyen og klikke Legg til-modulen. Velg modul, og klikk Åpne.
  4. Plasser følgende kode i delen (Generelt) (oppgaver) i Modul1. 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. Plasser følgende kode i delen (Generelt) (oppgaver) i Klasse1. 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. Gi nytt navn til prosjektet ved å velge Prosjekt-menyen og klikke på "Prosjekt1 egenskaper", og Skriv inn det nye navnet i feltet "Navn på prosjektet". Dette eksemplet forutsetter at du har navngitt prosjektet "MyProject", og refererer til dette navnet i senere trinn.
  7. Merk av for "Uovervåket kjøring". Klikk OK.
  8. Gi nytt navn til klasse i egenskap-ruten. Dette eksemplet forutsetter at du heter klassen "MyClass", og refererer til dette navnet i senere trinn.
  9. Kompilere dll-filen ved å klikke på fil -menyen og velge "Gjør MyProject.dll."
  10. Opprette en ASP-side som heter "bitmap.asp" som inneholder følgende kode:
          <%@ 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. Opprett en HTML-side som heter "BitmapTest.htm" som inneholder følgende kode:
          <HTML>
    <HEAD>
    <TITLE>Bitmap Test</TITLE>
    </HEAD>
    <BODY>
    <HR>
    <img src="Bitmap.asp">
    <HR>
    </BODY>
    </HTML>

Referanser


Hvis du vil ha mer informasjon, kan du se følgende artikkel i Microsoft Knowledge Base:

173308 hvordan du viser bilder som er lagret i et BLOB-felt

For de nyeste Knowledge Base-artices og annen støtteinformasjon om Visual InterDev og Active Server Pages, kan du se følgende side på webområdet for Microsoft kundestøtte: