仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 546|回复: 8
打印 上一主题 下一主题

[学习教程] ASP网页设计从Access数据库恢复BMP图象并显现在WEB...

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:32:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
缺乏可以共同遵循的行业标准,ASP还处在发展初期,大家对它的理解不同,如产品和服务标准,收费标准等,不利于行业的健康发展。HOWTO:RetrievingBitmapfromAccessandDisplayingInWebPage

--------------------------------------------------------------------------------
Theinformationinthisarticleappliesto:

ActiveServerPages
MicrosoftVisualBasicProfessionalandEnterpriseEditionsforWindows,versions5.0,6.0
ActiveXDataObjects(ADO),versions1.0,1.5,2.0,2.1SP2,2.5
MicrosoftInternetInformationServerversions4.0,5.0
MicrosoftDataAccessComponentsversion2.5

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


SUMMARY
ThisarticleshowsbyexamplehowtoextractthebitmapphotosintheMicrosoftAccess97Northwind.mdb
database,andviewthemfromaWebbrowserusingActiveServerPages(ASP).Inordertoaccomplishthis
task,anActiveXDLLmustbecreatedthatstripstheAccessandOLEheadersfromthefield.Thisarticle
showshowtocreatethisActiveXDLL,andhowtoimplementit.



MOREINFORMATION
WARNING:ANYUSEBYYOUOFTHECODEPROVIDEDINTHISARTICLEISATYOUROWNRISK.Microsoftprovidesthis
code"asis"withoutwarrantyofanykind,eitherexpressorimplied,includingbutnotlimitedtothe
impliedwarrantiesofmerchantabilityand/orfitnessforaparticularpurpose.

ThisarticledemonstrateshowtouseVisualBasictoretrieveabitmapstoredinanOLEObjectfield.
BecausethedefinitionofOLEobjectstorageisnotdocumented,thefollowingcodesearchestheobjects
OLEheaderforcharactersconsistentwiththestartofthegraphic.Thismethodmaynotworkinall
circumstances.

BeawarethatInternetExplorer3.0isunabletodisplaytruecolorbitmaps.Forthisreason,thebitmaps
storedintheAccessdatabaseshouldbenohigherthan256colors.

Step-by-StepExampletoExtractthePhotos
CreateanewprojectinVisualBasicandmaketheprojectanActiveXDLL.


AddareferencetoActiveXDataObjects(ADO)byclickingtheProjectmenuandselectingReferences.
Select"MicrosoftOLEDBActiveXDataObjects1.0Library"andclickOK.


AddanewmoduletotheprojectbyselectingtheProjectmenuandclickingAddModule.SelectModuleand
clickOpen.


Placethefollowingcodeinthe(general)(declarations)sectionofMODULE1.BAS:

EnterthefollowingDeclarestatementasonesingleline:
PublicDeclareSubCopyMemoryLib"kernel32"Alias"RtlMoveMemory"
(lpvDestAsAny,lpvSourceAsAny,ByValcbCopyAsLong)

TypePT
WidthAsInteger
HeightAsInteger
EndType

TypeOBJECTHEADER
SignatureAsInteger
HeaderSizeAsInteger
ObjectTypeAsLong
NameLenAsInteger
ClassLenAsInteger
NameOffsetAsInteger
ClassOFfsetAsInteger
ObjectSizeAsPT
OleInfoAsString*256
EndType



Placethefollowingcodeinthe(general)(declarations)sectionofCLASS1.CLS:

FunctionDisplayBitmap(ByValOleFieldAsVariant)
DimArr()AsByte
DimObjHeaderAsOBJECTHEADER
DimBufferAsString
DimObjectOffsetAsLong
DimBitmapOffsetAsLong
DimBitmapHeaderOffsetAsInteger
DimArrBmp()AsByte
DimiAsLong

Resizethearray,thenfillitwith
theentirecontentsofthefield
ReDimArr(OleField.ActualSize)
Arr()=OleField.GetChunk(OleField.ActualSize)

