'将图片写到数据库
Public Sub SubPicToDb(strDB As String, strField As String, sqlCon As String, strFileName As String)
Dim adoStream As New ADODB.Stream
Dim strCon As String
On Error GoTo ErrToDB
Set pRst = New ADODB.Recordset
strCon = "select " & strField & " from " & strDB & " where " & sqlCon
pRst.Open strCon, pConn, adOpenKeyset, adLockOptimisticadoStream.Type = adTypeBinary
adoStream.Open
adoStream.LoadFromFile strFileName
pRst(strField).AppendChunk adoStream.Read
pRst.UpdatepRst.Close
adoStream.Close
Set adoStream = Nothing
Set pRst = Nothing
Exit Sub
ErrToDB:
MsgBox Err.Description, vbOKOnly + vbExclamation, "提示"
End Sub'从数据库中提取二进制数据
Public Sub SubDbToPic(strDB As String, strField As String, sqlCon As String, objPic As Object)
Dim adoStream As New ADODB.StreamDim strCon As String
Dim strFileName As String
Dim TempFileName As String
On Error GoTo ErrRTF
Set pRst = New ADODB.Recordset
TempFileName = App.Path & "\TempFile.tmp"
strCon = "select " & strField & " from " & strDB & " where " & sqlCon
adoStream.Type = adTypeBinary
adoStream.Open
pRst.Open strCon, pConn, adOpenDynamic, adLockPessimistic
'If pRst.RecordCount > 0 Then
adoStream.Write pRst(strField).GetChunk(pRst(strField).ActualSize)
adoStream.SaveToFile TempFileName, IIf(Len(Trim(Dir(TempFileName, vbNormal + vbHidden))) > 0, adSaveCreateOverWrite, adSaveCreateNotExist)
objPic.Picture = LoadPicture(TempFileName)Kill TempFileName
'End If
pRst.Close
adoStream.Close
Set adoStream = Nothing
Set pRst = Nothing
Exit Sub
ErrRTF:
If pRst.State = adStateOpen Then pRst.Close
If adoStream.State = adStateOpen Then adoStream.Close
Set pRst = Nothing
Set adoStream = Nothing
End Sub
Public Sub Input_file(ByVal RS As Recordset, ByVal fieldname As String, ByVal Yourfilename As String)
'注:Yourfilename ,你要要存入数据库的文件名
Dim f As Integer
Dim b() As Byte
Dim conSize As Long
Dim lngOffset As Long
Dim lngLogoSize As Long
Dim varLogo As Variant
Dim varChunk As Variant
Dim l As Long
If Dir(Yourfilename) = "" Or Yourfilename = "" Then
RS.Fields(fieldname) = Null
Exit Sub
Else
f = FreeFile
Open Yourfilename For Binary As #f
lngLogoSize = LOF(f) ' long of file
lngOffset = 0 ' Reset offset.
conSize = 1000000 '1MB
If lngLogoSize < conSize Then
b = InputB(lngLogoSize, #f)
RS.Fields(fieldname).AppendChunk b
Else
l = lngLogoSize
Do While l > conSize
b = InputB(conSize, #f)
RS.Fields(fieldname).AppendChunk b
l = l - conSize
Loop
b = InputB(l, #f)
RS.Fields(fieldname).AppendChunk b
End If
Close #f
End If
End Sub
Sub SavePictureToAdodc(rs As ADODB.Recordset, ByVal FileName As String)
Dim Length As Long, f As Integer
Length = FileLen(FileName)
ReDim bArray(Length + 12) As Byte, bArray2(Length) As Byte
bArray(0) = &H6C: bArray(1) = &H74
RtlMoveMemory bArray(4), Length, 4
f = FreeFile
Open FileName For Binary As #f
Get #f, , bArray2
Close #1
RtlMoveMemory bArray(8), bArray2(0), Length
rs("相片").AppendChunk bArray
End Sub
调用:
Private Sub Label2_Click()
On Error Resume NextWith CommonDialog1
.CancelError = True
.ShowOpen
If Err.Number <> cdlCancel Then Image2.Picture = LoadPicture(.FileName)
SavePictureToAdodc Adodc1.Recordset, .FileNameEnd If
End WithEnd Sub