|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
国内有些大的CRM厂商的ASP就写得不错.无论是概念还是它里面用JAVASCRIPT的能力.并不是说现在的程序员用了ASP.NET来写程序就可以说自己高档了创建ActiveX静态链接库
利用VB5.0,我们要开辟一个ActiveX静态链接库。这个静态链接库让我们可以毗连到SQL数据库,提取图片数据,
并把它们保留成文件,放在目次里。要创建静态链接库,请在翻开VB程序以后实行以下步骤:起首:在文件(File)菜单
里,选择新建项目(NewProject)。接着,在新创建项目对话框里,双击ActiveXDLL图标。VB主动地向项目里增添一个
类,叫做Class1。然后,在属性容器里,双击称号(Name)属性,把它改成clsImageLoader,坚持instancing属性为缺省
值MultiUse不动。最初,在项目(Project)菜单里,选择Project1属性,翻开项目属性对话框。选择通用(General)选
项卡,把项目称号改成ImageLoader。别的字段能够不论,坚持原样。单击断定(OK)完成对ImageLoader这个工程的设
置。
在类里,写进了5个Let属性,1个Get属性(只读)和两个办法。Let属性传送静态链接库必要的信息,Get属性供应动
态链接库天生的图片文件的地位。两个办法用来翻开到数据库的毗连,以天生图片文件。表A总结了这些属性和办法的作
用。固然,依据项目标必要,能够在类里到场更庞大的功效。
表A:在ActiveX静态链接库里的属性和办法
属性/办法感化
DbName翻开数据库毗连所需的数据库称号。
TableName,
NameOfImageColumn,翻开纪录集所必要的信息。
NameOfImageTypeColumn,
NameOfImageIdColumn
ImageFile(只读)把图片文件的称号和地位前往给容器。
OpenConnection(办法)翻开数据库毗连。
CreateTemplateImageFile(办法)从数据库提取图片数据,并把它保留到目次里。
在类里另有别的的公有子程序,用来初始化类、停止类、翻开纪录集、创建图片文件,和处置大概的毛病。
注重微软举动数据工具ADO1.5(如今为2.0)被用来毗连SQL数据库。也能够利用别的数据会见办法,好比远程数据工具RDO。
在这个项目里,必需利用ADO。操纵办法是,单击项目(Project)菜单,然后选择援用(References)菜单项。在援用对
话框里,选中微软ActiveXDataObjects1.5库,然后单击断定(OK)。
在列表B里,列出了类ImageLoader完全源代码。类里利用的变量界说都在代码外部给出,另有别的正文,匡助了解高低
文。
列表B:类ImageLoader的完全源代码
PrivatemAdoConnAsNewADODB.Connection
PrivatemAdoRstAsNewADODB.Recordset
PrivatemstrDbNameAsString
PrivatemstrTableNameAsString
PrivatemstrImageColumnNameAsString图片字的称号。
PrivatemstrImageTypeColumnNameAsString图片范例字段的称号。
PrivatemstrImageIdColumnNameAsString图片ID字段的称号。
PrivatemstrFileName()AsString数组,内里包括文件名和路径。
PrivatemlngImageId()AsLong数组,内里包括图片ID
PrivatemlngNumberOfFilesAsLong
ConstBLOCKSIZE=102400
PublicPropertyLetDbName(ByValstrValAsString)
mstrDbName=strVal
EndProperty
PublicPropertyLetTableName(ByValstrValAsString)
mstrTableName=strVal
EndProperty
PublicPropertyLetNameOfImageColumn(ByValstrValAsString)
mstrImageColumnName=strVal
EndProperty
PublicPropertyLetNameOfImageTypeColumn(ByValstrValAsString)
mstrImageTypeColumnName=strVal
EndProperty
PublicPropertyLetNameOfImageIdColumn(ByValstrValAsString)
mstrImageIdColumnName=strVal
EndProperty
PublicPropertyGetImageFile(ByValImageIdAsInteger)AsString
DimintPosAsInteger
DimblnFindIdAsBoolean
DimiAsInteger
blnFindId=False
Fori=0TomlngNumberOfFiles-1
IfmlngImageId(i)=ImageIdThen
intPos=5+Len(ImageId)+3
ImageFile=Right(mstrFileName(i),intPos)reformatthelocationoffile.
blnFindId=True
EndIf
Nexti
IfblnFindId=FalseThen
Err.Clear
Err.RaisevbObjectError+23,"GetImageFile","Cantfindimagefile!"
EndIf
EndProperty
PublicSubOpenConnection()
**********************************************************
感化:翻开数据库毗连。
**********************************************************
OnErrorGoToError_handler
IfmstrDbName=""ThenGoToError_handler
IfmAdoConn.State=adStateOpenThenmAdoConn.Close
mAdoConn.ConnectionString="DRIVER={SQLServer};SERVER=(local);UID=sa;PWD=;WSID=JIA;DATABASE="&
mstrDbName
mAdoConn.ConnectionTimeout=15
mAdoConn.Open
ExitSub
Error_handler:
CallHandleError
EndSub
PublicSubCreateTempImageFile(ByValImageIdAsInteger)
DimstrImageTypeAsString
DimiAsInteger
**********************************************************
感化:翻开纪录集,提取二进制数据,并把数据存进文件。注重文件名利用图片ID天生。
输出:图片ID。
**********************************************************
IfmAdoConn.State=adStateClosedThenExitSub
CallOpenRecordset(ImageId)
IfmAdoRst.State=adStateClosedThenExitSub
OnErrorGoToError_handler
Fori=0TomlngNumberOfFiles-1
检测图片文件是不是已存在。
IfmlngImageId(i)=ImageIdThenExitSub
Nexti
mlngNumberOfFiles=mlngNumberOfFiles+1
ReDimPreservemstrFileName(mlngNumberOfFiles)改动数组巨细。
ReDimPreservemlngImageId(mlngNumberOfFiles)改动数组巨细。
mlngImageId(mlngNumberOfFiles-1)=ImageId
strImageType=mAdoRst.Fields(mstrImageTypeColumnName)获得图片范例。
mstrFileName(mlngNumberOfFiles-1)=App.Path&"images"&_
"image"<rim(Str(ImageId))&"."&strImageType获得图片文件称号和地位。
CallReadFromDB(mAdoRst.Fields(mstrImageColumnName),_
mstrFileName(mlngNumberOfFiles-1),AdoRst.Fields(mstrImageColumnName).ActualSize)
ExitSub
Error_handler:
CallHandleError
EndSub
PrivateSubOpenRecordset(ByValImageIdAsInteger)
DimSqlTextAsString
**********************************************************
感化:翻开纪录集。
输出:图片ID。
**********************************************************
OnErrorGoToError_handler
IfmAdoRst.State=adStateOpenThenmAdoRst.Close
SqlText="SELECT"&mstrImageColumnName&","&_
mstrImageTypeColumnName&"FROM"&mstrTableName&_
"WHERE"&mstrImageIdColumnName&"="&ImageId
SetmAdoRst.ActiveConnection=mAdoConn
mAdoRst.OpenSqlText,,adOpenStatic,adLockReadOnlyOpenrecordset.
ExitSub
Error_handler:
CallHandleError
EndSub
PrivateSubReadFromDB(fldAsADODB.Field,ByValDiskFileAsString,_
FldSizeAsLong)
DimNumBlocksAsInteger
DimLeftOverAsLong
DimbyteData()AsByte字节数组,用于长的可变二进制数据LongVarBinary。
DimstrDataAsString字符串,用于长的可变二进制数据LongVarChar。
DimDestFileNumAsInteger
DimpicAsVariant
DimiAsInteger
**********************************************************
感化:提取二进制数据并把数据放进文件。
输出:图片字段,文件名/地位和数据尺寸。
**********************************************************
IfLen(Dir(DiskFile))>0Then删除已存在的方针文件。
KillDiskFile
EndIf
DestFileNum=FreeFile
OpenDiskFileForBinaryAsDestFileNum
NumBlocks=FldSizeBLOCKSIZE
LeftOver=FldSizeModBLOCKSIZE
SelectCasefld.Type
CaseadLongVarBinary用于图片数据范例。
byteData()=fld.GetChunk(LeftOver)
pic=fld.GetChunk(LeftOver)
PutDestFileNum,,byteData()
Fori=1ToNumBlocks
byteData()=fld.GetChunk(BLOCKSIZE)
PutDestFileNum,,byteData()
Nexti
CaseadLongVarChar用于文本数据范例。
Fori=1ToNumBlocks
strData=String(BLOCKSIZE,32)
strData=fld.GetChunk(BLOCKSIZE)
PutDestFileNum,,strData
Nexti
strData=String(LeftOver,32)
strData=fld.GetChunk(LeftOver)
PutDestFileNum,,strData
CaseElse
Err.Clear
Err.RaisevbObjectError+22,"ReadfromDB","NotaChunkRequiredcolumn!"
EndSelect
CloseDestFileNum
EndSub
PrivateSubHandleError()
DimadoErrsAsADODB.Errors
DimerrLoopAsADODB.Error
DimstrErrorAsString
DimiAsInteger
**********************************************************
感化:处置大概的毛病。
**********************************************************
IfmAdoConn.State=adStateClosedThenGoToDone
i=1
SetadoErrs=mAdoConn.Errors
ForEacherrLoopInadoErrs列举毛病集。
WitherrLoop
strError=strError&vbCrLf&"ADOError#"&.Number
strError=strError&vbCrLf&"Description"&.Description
strError=strError&vbCrLf&"Source"&.Source
i=i+1
EndWith
Next
Done:
Err.RaisevbObjectError+21,"",strError
EndSub
PrivateSubClass_Initialize()
mlngNumberOfFiles=0
EndSub
PrivateSubClass_Terminate()
DimiAsInteger
OnErrorGoToError_handler
IfmAdoRst.State=adStateOpenThenmAdoRst.Close封闭纪录集。
IfmAdoConn.State=adStateOpenThenmAdoConn.Close封闭毗连。
SetmAdoRst=Nothing
SetmAdoConn=Nothing
ExitSub
Error_handler:
CallHandleError
EndSub
Error_handler:
CallHandleError
EndSub
下一步是编译静态链接库。在文件(File)菜单里,单击创建(Make)ImageLoader.dll。VB会扣问保留静态链接库的位
置,然后就编译项目。在要ASP文件里利用ImageLoader.dll这个静态链接库,必需在Windows注册内外注册它。操纵办法
是,在NT的启动菜单里,选择运转(Run),然后在输出框里输出上面的命令行:
regsvr32localpathImageLoader
注重,实践利用时要用静态链接库实践地点的完全路径交换下面命令行里的“localpath”。如今,就能够在程序里,好比
ASP文件里利用这个静态链接库了。
使用cdonts,可以发送、查看邮件,实现webmail的功能。结合wsh,可以实现对nt主机的管理,如nt用户管理、iis虚拟主机设置、exchange邮箱设置等等,就像管理本地机一样方便。 |
|