日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

用SQL Server為Web瀏覽器提供圖像(三)(轉)

瀏覽:231日期:2023-10-28 13:07:09
建立ActiveX 動態鏈接庫;;;;使用 VB 5.0,我們要開發一個ActiveX 動態鏈接庫。這個動態鏈接庫讓我們能夠連接到SQL數據庫,提取圖片數據,并把它們保存成文件,放在目錄里。要建立動態鏈接庫,請在打開VB程序之后執行下列步驟:首先:在文件(File)菜單里,選擇新建項目(New Project)。接著,在新建立項目對話框里,雙擊ActiveX DLL 圖標。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)菜單 項。在引用對話框里,選中微軟ActiveX Data Objects 1.5 庫,然后單擊確定(OK)。在列表 B里,列出了類ImageLoader 完整源代碼。類里使用的變量定義都在代碼內部給出,還有其它注釋,幫助理解上下文。列表 B:類 ImageLoader 的完整源代碼Private mAdoConn As New ADODB.ConnectionPrivate mAdoRst As New ADODB.RecordsetPrivate mstrDbName As StringPrivate mstrTableName As StringPrivate mstrImageColumnName As String '圖片字的名稱。Private mstrImageTypeColumnName As String '圖片類型字段的名稱。Private mstrImageIdColumnName As String '圖片ID字段的名稱。Private mstrFileName() As String '數組,里面包含文件名和路徑。Private mlngImageId() As Long '數組,里面包含圖片IDPrivate mlngNumberOfFiles As LongConst BLOCKSIZE = 102400Public Property Let DbName(ByVal strVal As String);;mstrDbName = strValEnd PropertyPublic Property Let TableName(ByVal strVal As String);;mstrTableName = strValEnd PropertyPublic Property Let NameOfImageColumn(ByVal strVal As String);;mstrImageColumnName = strValEnd PropertyPublic Property Let NameOfImageTypeColumn(ByVal strVal As String);;mstrImageTypeColumnName = strValEnd PropertyPublic Property Let NameOfImageIdColumn(ByVal strVal As String);;mstrImageIdColumnName = strValEnd PropertyPublic Property Get ImageFile(ByVal ImageId As Integer) As String;;Dim intPos As Integer;;Dim blnFindId As Boolean ;;Dim i As Integer;;blnFindId = False;;For i = 0 To mlngNumberOfFiles - 1;;;;;If mlngImageId(i) = ImageId ThenintPos = 5 + Len(ImageId) + 3ImageFile = Right(mstrFileName(i), intPos) 'reformat the location of file.blnFindId = True;;;;;End If;;Next i;;If blnFindId = False Then;;;;;Err.Clear;;;;;Err.Raise vbObjectError + 23, "Get ImageFile", "Can't find image file!";;End IfEnd PropertyPublic Sub OpenConnection()'**********************************************************'作用:打開數據庫連接。'**********************************************************On Error GoTo Error_handler;;If mstrDbName = "" Then GoTo Error_handler;;If mAdoConn.State = adStateOpen Then mAdoConn.Close;;mAdoConn.ConnectionString = "DRIVER={SQL Server};SERVER=(local);UID=sa;PWD=;WSID=JIA;DATABASE=" & mstrDbName;;mAdoConn.ConnectionTimeout = 15;;mAdoConn.OpenExit SubError_handler:;;Call HandleErrorEnd SubPublic Sub CreateTempImageFile(ByVal ImageId As Integer);;Dim strImageType As String;;Dim i As Integer'**********************************************************'作用:打開記錄集,提取二進制數據,并把數據存入文件。注意文件名使用圖片ID生成。'輸入:圖片ID。'**********************************************************If mAdoConn.State = adStateClosed Then Exit Sub;;Call OpenRecordset(ImageId);;If mAdoRst.State = adStateClosed Then Exit SubOn Error GoTo Error_handler;;For i = 0 To mlngNumberOfFiles - 1;;;;;'檢測圖片文件是否已經存在。;;;;;If mlngImageId(i) = ImageId Then Exit Sub;;Next i;;mlngNumberOfFiles = mlngNumberOfFiles + 1;;ReDim Preserve mstrFileName(mlngNumberOfFiles) '改變數組大小。;;ReDim Preserve mlngImageId(mlngNumberOfFiles) '改變數組大小。;;mlngImageId(mlngNumberOfFiles - 1) = ImageId;;strImageType = mAdoRst.Fields(mstrImageTypeColumnName) ' 取得圖片類型。;;;;;mstrFileName(mlngNumberOfFiles - 1) = App.Path & "images" & _;;;;"image" & LTrim(Str(ImageId)) & "." & strImageType;;'取得圖片文件名稱和位置。;;Call ReadFromDB(mAdoRst.Fields(mstrImageColumnName), _;;;;;mstrFileName(mlngNumberOfFiles - 1), AdoRst.Fields(mstrImageColumnName).ActualSize);;Exit SubError_handler:;;Call HandleErrorEnd SubPrivate Sub OpenRecordset(ByVal ImageId As Integer)Dim SqlText As String'**********************************************************'作用:打開記錄集。'輸入:圖片ID。'**********************************************************On Error GoTo Error_handler;;If mAdoRst.State = adStateOpen Then mAdoRst.Close;;SqlText = "SELECT " & mstrImageColumnName & "," & _;;;;;mstrImageTypeColumnName & " FROM " & mstrTableName & _;;;;;" WHERE " & mstrImageIdColumnName & "=" & ImageId;;Set mAdoRst.ActiveConnection = mAdoConn;;mAdoRst.Open SqlText, , adOpenStatic, adLockReadOnly 'Open recordset.Exit SubError_handler:;;Call HandleErrorEnd SubPrivate Sub ReadFromDB(fld As ADODB.Field, ByVal DiskFile As String, _;;;;FldSize As Long)Dim NumBlocks As IntegerDim LeftOver As LongDim byteData() As Byte;;;'字節數組,用于長的可變二進制數據LongVarBinary。Dim strData As String;;;;'字符串,用于長的可變二進制數據LongVarChar。Dim DestFileNum As IntegerDim pic As VariantDim i As Integer'**********************************************************'作用:提取二進制數據并把數據放入文件。'輸入:圖片字段,文件名/位置和數據尺寸。'**********************************************************;;If Len(Dir(DiskFile)) > 0 Then '刪除已經存在的目標文件。;;;;;Kill DiskFile;;End If;;DestFileNum = FreeFile;;Open DiskFile For Binary As DestFileNum;;NumBlocks = FldSize BLOCKSIZE;;LeftOver = FldSize Mod BLOCKSIZE;;Select Case fld.Type;;Case adLongVarBinary '用于圖片數據類型。;;;;;byteData() = fld.GetChunk(LeftOver);;;;;pic = fld.GetChunk(LeftOver);;;;;Put DestFileNum, , byteData();;;;;For i = 1 To NumBlocksbyteData() = fld.GetChunk(BLOCKSIZE)Put DestFileNum, , byteData();;;;;Next i;;Case adLongVarChar '用于文本數據類型。;;;;;For i = 1 To NumBlocksstrData = String(BLOCKSIZE, 32)strData = fld.GetChunk(BLOCKSIZE)Put DestFileNum, , strData;;;;;Next i;;;;;strData = String(LeftOver, 32);;;;;strData = fld.GetChunk(LeftOver)Put DestFileNum, , strData;;;;;Case ElseErr.ClearErr.Raise vbObjectError + 22, "Read from DB", "Not a Chunk Required column!";;End Select;;Close DestFileNumEnd SubPrivate Sub HandleError()Dim adoErrs As ADODB.ErrorsDim errLoop As ADODB.ErrorDim strError As StringDim i As Integer'**********************************************************'作用:處理可能的錯誤。'**********************************************************;;If mAdoConn.State = adStateClosed Then GoTo Done;;;i = 1;;;Set adoErrs = mAdoConn.Errors;;For Each errLoop In adoErrs;;'枚舉錯誤集。;;;;;;;;;;;With errLoopstrError = strError & vbCrLf & ";;;ADO Error;;;#" & .NumberstrError = strError & vbCrLf & ";;;Description;;" & .DescriptionstrError = strError & vbCrLf & ";;;Source;;;;;;;" & .Sourcei = i + 1;;;;;End With;;NextDone:;;Err.Raise vbObjectError + 21, "", strErrorEnd SubPrivate Sub Class_Initialize();;mlngNumberOfFiles = 0End SubPrivate Sub Class_Terminate()Dim i As IntegerOn Error GoTo Error_handler;;;If mAdoRst.State = adStateOpen Then mAdoRst.Close;;'關閉記錄集。;;;;;;;;;If mAdoConn.State = adStateOpen Then mAdoConn.Close;;'關閉連接。;;;;;;Set mAdoRst = Nothing;;;;;;Set mAdoConn = NothingExit SubError_handler:;;Call HandleErrorEnd SubError_handler:;;Call HandleErrorEnd Sub下一步是編譯動態鏈接庫。在文件(File)菜單里,單擊建立(Make) ImageLoader.dll。VB會詢問保存動態鏈接庫的位置,然后就編譯項目。在要ASP文件里使用ImageLoader.dll這個動態鏈接庫,必須在Windows注冊表里注冊它。操作方法是,在NT的啟動菜單里,選擇運行(Run),然后在輸入框里輸入下面的命令行:regsvr32 localpathImageLoader注意,實際使用時要用動態鏈接庫實際所在的完整路徑替換上面命令行里的“localpath”。現在,就可以在程序里,比如ASP文件里使用這個動態鏈接庫了。
標簽: Sql Server 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
98精品视频| 国产精品久久久久蜜臀| 国产成人精品亚洲线观看 | 国产综合激情| 黄色成人精品网站| 日韩欧美一区二区三区在线观看 | 少妇精品久久久一区二区| 在线精品观看| аⅴ资源天堂资源库在线| 尤物精品在线| 成人在线视频免费| 麻豆成全视频免费观看在线看| 少妇久久久久| 欧美亚洲精品在线| 日韩中文字幕区一区有砖一区 | www在线观看黄色| 欧美福利一区| 国产日韩一区二区三区在线| 日韩欧美一区二区三区在线观看 | 亚洲一级高清| 成人在线视频区| 欧美一级二区| 蜜臀av一区二区三区| 日本综合字幕| 日韩国产一二三区| а√天堂中文在线资源8| 蜜桃久久久久久| 欧美日本久久| 日韩在线综合| 最新亚洲激情| 黄色国产精品| 亚洲久久在线| 中文字幕日韩亚洲| 最新亚洲国产| 国产日韩欧美一区二区三区| 午夜精品亚洲| 国语对白精品一区二区| 国产精品tv| 国产精品日韩久久久| 美女精品久久| 亚洲资源网站| 久久精品国产久精国产| 精品中文字幕一区二区三区四区| 精品亚洲美女网站| 亚洲aⅴ网站| 色偷偷偷在线视频播放| 亚洲一区二区成人| 免费在线成人| 视频一区二区中文字幕| 麻豆91小视频| 久久av在线| 日韩综合在线| 亚洲aa在线| 99久久九九| 国产精品黄色| 欧美综合另类| 国产精品mm| 群体交乱之放荡娇妻一区二区| 亚洲一区二区三区中文字幕在线观看| 欧美激情久久久久久久久久久| 亚洲精品一二三区区别| 国产 日韩 欧美 综合 一区| 亚洲制服一区| 欧美日韩在线二区| 久久99青青| 香蕉久久久久久| 99热免费精品| 91精品久久久久久久久久不卡| 欧美一级一区| 日韩精品一级| 在线观看亚洲精品福利片| 香蕉精品视频在线观看| 欧美日本二区| 午夜一区在线| 午夜亚洲精品| 婷婷综合成人| 国产欧美日韩免费观看| 国产日产精品_国产精品毛片 | 欧美激情综合| 国产精品欧美大片| 午夜天堂精品久久久久| 日韩av一区二区在线影视| 亚洲黄色免费av| 国产999精品在线观看| 亚洲国产福利| 99精品综合| 先锋影音久久久| 久久福利影视| 岛国精品一区| 久久久五月天| 香蕉国产精品| 高清久久一区| jiujiure精品视频播放| 日韩超碰人人爽人人做人人添| 国产精东传媒成人av电影| 久久成人福利| 亚洲国产日韩欧美在线| 国产不卡人人| 亚洲日韩中文字幕一区| 国产免费av国片精品草莓男男| 美女精品一区二区| 精品91久久久久| 欧美视频久久| 国产精品激情| 国产伦理一区| 九九久久电影| 日韩中文字幕无砖| 日韩精品第二页| 美女一区网站| 日韩欧美激情| 亚洲福利专区| 嫩呦国产一区二区三区av| 综合五月婷婷| 亚洲国产一区二区在线观看| 精品国产乱码久久久久久1区2匹 | 视频一区视频二区中文| 理论片午夜视频在线观看| 日韩精品久久理论片| 99精品99| 国产精品三上| 麻豆精品av| 国产精品普通话对白| 国产aⅴ精品一区二区三区久久| 亚洲欧美视频一区二区三区| 国产乱码精品一区二区三区亚洲人| 亚洲福利专区| 伊人久久大香伊蕉在人线观看热v| 精品视频一区二区三区在线观看 | 91成人超碰| 国产aa精品| 精品视频97| 在线视频日韩| 国产色播av在线| 久久激情五月婷婷| 日韩在线a电影| 午夜在线一区| 99国产精品久久久久久久| 综合精品一区| 男女性色大片免费观看一区二区| 久久久久久免费视频| 91综合网人人| 国产激情久久| 国产精品夜夜夜| 国产精品亚洲成在人线| 欧美日韩国产一区二区在线观看| 中文无码久久精品| 一区二区国产在线| 亚洲aⅴ网站| 国产欧美综合一区二区三区| 欧美三级第一页| 国产一区 二区| 国产精品久久久久久久久久久久久久久| 色婷婷久久久| 国产农村妇女精品一区二区| 蜜桃视频一区二区三区在线观看| 亚洲精品在线国产| 精品淫伦v久久水蜜桃| 激情久久久久久| 久久久国产精品一区二区中文| 久久国产日韩欧美精品| 麻豆91在线播放| 国产美女视频一区二区| 久久精品国产精品亚洲毛片| 精品国产乱码| 欧美99久久| 午夜亚洲一区| 国产精品久久| 蜜桃av.网站在线观看| 亚洲国产不卡| 综合激情在线| 国产伦精品一区二区三区在线播放 | 麻豆国产在线| 亚洲成人精选| 99国产精品久久久久久久| 日本亚洲欧洲无免费码在线| 青草久久视频| 日韩av免费| 91久久在线| 欧美日韩在线播放视频| 日韩国产91| 亚洲播播91| 日韩av一区二区在线影视| 日韩欧美二区| 国产伦精品一区二区三区千人斩| 日韩国产专区| 成年男女免费视频网站不卡| 亚洲18在线| 中文字幕av亚洲精品一部二部 | 日韩av影院| 在线视频亚洲欧美中文| 国产精品99久久精品| 蜜乳av另类精品一区二区| 国产一区二区三区网| 欧美精品一区二区久久| 久久精品国产免费| 日韩国产在线一| 一区二区国产在线| 在线日韩中文| 国产一区二区三区不卡av| 国产日韩免费|