Резюме

Тази статия показва пример как да извлечете растерни снимките в базата данни на Microsoft Access 97 Nwind.mdb и ги видите от уеб браузър използвате Active Server Pages (ASP). За да изпълните тази задача, DLL ActiveX трябва да се създаде тази ленти достъп и OLE заглавки от полето. Тази статия показва как да създадете тази ActiveX DLL и как да го приложат.

Допълнителна информация

Предупреждение: използването от вас на кода, ОПИСАНИ в тази статия е на свой собствен риск. Microsoft предоставя този код "както са" без никакви гаранции, изрични или подразбиращи се, включително, но не само подразбиращи се гаранции за продаваемост и/или годност за определена цел.


Тази статия показва как да използвате Visual Basic, за да изтеглите растерно изображение, съхранени в поле за OLE обект. Тъй като определянето на OLE обекта за съхранение не е документиран, следният код търси обекти OLE заглавка за съответствие с началото на графични знаци. Този метод не може да работи във всички случаи.


Имайте предвид, че Internet Explorer 3.0 е в състояние да показва цвят растерни изображения. Поради тази причина растерни изображения, съхранени в базата данни на Access трябва да бъде по-голямо от 256 цвята.

Стъпка по стъпка пример за извличане на снимки

  1. Създаване на нов проект на Visual Basic и да проекта ActiveX DLL.

  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 и Active Server Pages вижте следната страница на сайта на Microsoft за техническа поддръжка:

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

Нуждаете се от още помощ?

Разширете уменията си

Преглед на обучението >

Получавайте първи новите функции

Присъединете се към Microsoft приобщени >

Беше ли полезна тази информация?

Доколко сте доволни от качеството на езика?
Какво е повлияло на вашия потребителски опит?

Благодарим ви за обратната връзка!

×