1,183
社区成员
发帖
与我相关
我的任务
分享
Private Sub UpdateItemPicture()
Dim sTmpPath As String
Dim sTmpFileName As String
Dim sFileName As String
Dim objZip As Object
Dim smFile As ADODB.Stream
Dim varFile As Variant
Dim cn As ADODB.Connection
Dim rs As Recordset
Dim strSql As String
Dim lCountX As Long
Dim lCountY As Long
Dim lOffset As Long
Dim lFileSize As Long
Dim bytChunk() As Byte
Dim bFlag As Boolean
sTmpPath = App.Path & "\temp\" '临时路径
sTmpFileName = App.Path & "\temp\temp.tmp" '临时文件路径
sFileName = "C:\ItemPicture\1042.bmp" '你的物料图片文件路径
If Dir(sFileName, vbNormal + vbHidden + vbSystem) <> "" Then '存在图片
If Dir(sTmpPath, vbDirectory) = "" Then '没有临时路径,创建一个临时路径
MkDir sTmpPath
End If
'将图片文件压缩到临时路径
Set objZip = CreateObject("KDZIP.ZIP")
objZip.Compress sFileName, sTmpFileName, 7
Set objZip = Nothing
'读取图片文件二进制流
Set smFile = New ADODB.Stream
smFile.Type = adTypeBinary
smFile.Open
smFile.LoadFromFile sTmpFileName
varFile = smFile.Read
Set smFile = Nothing
'先更新核算项目表标识某物料存在有图片的标记
cn.Execute "UPDATE t_Item SET FHavePicture = 1 WHERE FItemClassID = 4 AND FItemID
=1432"
'再读取某物料先插入的没有存储二进制流图片文件的附件记录,更新FData字段
strSql = "SELECT FData FROM t_accessory WHERE fitemid=1432"
Set rs = New ADODB.Recordset
With rs
.CursorLocation = adUseServer
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.ActiveConnection = cn
.Open strSql
End With
'最后进行二进制流字段更新
lOffset = 0
If Not IsNull(varFile) Then
lFileSize = LenB(varFile) - 1
Do While lOffset <= lFileSize
ReDim bytChunk(0 To 99) As Byte
For lCountY = lOffset To lOffset + 99
If lCountY > lFileSize Then
Exit For
End If
bytChunk(lCountY - lOffset) = varFile(lCountY)
Next
If lCountY > lFileSize Then
If (lCountY - lOffset - 1) Mod 2 = 0 Then '偶数
ReDim Preserve bytChunk(0 To lCountY - lOffset) As Byte
Else
ReDim Preserve bytChunk(0 To lCountY - lOffset - 1) As Byte
End If
Else
ReDim Preserve bytChunk(0 To lCountY - lOffset - 1) As Byte
End If
rs!FData.AppendChunk bytChunk()
lOffset = lOffset + conChunkSize
Loop
rs.Update
End If
rs.Close
Set rs = Nothing
Set cn = Nothing
End If
End Sub
var MS:TMemoryStream ;
begin
IF NOT ADOQuery3.Active THEN
BEGIN
MS:=TMemoryStream.Create ;
TRY
ADOQuery3.SQL.Text:='SELECT fdata FROM dbo.t_Accessory where fitemid=2579'
ADOQuery3.Open;
ms:=TMemoryStream(ADOQuery3.CreateBlobStream(ADOQuery3.FieldByName('fdata'),bmRead));
ms.SaveToFile('c:\ddd1.jpg');
Image1.Picture.LoadFromFile('c:\ddd1.jpg');
ADOQuery3.Close;
finally
MS.Free;
END;
end;
end;
var
ms: TMemoryStream;
begin
ms := TMemoryStream.Create;
ms.LoadFromFile('D:\delphi\szcb.zip');
UnZip2(ms);
ms.SaveToFile('D:\delphi\szcb2.mdb');
end;
Delphi解压。