您的位置:首页技术开发ASP技巧 → 从Access数据库恢复BMP图像并显示在WEB页面microsoft

从Access数据库恢复BMP图像并显示在WEB页面microsoft

时间:2004/11/7 4:02:00来源:本站整理作者:蓝点我要评论(0)

HOWTO: Retrieving Bitmap from Access and Displaying In Web Page



--------------------------------------------------------------------------------

The information in this article applies to:



Active Server Pages

Microsoft Visual Basic Professional and Enterprise Editions for Windows, versions 5.0, 6.0

ActiveX Data Objects (ADO), versions 1.0, 1.5, 2.0, 2.1 SP2, 2.5

Microsoft Internet Information Server versions 4.0, 5.0

Microsoft Data Access Components version 2.5



--------------------------------------------------------------------------------





SUMMARY

This article shows by example how to extract the bitmap photos in the Microsoft Access 97 Northwind.mdb

database, and view them from a Web browser using Active Server Pages (ASP). In order to accomplish this

task, an ActiveX DLL must be created that strips the Access and OLE headers from the field. This article

shows how to create this ActiveX DLL, and how to implement it.







MORE INFORMATION

WARNING: ANY USE BY YOU OF THE CODE PROVIDED IN THIS ARTICLE IS AT YOUR OWN RISK. Microsoft provides this

code "as is" without warranty of any kind, either express or implied, including but not limited to the

implied warranties of merchantability and/or fitness for a particular purpose.



This article demonstrates how to use Visual Basic to retrieve a bitmap stored in an OLE Object field.

Because the definition of OLE object storage is not documented, the following code searches the object's

OLE header for characters consistent with the start of the graphic. This method may not work in all

circumstances.



Be aware that Internet Explorer 3.0 is unable to display true color bitmaps. For this reason, the bitmaps

stored in the Access database should be no higher than 256 colors.



Step-by-Step Example to Extract the Photos

Create a new project in Visual Basic and make the project an ActiveX DLL.





Add a reference to ActiveX Data Objects (ADO) by clicking the Project menu and selecting References.

Select "Microsoft OLE DB ActiveX Data Objects 1.0 Library" and click OK.





Add a new module to the project by selecting the Project menu and clicking Add Module. Select Module and

click Open.





Place the following code in the (general) (declarations) section of 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







Place the following code in the (general) (declarations) section of 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







Rename the Project by selecting the Project menu, and clicking on "Project1 Properties" and type your new

name in the "Project Name" field. This example assumes that you named the project "MyProject" and will

refer to that name in future steps.





Make the project Apartment Model Threaded by selecting the "Unattended Execution" check box. Click OK.





Rename the Class in the Property Pane. This example assumes that you named the class "MyClass" and refers

to that name in future steps.





Compile the DLL by clicking the File menu and selecting "Make MyProject.dll."





Create an ASP page named "bitmap.asp" that contains the following 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

      %>







Create an HTML page named "BitmapTest.htm" that contains the following code:



      

      

      Bitmap Test

      

      

      


      

      


      

      






相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 VB.NET 2005编写定时关 Jquery get/post下乱码解决方法 前台gbk gb如何使用数据绑定控件显示数据ASP脚本循环语句ASP怎么提速

人气排行 轻松解决"Server Application Error"和iis"一起学习DataGridView调整列宽用ASP随机生成文件名的函数Jquery get/post下乱码解决方法 前台gbk gbODBC Drivers错误80004005的解决办法返回UPDATE SQL语句所影响的行数的方法用Javascript隐藏超级链接的真实地址两个不同数据库表的分页显示解决方案