⑴ adodb.stream是做什麼的
關於Adodb.Stream 的使用說明
組件:"Adodb.Stream"
有下列方法:
Cancel 方法
使用方法如下
Object.Cancel
說明:取消執行掛起的非同步 Execute 或 Open 方法的調用。
Close 方法
使用方法如下
Object.Close
:關閉對像
CopyTo 方法
使用方法如下
Object.CopyTo(destStream,[CharNumber])
說明:將對像的數據復制,destStream指向要復制的對像,CharNumber為可選參數,指要復制的位元組數,不選為全部復制。
Flush 方法
使用方法如下
Object.Flush
說明:
LoadFromFile 方法
使用方法如下
Object.LoadFromFile(FileName)
說明:將FileName指定的文件裝入對像中,參數FileName為指定的用戶名。
Open 方法
使用方法如下
Object.Open(Source,[Mode],[Options],[UserName],[Password])
說明:打開對像,
參數說明:Sourece 對像源,可不指定
Mode 指定打開模式,可不指定,可選參數如下:
adModeRead =1
adModeReadWrite =3
adModeRecursive =4194304
adModeShareDenyNone =16
adModeShareDenyRead =4
adModeShareDenyWrite =8
adModeShareExclusive =12
adModeUnknown =0
adModeWrite =2
Options 指定打開的選項,可不指定,可選參數如下:
adOpenStreamAsync =1
adOpenStreamFromRecord =4
adOpenStreamUnspecified=-1
UserName 指定用戶名,可不指定。
Password 指定用戶名的密碼
Read 方法
使用方法如下:
Object.Read(Numbytes)
說明:讀取指定長度的二進制內容。
參數說明:Numbytes指定的要讀取的找度,不指定則讀取全部。
ReadText 方法
使用方法如下:
Object.ReadText(NumChars)
說明:讀取指定長度的文本
參數說明:NumChars指定的要讀取的找度,不指定則讀取全部。
SaveToFile 方法
使用方法如下:
Object.SaveToFile(FileName,[Options])
說明:將對像的內容寫到FileName指定的文件中
參數說明:FileName指定的文件
Options 存取的選項,可不指定,可選參數如下:
adSaveCreateNotExist =1
adSaveCreateOverWrite =2
SetEOS 方法
使用方法如下:
Object.setEOS()
說明:
SkipLine 方法
使用方法如下:
Object.SkipLine()
說明:
Write 方法
使用方法如下:
Object.Write(Buffer)
說明:將指定的數據裝入對像中。
參數說明:Buffer 為指定的要寫入的內容。
WriteText 方法
使用方法如下:
Object.Write(Data,[Options])
說明:將指定的文本數據裝入對像中。
參數說明:Data 為指定的要寫入的內容。
Options 寫入的選項,可不指定,可選參數如下:
adWriteChar =0
adWriteLine =1
有下列屬性:
Charset
EOS 返回對像內數據是否為空。
LineSeparator 指定換行格式,可選參數有
adCR =13
adCRLF =-1
adLF =10
Mode 指定或返加模式。
Position 指定或返加對像內數據的當前指針。
Size 返回對像內數據的大小。
State 返加對像狀態是否打開。
Type 指定或返回的數據類型,可選參數為:
adTypeBinary =1
adTypeText =2
用了6行代碼實現了無組件上傳:
strFileName = Request.QueryString("file1")
Set objstream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1 ' adTypeBinary
objStream.Open
objStream.LoadFromFile strFileName
objStream.SaveToFile Server."123_onweb.gif",2
使用方法:
把上面的代碼寫成upload.asp
在瀏覽器裡面輸入:
http://XXX/upload.asp?file1=c:\上傳文件\123.gif
XXX為你的主機地址
執行完後你會看到你的目錄下面多了一個123_onweb.gif
他就是你要文件拉!!!!
根據原理我們可以擴展以下代碼:
upload.asp文件
<%
Function GetFileName(ByVal strFile)
If strFile <> "" Then
GetFileName = mid(strFile,InStrRev(strFile, "\")+1)
Else
GetFileName = ""
End If
End function
strFileName = Request.Form("file1")
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1 ' adTypeBinary
objStream.Open
objStream.LoadFromFile strFileName
objStream.SaveToFile Server.MapPath(GetFileName(strFileName)),2
objStream.Close
%>
upload.htm文件
<form name="FORM" action="upload.asp" method="post">
<input type="submit" name="submit" value="OK">
<input type="file" name="file1" style="width:400" value="">
</form>
讀文件不想用FSO,有的空間不支持。
有一個LoadFromFile的方法。可以讀取文件。
下面是我的代碼。
function readfile(URL,chartype)
set srmObj = server.CreateObject("adodb.stream")
srmObj.type=1
srmObj.mode=3
srmObj.open
srmObj.Position=0
srmObj.LoadFromFile URL
srmObj.Position = 0
srmObj.type=2
srmObj.charset=chartype
readfile=srmObj.readtext()
end function
兩個參數。URL是文件的路徑,好像只能絕對路徑。chartype是文件以什麼編碼存放的。
返回一個字元串,存放文件的內容。
這個函數只能讀文本文件。讀二進制文件也差不多。要用的人可以自己改
< = src="/article/js/c9.js"> 基於adodb.stream的文件操作類
<%
』*************************************************************
』轉發時請保留此聲明信息,這段聲明不並會影響你的速度!
』*************************************************************
』*************************************************************
』@author: 面條
』@realname: 徐仁祿
』@email: [email protected]
』@QQ: 55547082
』@Homepage: http://www.ksdn.net
』@版權申明:
』 非盈利性質團體或者個人可以免費使用.
』*************************************************************
』*************************************************************
』 類名稱: files
』 類功能: 實現文件讀寫功能,利用adodb.stream實現,在不支持fso的主機上也可以讀寫文件.
』*************************************************************
class files
private adSaveCreateOverWrite 』創建文件的時候可以覆蓋已經存在的文件.
private adSaveCreateNotExist 』保存文件的時候如果文件不存在,可以創建文件.
』*************************************************************
』 事件名稱: Class_Initialize()
』 事件發生條件: 類創建時候產生該事件
』 事件內容: 給私有變數賦值
』 事件傳入參數: 無
』*************************************************************
sub Class_Initialize()
adSaveCreateOverWrite =2
adSaveCreateNotExist = 1
end sub
』*************************************************************
』 函數名稱: function readfile(filepath)
』 函數內容: 讀出文件
』 傳入參數: filepath:要讀的文件的絕對路徑
』 返回參數: 要讀的文件的內容.
』*************************************************************
function readfile(filepath)
on error resume next
dim stm2
set stm2 =server.createobject("ADODB.Stream")
stm2.Charset = "gb2312"
stm2.Open
stm2.LoadFromFile filepath
readfile = stm2.ReadText
end function
』*************************************************************
』 函數名稱: function writefile(filepath,str)
』 函數內容: 寫入文件
』 傳入參數: filepath:要讀的文件的絕對路徑
』 str: 要寫入的內容
』 返回參數: 無返回
』*************************************************************
function writefile(filepath,str)
on error resume next
Set stm = server.createobject("ADODB.Stream")
stm.Charset = "gb2312"
stm.Open
stm.WriteText str
stm.SaveToFile filepath, adSaveCreateOverWrite
end function
』*************************************************************
』 函數名稱: function (filepath_s,filepath_d)
』 函數內容: 讀出文件
』 傳入參數: filepath_d:目的文件的絕對路徑
』 filepath_s:源文件路徑
』*************************************************************
function (filepath_s,filepath_d)
on error resume next
dim stm2
set stm2 =server.createobject("ADODB.Stream")
stm2.Charset = "gb2312"
stm2.Open
stm2.LoadFromFile filepath_s
stm2.SaveToFile filepath_d, adSaveCreateOverWrite
end function
end class
利用Adodb.Stream直接下載文件
在瀏覽器的地址欄里直接輸入一個doc或xls或jpg的文件的url路徑,那麼該文件會直接顯示在瀏覽器里
。而在很多時候我們希望能直接彈出下載提示框讓用戶下載,我們該怎麼辦呢?這里有兩種方法:
1、設置你的伺服器的iis,給doc等後綴名做映射
2、在向客戶端發送時設置其contenttype
下面詳細說明方法2
程序代碼:
_code style="DISPLAY: none" name="html_code"><%
Response.Buffer = true
Response.Clear
dim url
Dim fso,fl,flsize
dim Dname
Dim objStream,ContentType,flName,isre,url1
'*********************************************調用時傳入的下載文件名
Dname=trim(request("n"))
'******************************************************************
If Dname<>"" Then
'******************************下載文件存放的服務端目錄
url=server.MapPath("/")&"\"&Dname
'***************************************************
End If
Set fso=Server.CreateObject("Scripting.FileSystemObject")
Set fl=fso.getfile(url)
flsize=fl.size
flName=fl.name
Set fl=Nothing
Set fso=Nothing
%>
<%
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile url
Select Case lcase(Right(flName, 4))
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
ContentType = "application/zip"
Case ".xls"
ContentType = "application/vnd.ms-excel"
Case ".gif"
ContentType = "image/gif"
Case ".jpg", "jpeg"
ContentType = "image/jpeg"
Case ".wav"
ContentType = "audio/wav"
Case ".mp3"
ContentType = "audio/mpeg3"
Case ".mpg", "mpeg"
ContentType = "video/mpeg"
Case ".rtf"
ContentType = "application/rtf"
Case ".htm", "html"
ContentType = "text/html"
Case ".txt"
ContentType = "text/plain"
Case Else
ContentType = "application/octet-stream"
End Select
Response.AddHeader "Content-Disposition", "attachment; filename=" & flName
Response.AddHeader "Content-Length", flsize
Response.Charset = "UTF-8"
Response.ContentType = ContentType
Response.BinaryWrite objStream.Read
Response.Flush
response.Clear()
objStream.Close
Set objStream = Nothing
%>
_lightcode style="BORDER-RIGHT: #999999 1px dotted; PADDING-RIGHT: 5px; BORDER-TOP: #999999
1px dotted; PADDING-LEFT: 5px; FONT-SIZE: 11px; PADDING-BOTTOM: 5px; BORDER-LEFT: #999999
1px dotted; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dotted; FONT-FAMILY: sans-serif;
HEIGHT: 40px; BACKGROUND-COLOR: #f9f9f9" name="html_lightcode"><%
Response.Buffer = true
Response.Clear
dim url
Dim fso,fl,flsize
dim Dname
Dim objStream,ContentType,flName,isre,url1
'*********************************************調用時傳入的下載文件名
Dname=trim(request("n"))
'******************************************************************
If Dname<>"" Then
'******************************下載文件存放的服務端目錄
url=server.MapPath("/")&"\"&Dname
'***************************************************
End If
Set fso=Server.CreateObject("Scripting.FileSystemObject")
Set fl=fso.getfile(url)
flsize=fl.size
flName=fl.name
Set fl=Nothing
Set fso=Nothing
%>
<%
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile url
Select Case lcase(Right(flName, 4))
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
ContentType = "application/zip"
Case ".xls"
ContentType = "application/vnd.ms-excel"
Case ".gif"
ContentType = "image/gif"
Case ".jpg", "jpeg"
ContentType = "image/jpeg"
Case ".wav"
ContentType = "audio/wav"
Case ".mp3"
ContentType = "audio/mpeg3"
Case ".mpg", "mpeg"
ContentType = "video/mpeg"
Case ".rtf"
ContentType = "application/rtf"
Case ".htm", "html"
ContentType = "text/html"
Case ".txt"
ContentType = "text/plain"
Case Else
ContentType = "application/octet-stream"
End Select
Response.AddHeader "Content-Disposition", "attachment; filename=" & flName
Response.AddHeader "Content-Length", flsize
Response.Charset = "UTF-8"
Response.ContentType = ContentType
Response.BinaryWrite objStream.Read
Response.Flush
response.Clear()
objStream.Close
Set objStream = Nothing
%>
_sunny.gif" width=0 onload=show(this)>
⑵ 請問如何用ASP讀取ini配置文件
假設你用scripting.filesystemobject或者adodb.stream組件來讀文件內容
那麼判斷ip 和 name 的值是是要寫很復雜的東西,而且效率也不高。
那麼怎麼解決這個問題呢?
建議你用xml
把system.ini改寫為system.xml
如下:
<system>
<ip name=123 >192.168.0.1</ip>
</system>
通過xmldom的讀數節點,就很容易實現。
'創建DOM對象
set objDom=server.CreateObject("MicroSoft.XMLDom")
'取得XML數據
objDom.load(Server.Mapth("system.xml"))
set objtofind=objdom.documentElement.SelectSingleNode("//system/ip")
'取出這個節點對象的 節點名,節點值,某個屬性值,和全部的XML
nodename=objtofind.nodename
nodevalue=objtofind.text
objtofind.GetAttributeNode("name").NodeValue '屬性名為name的屬性值
'取出一個屬性節點對象
set objattrtofind=objdom.documentElement.SelectSingleNode("//system/ip"). GetAttributeNode("name")
'取出這個節點的屬性名,屬性值
nodeattrname=objattrtofind.nodename
nodeattrvalue=objattrtofind.nodevalue
遍歷這個集合
for each element in objnodes
response.write element.nodename
response.write element.text
next
不管你system下有多少子類,都可以讀出來,你只要按xml格式寫
⑶ 如何在多個文件夾下的多個txt文件中查找某字元串
使用Adodb.Stream讀取文件,instr或者正則(RegExp)查找,Adodb.Stream網上很多介紹,相當好用,好幾兆的文本瞬間讀完。
⑷ 如何才能往資料庫里讀取圖片數據或者從資料庫里讀圖片
摘 要 本文以VB6與Access97作為開發工具,介紹了圖像在資料庫中的存儲與顯示技術。
關鍵詞 資料庫,數據控制項,二進制,圖像存儲,圖像顯示,ADODB,Recordset
資料庫是數據管理的最新技術,是計算機科學的重要分支,是現代計算機信息系統和計算機應用的基礎和核心。在科學技術高速發展的今天,在信息資源無處不在、無處不用,已成為各部門的重要財富的時候,對於從事程序開發的人員來說顯得尤為重要。
如今,對資料庫的操作不僅僅滿足於對字元和數字的單一操作,圖像的存儲與顯示已顯得尤為重要。下面作者將以VB6.0與Access97作為開發工具,分別介紹兩種圖像顯示與存儲的方法。
利用數據控制項和數據綁定控制項
利用這種方法,不寫或寫少量代碼就可以構造簡單的資料庫應用程序,這種方法易於被初學者接受。在舉例之前,先把數據綁定功能簡要的說明一下,凡是具有DataSource屬性的控制項都是對數據敏感的,它們都能通過數據控制項直接使用資料庫里的數據。比如CheckBox Control , ComboBox Comtrol , TextBox Comtrol , PictureBox Control ,Image Comtrol … 因為這種方式涉及到的知識點比較少,也比較容易理解,不多作說明,現直接介紹編程步驟。
1、從資料庫中顯示所需要的圖片
首先,添加一個Data數據控制項,設置它的DatabaseName和RecordSource屬性,
strPath = App.Path
If Right(strPath, 1) <> "\" Then
strPath = strPath & "\"
MyData.DatabaseName = strPath & "ExampleDB.mdb" '資料庫存地址
MyData.RecordSource = "Info" '表名
第二步,添加Image控制項用來顯示圖片,設置它的DataSource和DataField屬性。例如本例中: Image1.DataSource="MyData"和Image1.DataField=" MyPhoto" 。然後設置其它具有數據綁定功能的控制項用來顯示所要的其它內容,經過這兩步的操作,運行程序就可以顯示你要的數據了。
2、向資料庫中添加需要存儲的圖片
首先,利用數據控制項所具有的AddNew屬性,添加一個按鈕,雙擊後添加如下代碼MyData.Recordset.AddNew
第二步,為Image控制項圖片指定圖片路徑Image1.Picture = LoadPicture("圖片路徑"),經過這兩步的操作,就可以向資料庫中添加圖片了。
這種方法最簡單快捷,要寫的代碼量很少。但是這種方法在運行速度和靈活性方面有一定的限制,適合於初學者和一些簡單的應用,要想靈活多變的顯示圖像,下面介紹的方法或許更適應您的要求。
利用編寫代碼實現圖片的存儲與顯示
這種方法相對於方法一來說,代碼量大,但是它操作靈活,能夠滿足多樣形式下的操作,受到更多編程者的青睞。但是涉及到的知識面相對要多一些,不僅要掌握資料庫的操作方法,還要二進制文件的讀寫作進一步的了解。關於資料庫及二進制文件的基本操作很多參考書上都介紹的比較詳細,需要時請查閱即可。在編程之前把本部分用到的變數說明如下:
Dim RS As New ADODB.Recordset
Dim Chunk() As Byte
Const ChunkSize As Integer = 2384
Dim DataFile As Integer, Chunks, Fragment As Integer
Dim MediaTemp As String
Dim lngOffset, lngTotalSize As Long
Dim i As Integer
1、從資料庫中顯示所需要的圖片
第一步首先打開資料庫,看有沒有要查找的內容,有則繼續執行,沒有就退出
RS.Source = "select * from Info Where Name='" & sparaName &"';"
RS.ActiveConnection = "UID=;PWD=;DSN=TestDB;"
RS.Open
If RS.EOF Then RS.cCose : Exit Sub
第二步,讀出長二進制數據即圖片數據,把它轉換成圖片文件,操作過程如下
MediaTemp = strPath & "picturetemp.tmp"
DataFile = 1
Open MediaTemp For Binary Access Write As DataFile
lngTotalSize = RS!MyPhoto.ActualSize
Chunks = lngTotalSize \ ChunkSize
Fragment = lngTotalSize Mod ChunkSize
ReDim Chunk(Fragment)
Chunk() = RS!MyPhoto.GetChunk(Fragment)
Put DataFile, , Chunk()
For i = 1 To Chunks
ReDim Chunk(ChunkSize)
Chunk() = RS!MyPhoto.GetChunk(ChunkSize)
Put DataFile, , Chunk()
Next i
Close DataFile
第三步,關閉資料庫,這樣就可以顯示所要的圖片了。
RS.Close
If MediaTemp = "" Then Exit Sub
Picture1.Picture = LoadPicture(MediaTemp)
If Picture1.Picture = 0 Then Exit Subj
2、向資料庫中添加需要存儲的圖片
向資料庫添加存儲的圖片是顯示圖片逆過程,只要掌握了顯示圖片的操作,存儲圖片的操作也就迎刃而解了,下面將操作步驟介紹如下
第一步首先打開資料庫,過程如下:
RS.Source = "select * from Info ;"
RS.CursorType = adOpenKeyset
RS.LockType = adLockOptimistic
RS.ActiveConnection = "UID=;PWD=;DSN=TestDB;"
RS.Open
第二步,把要存儲的圖片轉換成二進制長文件存入資料庫中,操作過程如下
RS.AddNew
DataFile = 1
Open strPathPicture For Binary Access Read As DataFile
FileLen = LOF(DataFile) ' 文件中數據長度
If FileLen = 0 Then : Close DataFile : RS.Close : Exit Sub
Chunks = FileLen \ ChunkSize
Fragment = FileLen Mod ChunkSize
ReDim Chunk(Fragment)
Get DataFile, , Chunk()
RS!MyPhoto.AppendChunk Chunk()
ReDim Chunk(ChunkSize)
For i = 1 To Chunks
Get DataFile, , Chunk()
RS!MyPhoto.AppendChunk Chunk()
Next i
Close DataFile
第三步,更新紀錄後,關閉資料庫,就完成了數據圖片到資料庫的存儲。
RS.Update
RS.Close
Set RS = Nothing
兩種方法在使用方面各有所長,讀者可以針對自己的情況做出合理的選擇。
方法很容易實現的.和樓上的不太一樣.
謝謝啊~