(转) QTP Scripting - 实践5
上一篇 /
下一篇 2008-12-20 12:00:37
/ 个人分类:QTP
针对论坛问题进行实战,在论坛寻找没有被解决的问题进行实战代码演练,问题如下
http://bbs.51testing.com/thread-119326-1-2.html
这里面问题的难点主要利用ado如何读取数据库大二进制流的数据,如何把图片插入到excel中
ado需要利用的方法: GetChunk
功能:
返回大型文本或二进制数据 Field 对象的全部或部分内容。
语法
variable = field.GetChunk( Size )
返回值
返回变体型。
参数
Size 长整型表达式,等于所要检索的字节或字符数。
说明
使用 Field 对象的 GetChunk 方法检索其部分或全部长二进制或字符数据。在系统内存有限的情况下,可使用 GetChunk 方法处理部分而非全部的长整型值。
GetChunk 调用返回的数据将赋给“变量”。如果 Size 大于剩余的数据,则 GetChunk 仅返回剩余的数据而无需用空白填充“变量”。如果字段为空,则 GetChunk 方法返回 Null。
每个后续的 GetChunk 调用将检索从前一次 GetChunk 调用停止处开始的数据。但是,如果从一个字段检索数据然后在当前记录中设置或读取另一个字段的值,ADO 将认为已从第一个字段中检索出数据。如果在第一个字段上再次调用 GetChunk 方法,ADO 将把调用解释为新的 GetChunk 操作并从记录的起始处开始读取。如果其他 Recordset 对象不是首个 Recordset 对象的副本,则访问其中的字段不会破坏 GetChunk 操作。
如果 Field 对象的 Attributes 属性中的 adFldLong 位设置为 True,则可以对该字段使用 GetChunk 方法。
如果在 Field 对象上使用 Getchunk 方法时没有当前记录,将产生错误 3021(无当前记录)。
解决问题代码:
sub main
save_pic
insert_Excel_pic
end sub
Sub Save_Pic()
Dim DcnNWind 'As ADODB.Connection
Dim rs 'As ADODB.Recordset
set DcnNWind=New ADODB.Connection
Set rs = New ADODB.Recordset
DcnNWind.CursorLocation = adUseClient
DcnNWind.Open "Provider=SQLOLEDB.1;Integrated Security=SSI;Persist Security Info=False;Initial
Catalog=CUSTOM;Data Source=SERVER"
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
rs.Open "CustomInfo", DcnNWind, , adCmdTable
rs.Move 第几行数据 '指针指向到第几行数据
Call BlobToFile (rs.Fields("Image"), "c:\windows\temp\tmp.bmp", rs.Fields("Image").ActualSize)
End Sub
Sub BlobToFile(fld , FileName, Optional ChunkSize )
Dim fnum , bytesLeft , bytes
Dim tmp() 'As Byte
If (fld.Attributes And adFldLong) = 0 Then
Err.Raise 1001, , "Field doesn't support the GetChunk method."
End If
If Dir$(FileName) <> "" Then Kill FileName
fnum = FreeFile
Open FileName For Binary As fnum
bytesLeft = fld.ActualSize
Do While bytesLeft
bytes = bytesLeft
If bytes > ChunkSize Then bytes = ChunkSize
tmp = fld.GetChunk(bytes)
Put #fnum, , tmp
bytesLeft = bytesLeft - bytes
Loop
Close #fnum
end sub
Sub insert_Excel_pic()
Set ōbjExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.Workbooks.Add
objExcel.Range("A1").Select
objExcel.ActiveSheet.Pictures.Insert("C:\a.bmp").Select
'处理Excel
set ōbjExcel=Nothing
End Sub
收藏
举报
TAG: