中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > Asp > 数据库
displayimageindb-usingcomponent
作者:Yestar2000 时间:2001-11-09 10:56 出处:互联网 责编:chinaitpower
              摘要:displayimageindb-usingcomponent

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
------------------------------------------

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

2. 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.

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

4. 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

5. 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

6. 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.

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

8. Rename the Class in the Property Pane. This example assumes that you
   named the class "MyClass" and refers to that name in future steps.

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

10. 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
      %>

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

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

REFERENCES
==========

For additional information, please see the following article in the
Microsoft Knowledge Base:

   ARTICLE-ID: Q173308
   TITLE     : HOWTO: Displaying Images Stored in a BLOB Field
  

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有