为Web浏览器提供SQLServer2映像
在VB 5中,我们将开发一个ActiveX动态链接库。这个动态链接库允许我们连接到SQL并提取图片数据。
并将它们保存为文件并将其放入目录中。要建立动态链接库,请在打开VB程序之后遵循以下步骤:第一:在文件菜单中
在此,选择新的项目(新项目)。然后,在新建项目对话框中,双击ActiveX DLL icon.vb自动添加一个项目
类,叫做Class1。然后,在属性的容器,双击姓名(名称)属性,改变它clsimageloader,保持实例属性为默认值
价值的多用途不动。最后,在项目(课题)菜单,选择项目属性,打开项目属性对话框。选择一般(普通)的选择
项卡,改变项目的名称imageloader。其他领域可以保存它们。单击确定(OK)来完成对imageloader设置的项目
这个.
在类中,有5个属性被写入,1个get属性(只读)和两个方法被写入。LET属性传递动态链接库所需的信息,get属性提供操作。
由状态链接库生成的图片文件的位置。这两种方法用于打开连接生成图片文件。表A总结了这些属性和方法的工作原理。
当然,更复杂的功能可以根据项目的需要添加到类中。
表A:ActiveX动态链接库中的属性和方法
属性/方法效果
在打开的连接所需的名字。
表名,
nameofimagecolumn,为记录集所需的信息公开。
nameofimagetypecolumn,
nameofimageidcolumn
图像文件(只读)返回的名称和图片文件位置的容器。
的OpenConnection(法)打开连接。
的createtemplateimagefile(方法)的图像数据提取并保存到目录。
这是用来初始化类,类的其他私人子程序结束课程,打开记录集,创建的图片文件,并处理可能出现的错误。
请注意,活动数据对象ado1.5(现在是2)是用来连接到SQL。其它数据访问方法,如远程数据对象RDO,也可以使用。
在这个项目中,您必须使用ADO。操作方法是单击项目菜单,然后选择引用(引用)菜单项。
在框中,选择ActiveX数据对象1.5库,然后单击确定(ok)。
列表中的B类的imageloader完整源代码清单。在课堂上使用的变量定义的代码,还有其他的注释,帮助理解下。
本文。
为表B的完整的源代码:类imageloader
私人madoconn ADODB连接新。
私人madorst作为新的数据集。
私人mstrdbname作为字符串
私人mstrtablename作为字符串
的私人mstrimagecolumnname名称字符串的图片文字。
对民营mstrimagetypecolumnname图片类型字段的名称作为字符串。
的私人mstrimageidcolumnname名称字符串的照片ID字段。
私人mstrfilename()为字符串的数组,其中包含的文件名和路径。
私人mlngimageid()长的数组,包含照片的身份证
私人mlngnumberoffiles长
const的块大小= 102400
公共财产让dbname(ByVal strval字符串)
mstrdbname = strval
最后的财产
公共财产让tablename(ByVal strval字符串)
mstrtablename = strval
最后的财产
公共财产让nameofimagecolumn(ByVal strval字符串)
mstrimagecolumnname = strval
最后的财产
公共财产让nameofimagetypecolumn(ByVal strval字符串)
mstrimagetypecolumnname = strval
最后的财产
公共财产让nameofimageidcolumn(ByVal strval字符串)
mstrimageidcolumnname = strval
最后的财产
公共财产获得图像文件(ByVal imageid为整数)为字符串
昏暗的intpos为整数
昏暗的blnfindid布尔
模糊i为整数
blnfindid = false
我mlngnumberoffiles = 0 - 1
如果mlngimageid(我)= imageid然后
intpos = 5 + len(imageid)+ 3
图像文件=右(mstrfilename(我),intpos)'reformat文件的位置。
blnfindid =真
最后如果
下一个我
如果blnfindid = FALSE然后
呃。清晰
呃。提高vbobjecterror + 23,图像文件
最后如果
最后的财产
市民Sub OpenConnection()
**********************************************************
效果:打开连接。
**********************************************************
错误error_handler
如果mstrdbname = ,然后去error_handler
如果madoconn。状态=怎么那么亲密madoconn。
madoconn.connectionstring =司机= { SQL Server };服务器=(局部);UID = SA;pwd=;WSID =家;数据库=
mstrdbname
madoconn.connectiontimeout = 15
MAdoConn。打开
退出子
error_handler:
叫handleError
端子
市民Sub CreateTempImageFile(ByVal imageid为整数)
昏暗的strimagetype作为字符串
模糊i为整数
**********************************************************
函数:打开记录集,提取二进制数据,并将数据存入文件。注意,文件名是使用图片ID生成的。
输入:图片ID。
**********************************************************
如果madoconn状态= adstateclosed然后Exit Sub。
电话openrecordset(imageid)
如果madorst状态= adstateclosed然后Exit Sub。
错误error_handler
我mlngnumberoffiles = 0 - 1
检查图片文件是否已经存在。
如果mlngimageid(我)= imageid然后Exit Sub
下一个我
mlngnumberoffiles = mlngnumberoffiles + 1
ReDim Preserve mstrFileName(mlngnumberoffiles)改变数组大小。
ReDim Preserve mlngImageId(mlngnumberoffiles)改变数组大小。
mlngimageid(mlngnumberoffiles - 1)= imageid
strimagetype = madorst。领域(mstrimagetypecolumnname)得到的图像类型。
MstrFileName(mlngnumberoffiles - 1)的应用程序。路径= 图片_
图片LTrim(STR(imageid)),strimagetype名称和图片文件的位置。
电话readfromdb(madorst.fields(mstrimagecolumnname),_
MstrFileName(mlngnumberoffiles - 1),adorst。领域(mstrimagecolumnname)实际大小)。
退出子
error_handler:
叫handleError
端子
私有子openrecordset(ByVal imageid为整数)
朦胧的SqlText As String
**********************************************************
效果:打开记录集。
输入:图片ID。
**********************************************************
错误error_handler
如果madorst。状态=怎么那么亲密madorst。
sqltext =选择mstrimagecolumnname
mstrimagetypecolumnname mstrtablename _
在那里mstrimageidcolumnname=imageid
集madorst.activeconnection = madoconn
MAdoRst。Open SqlText,adopenstatic,adlockreadonly'open记录集。
退出子
error_handler:
叫handleError
端子
列兵Sub ReadFromDB(FLD ADODB。Field ByVal DiskFile,为字符串,_
fldsize长)
昏暗的numblocks为整数
剩饭剩饭
昏暗的字节数据()字节的字节数组,它用于变长二进制数据LongVarBinary。
昏暗的strdata作为字符串的字符串用于变长二进制数据的LongVarChar。
昏暗的destfilenum为整数
变暗图片
模糊i为整数
**********************************************************
作用:提取二进制数据并将数据放入文件中。
输入:图片字段、文件名/位置和数据大小。
**********************************************************
如果Len(Dir(磁盘文件虚拟))> 0然后删除已存在的目标文件。
杀了磁盘文件虚拟
最后如果
destfilenum = FreeFile
打开二进制文件作为destfilenum
numblocks = fldsize /块
剩下的= fldsize模块
选择案例类型FLD。
案例adlongvarbinary是用于图像数据类型。
字节数据()= fld.getchunk(剩余的)
PIC = fld.getchunk(剩余的)
把destfilenum,字节数据()
我numblocks = 1
字节数据()= fld.getchunk(块)
把destfilenum,字节数据()
下一个我
案例adlongvarchar是用于文本数据类型。
我numblocks = 1
strdata =字符串(大小,32)
strdata = fld.getchunk(块)
把destfilenum,strdata
下一个我
strdata =字符串(吃剩的,32)
strdata = fld.getchunk(剩余的)
把destfilenum,strdata
其他案件
呃。清晰
呃。提高vbobjecterror + 22,读取DB
最后选择
近destfilenum
端子
Sub HandleError(私人)
昏暗的adoerrs为ADODB的错误。
昏暗的errloop为ADODB。错误
昏暗strerror作为字符串
模糊i为整数
**********************************************************
效果:处理可能出现的错误。
**********************************************************
如果madoconn状态= adstateclosed然后去做。
我= 1
adoerrs = madoconn设置错误。
在adoerrs各errloop枚举错误集。
与errloop
strerror = strerror vbcrlf ADO错误。数#
strerror = strerror vbcrlf描述,描述
strerror = strerror vbcrlf源,源
i = i + 1
结束
下一个
完成:
呃。提高vbobjecterror + 21,strerror 。
端子
私有子class_initialize()
mlngnumberoffiles = 0
端子
私有子class_terminate()
模糊i为整数
错误error_handler
如果madorst。状态=怎么那么madorst。关闭关闭记录集。
如果madoconn。状态=怎么那么madoconn关闭关闭连接。
集madorst =没有
集madoconn =没有
退出子
error_handler:
叫handleError
端子
error_handler:
叫handleError
端子
下一步是编写一个动态链接库,文件(文件)菜单,单击建立(使)imageloader.dll.vb要保存一个动态链接库位
集,然后编译项目。在ASP文件imageloader.dll动态链接库的使用,它必须在Windows注册操作方法。
是的,在NT的引导菜单中,选择run(run),然后在输入框中输入以下命令行。
imageloader regsvr32本地路径
注意,使用动态链接库来代替上述命令行的本地路径完成实际路径的实际使用。现在,它可以在一个程序,如
这个动态链接库在ASP文件中使用。