成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:187日期: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 數據庫
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
婷婷激情综合网| 免费观看一级特黄欧美大片| 亚洲国产成人高清精品| 国模吧视频一区| 国产日韩欧美一区二区三区乱码| 国产精品一区二区久激情瑜伽| 久热精品视频| 亚洲6080在线| 国产精品三上| 亚洲欧美二区三区| 午夜日韩视频| 国产欧美日韩综合| 欧美一区影院| 久久久国产精华| 福利电影一区二区| 日韩手机在线导航| 粉嫩高潮美女一区二区三区 | 91国产成人在线| 五月开心婷婷久久| 久久精品电影| 午夜精品久久久久久久99樱桃| 在线亚洲观看| 一区二区三区国产精华| 亚洲国产婷婷| 一二三区精品视频| 99精品国产一区二区青青牛奶| 国产精品高潮呻吟| 亚洲视频高清| 亚洲欧洲成人自拍| 亚洲另类自拍| 艳妇臀荡乳欲伦亚洲一区| 夜久久久久久| 亚洲mv大片欧洲mv大片精品| 蜜桃视频一区| 秋霞午夜鲁丝一区二区老狼| 91搞黄在线观看| 久久99九九99精品| 欧美日韩国产高清一区二区三区| 紧缚奴在线一区二区三区| 制服丝袜av成人在线看| 国产福利精品一区二区| 日韩你懂的在线观看| av不卡免费电影| 国产欧美精品一区二区三区四区| 激情另类综合| 一区二区三区久久久| 亚洲一区久久| 日本中文字幕一区二区视频| 欧美色图一区二区三区| 九一久久久久久| 91精品国产高清一区二区三区蜜臀 | 日日摸夜夜添夜夜添精品视频| 久久国产精品久久久久久电车 | 美女网站在线免费欧美精品| 69堂成人精品免费视频| 成人晚上爱看视频| 欧美高清一级片在线观看| 亚洲精品资源| 免费成人美女在线观看| 日韩午夜小视频| 欧美特黄一区| 午夜视频在线观看一区二区| 欧美日韩国产一区二区三区地区| 国产成人免费视频一区| 久久综合色之久久综合| 国产精品mm| 亚洲va欧美va人人爽午夜| 7777精品伊人久久久大香线蕉 | 日韩一区欧美一区| 久久久亚洲人| 国产精品影音先锋| 国产欧美一区在线| 国产午夜精品一区二区三区欧美| 蜜臀av性久久久久蜜臀aⅴ| 欧美刺激午夜性久久久久久久 | 欧美放荡的少妇| 色综合久久中文综合久久97| 一区二区三区四区在线播放 | 久久99精品久久只有精品| 欧美mv日韩mv| 亚洲区第一页| 男男gaygay亚洲| 久久久久久久综合日本| 亚洲一区欧美激情| 懂色av一区二区三区免费观看| 亚洲视频图片小说| 欧美怡红院视频| aa级大片欧美| 亚洲午夜影视影院在线观看| 欧美一区二区三区四区视频| 亚洲大胆在线| 韩国在线一区二区| 国产精品人成在线观看免费| 欧洲一区在线观看| 国产精品扒开腿做爽爽爽软件| 奇米色777欧美一区二区| 久久久99精品免费观看| 色诱亚洲精品久久久久久| a美女胸又www黄视频久久| 亚洲成人av一区| 精品国产一区二区三区久久久蜜月 | 亚洲另类自拍| 成人性生交大片免费看中文| 亚洲日本在线天堂| 777奇米四色成人影色区| 最新日韩欧美| 国产精品一二三| 亚洲老妇xxxxxx| 69成人精品免费视频| 国产精品日本欧美一区二区三区| 成人黄色电影在线| 丝袜亚洲另类欧美| 国产精品日韩精品欧美在线| 制服丝袜成人动漫| 国产伦精品一区二区三区视频黑人| 成人性生交大片免费看视频在线 | 手机精品视频在线观看| 久久久综合九色合综国产精品| 国产日韩高清一区二区三区在线| 成人福利视频网站| 日韩精品乱码av一区二区| 国产精品乱码一区二区三区软件| 欧美日韩国产另类不卡| 在线综合视频| 99久久精品国产网站| 免费成人在线观看| 综合精品久久久| 欧美videos大乳护士334| 色综合久久久久网| 亚洲网站视频| 不卡电影免费在线播放一区| 日本不卡视频一二三区| 亚洲日本免费电影| 亚洲精品一区二区在线观看| 欧美色综合天天久久综合精品| 国产精品视频免费一区| 欧美在线免费| 国产成人aaa| 轻轻草成人在线| 亚洲精品国产无天堂网2021| 久久精品一区二区三区四区| 欧美日韩精品一区二区在线播放| 国产日韩亚洲| 欧美区高清在线| 不卡高清视频专区| 国产精品一色哟哟哟| 蜜乳av一区二区| 亚洲激情网站免费观看| 精品久久久久久久久久久久久久久久久| 色噜噜狠狠色综合欧洲selulu| 黄色av成人| 成人久久18免费网站麻豆| 麻豆成人久久精品二区三区小说| 亚洲国产aⅴ成人精品无吗| 国产精品盗摄一区二区三区| 国产欧美一区二区在线观看| 精品国产免费视频| 91精品欧美综合在线观看最新| 久久视频一区| 亚洲一区二区三区四区中文| 亚洲激情网站| 黑丝一区二区三区| 91亚洲精品久久久蜜桃| 国产激情精品久久久第一区二区| 久久成人综合网| 午夜精品一区二区三区免费视频| 亚洲一区视频在线观看视频| 亚洲区小说区图片区qvod| 国产精品电影一区二区三区| 国产精品电影院| 亚洲人成网站在线| 日韩美女久久久| 亚洲色图清纯唯美| 亚洲欧洲综合另类在线| 《视频一区视频二区| 国产精品久99| 日韩一区在线看| 亚洲激情校园春色| 日韩理论片网站| 亚洲欧美一区二区三区极速播放| 国产精品传媒视频| 亚洲视频一区二区在线观看| 亚洲视频免费观看| 一个色妞综合视频在线观看| 亚洲乱码国产乱码精品精小说| 亚洲视频每日更新| 亚洲综合区在线| 香蕉久久夜色精品国产使用方法 | 成人一区二区视频| 成人永久看片免费视频天堂| 国产成人久久精品77777最新版本| 国产精品888| 成人aaaa免费全部观看| av电影一区二区| 好吊一区二区三区| 国产精品一区视频| 久久九九免费| 欧美性猛片aaaaaaa做受| 欧美理论电影在线| 精品裸体舞一区二区三区|