Copythefirst19bytesintoavariable
oftheOBJECTHEADERuserdefinedtype.
CopyMemoryObjHeader,Arr(0),19

DeterminewheretheAccessHeaderends.
ObjectOffset=ObjHeader.HeaderSize+1

GrabenoughbytesaftertheOLEheadertogetthebitmapheader.
Buffer=""
Fori=ObjectOffsetToObjectOffset+512
Buffer=Buffer&Chr(Arr(i))
Nexti

MakesuretheclassoftheobjectisaPaintBrushobject
IfMid(Buffer,12,6)="PBrush"Then
BitmapHeaderOffset=InStr(Buffer,"BM")
IfBitmapHeaderOffset>0Then

Calculatethebeginningofthebitmap
BitmapOffset=ObjectOffset+BitmapHeaderOffset-1

Movethebitmapintoitsownarray
ReDimArrBmp(UBound(Arr)-BitmapOffset)
CopyMemoryArrBmp(0),Arr(BitmapOffset),UBound(Arr)-
BitmapOffset+1

Returnthebitmap
DisplayBitmap=ArrBmp
EndIf
EndIf
EndFunction



RenametheProjectbyselectingtheProjectmenu,andclickingon"Project1Properties"andtypeyournew
nameinthe"ProjectName"field.Thisexampleassumesthatyounamedtheproject"MyProject"andwill
refertothatnameinfuturesteps.


MaketheprojectApartmentModelThreadedbyselectingthe"UnattendedExecution"checkbox.ClickOK.


RenametheClassinthePropertyPane.Thisexampleassumesthatyounamedtheclass"MyClass"andrefers
tothatnameinfuturesteps.


CompiletheDLLbyclickingtheFilemenuandselecting"MakeMyProject.dll."


CreateanASPpagenamed"bitmap.asp"thatcontainsthefollowingcode:

<%@LANGUAGE="VBSCRIPT"%>
<%
YouneedtosetupaSystemDSNnamedNWindthatpointsto
theNorthwind.mdbdatabase
SetDataConn=Server.CreateObject("ADODB.Connection")
DataConn.Open"DSN=NWind","admin",""
SetcmdTemp=Server.CreateObject("ADODB.Command")
SetRS=Server.CreateObject("ADODB.Recordset")
cmdTemp.CommandText="SELECTPhotoFROMEmployees
WHEREEmployeeID=1"
cmdTemp.CommandType=1
SetcmdTemp.ActiveConnection=DataConn
RS.OpencmdTemp,,0,1
Response.ContentType="image/bmp"
SetBitmap=Server.CreateObject("MyProject.MyClass")
Response.BinaryWriteBitmap.DisplayBitmap(RS("Photo"))
RS.Close
%>



CreateanHTMLpagenamed"BitmapTest.htm"thatcontainsthefollowingcode:

<HTML>
<HEAD>
<TITLE>BitmapTest</TITLE>
</HEAD>
<BODY>
<HR>
<imgsrc="Bitmap.asp">
<HR>
</BODY>
</HTML>

对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。
柔情似水 该用户已被删除
沙发
发表于 2015-1-18 05:25:22 | 只看该作者
不能只是将它停留在纸上谈兵的程度上。
小魔女 该用户已被删除
板凳
发表于 2015-1-18 09:22:14 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
蒙在股里 该用户已被删除
地板
发表于 2015-1-21 16:02:22 | 只看该作者
我想问如何掌握学习节奏(先学什么再学什么)最好详细点?
飘灵儿 该用户已被删除
5#
发表于 2015-1-30 20:41:01 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
变相怪杰 该用户已被删除
6#
发表于 2015-2-6 15:54:19 | 只看该作者
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
爱飞 该用户已被删除
7#
 楼主| 发表于 2015-2-16 23:22:19 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-5 12:14:11 | 只看该作者
接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
飘飘悠悠 该用户已被删除
9#
发表于 2015-3-19 18:30:34 | 只看该作者
我想问如何掌握学习节奏(先学什么再学什么)最好详细点?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 06:55

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表