'保存图片 Public Sub WritePic(isql As String, picstr As String, ifield As String) 'isql:sql语句 picstr:写入图片路径(如c:\1.bmp) ifield :图像字段名 Dim Stm As ADODB.Stream Dim Rs As ADODB.Recordset Set Stm = New ADODB.Stream With Stm .Type = adTypeBinary .Open .LoadFromFile picstr End With Set Rs = New ADODB.Recordset With Rs .Open isql, cn, adOpenKeyset, adLockOptimistic 'cn为数据源 .Fields(ifield) = Stm.Read .Update End With Rs.Close Stm.Close Set Stm = Nothing Set Rs = noting End Sub '读取图片 Public Sub ReadPic(isql As String, picstr As String, ifield As String) Dim Stm As ADODB.Stream Dim Rs As ADODB.Recordset Set Rs = New ADODB.Recordset Rs.Open isql, cn, adOpenKeyset, adLockReadOnly
Set Stm = New ADODB.Stream With Stm .mode = adModeReadWrite .Type = adTypeBinary .Open .Write Rs(ifield) .SaveToFile picstr End With Rs.Close Stm.Close Set Rs = Nothing Set Stm = Nothing End Sub
Dim cnnImage As New ADODB.Connection Dim rsImage As New ADODB.Recordset Dim strSql As StringDim Chunk() As Byte Dim lngLengh As Long Dim intChunks As Integer Dim intFragment As Integer Const ChunkSize = 1000 Const lngDataFile = 1 Private Sub cmdBrowse_Click() '选择 JPG OR Bmp 文件 On Error Resume Next With cmdlFilePath .Filter = "JPG Files|*.JPG|Bitmaps|*.BMP|*.doc|*.*" .ShowOpen txtFilePath.Text = .FileName End With End Sub Private Sub cmdExit_Click() End End Sub Private Sub cmdLast_Click() On Error Resume Next rsImage.MoveLast Call ShowPic End Sub Private Sub cmdNext_Click() On Error Resume Next rsImage.MoveNext Call ShowPic End Sub Private Sub cmdPrev_Click() On Error Resume Next rsImage.MovePrevious Call ShowPic End Sub Private Sub cmdSave_Click() '保存文件到数据库中 If Trim(txtFilePath.Text) = "" Then MsgBox "未选择文件.!!", vbInformation + vbSystemModal, "保存出错" Exit Sub End If If (Dir(Trim(txtFilePath.Text)) = "") Then Exit Sub '以二进制方式打开文件 Open Trim(txtFilePath.Text) For Binary Access Read As lngDataFile lngLengh = LOF(lngDataFile) ' 文件大小 If lngLengh = 0 Then Close lngDataFile: Exit Sub intChunks = lngLengh \ ChunkSize intFragment = lngLengh Mod ChunkSize '新建记录 rsImage.AddNew MsgBox rsImage.RecordCount ReDim Chunk(intFragment) Get lngDataFile, , Chunk() rsImage!picImage.AppendChunk Chunk() ReDim Chunk(ChunkSize) For I = 1 To intChunks Get lngDataFile, , Chunk() rsImage!picImage.AppendChunk Chunk() Next I rsImage.Update Close lngDataFile Call ShowPic End Sub Private Sub cmdFirst_Click() On Error Resume Next rsImage.MoveFirst Call ShowPic End Sub Private Sub Form_Load() rsImage.LockType = adLockOptimistic rsImage.CursorType = adOpenKeyset cnnImage.Provider = "Microsoft.Jet.OLEDB.4.0" strSql = App.Path & "\Image.mdb" cnnImage.Open strSql strSql = "Select * From ImageStore" rsImage.Open strSql, cnnImage If (rsImage.BOF = True) And (rsImage.EOF = True) Then Exit Sub Call cmdFirst_Click End Sub Public Sub ShowPic() On Error Resume Next Open "pictemp" For Binary Access Write As lngDataFile lngLengh = rsImage!picImage.ActualSize intChunks = lngLengh \ ChunkSize intFragment = lngLengh Mod ChunkSize ReDim Chunk(intFragment) Chunk() = rsImage!picImage.GetChunk(intFragment) Put lngDataFile, , Chunk() For I = 1 To intChunks ReDim Buffer(ChunkSize) Chunk() = rsImage!picImage.GetChunk(ChunkSize) '建立图片临时文件 Put lngDataFile, , Chunk() Next I Close lngDataFile FileName = "pictemp" 'Picture1.Picture = LoadPicture(FileName) RichTextBox1.LoadFile FileName End Sub
Public Sub WritePic(isql As String, picstr As String, ifield As String)
'isql:sql语句 picstr:写入图片路径(如c:\1.bmp) ifield :图像字段名
Dim Stm As ADODB.Stream
Dim Rs As ADODB.Recordset
Set Stm = New ADODB.Stream
With Stm
.Type = adTypeBinary
.Open
.LoadFromFile picstr
End With
Set Rs = New ADODB.Recordset
With Rs
.Open isql, cn, adOpenKeyset, adLockOptimistic 'cn为数据源
.Fields(ifield) = Stm.Read
.Update
End With
Rs.Close
Stm.Close
Set Stm = Nothing
Set Rs = noting
End Sub
'读取图片
Public Sub ReadPic(isql As String, picstr As String, ifield As String)
Dim Stm As ADODB.Stream
Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset
Rs.Open isql, cn, adOpenKeyset, adLockReadOnly
Set Stm = New ADODB.Stream
With Stm
.mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write Rs(ifield)
.SaveToFile picstr
End With
Rs.Close
Stm.Close
Set Rs = Nothing
Set Stm = Nothing
End Sub
你这给的是什么啊?晕了
这个具体过程怎么个解法?~!
一般其他程序员会用什么方法解决的?
下不了啊
Dim rsImage As New ADODB.Recordset
Dim strSql As StringDim Chunk() As Byte
Dim lngLengh As Long
Dim intChunks As Integer
Dim intFragment As Integer
Const ChunkSize = 1000
Const lngDataFile = 1
Private Sub cmdBrowse_Click()
'选择 JPG OR Bmp 文件
On Error Resume Next
With cmdlFilePath
.Filter = "JPG Files|*.JPG|Bitmaps|*.BMP|*.doc|*.*"
.ShowOpen
txtFilePath.Text = .FileName
End With
End Sub
Private Sub cmdExit_Click()
End
End Sub
Private Sub cmdLast_Click()
On Error Resume Next
rsImage.MoveLast
Call ShowPic
End Sub
Private Sub cmdNext_Click()
On Error Resume Next
rsImage.MoveNext
Call ShowPic
End Sub
Private Sub cmdPrev_Click()
On Error Resume Next
rsImage.MovePrevious
Call ShowPic
End Sub
Private Sub cmdSave_Click()
'保存文件到数据库中
If Trim(txtFilePath.Text) = "" Then
MsgBox "未选择文件.!!", vbInformation + vbSystemModal, "保存出错"
Exit Sub
End If
If (Dir(Trim(txtFilePath.Text)) = "") Then Exit Sub
'以二进制方式打开文件
Open Trim(txtFilePath.Text) For Binary Access Read As lngDataFile
lngLengh = LOF(lngDataFile) ' 文件大小
If lngLengh = 0 Then Close lngDataFile: Exit Sub
intChunks = lngLengh \ ChunkSize
intFragment = lngLengh Mod ChunkSize
'新建记录
rsImage.AddNew
MsgBox rsImage.RecordCount
ReDim Chunk(intFragment)
Get lngDataFile, , Chunk()
rsImage!picImage.AppendChunk Chunk()
ReDim Chunk(ChunkSize)
For I = 1 To intChunks
Get lngDataFile, , Chunk()
rsImage!picImage.AppendChunk Chunk()
Next I
rsImage.Update
Close lngDataFile
Call ShowPic
End Sub
Private Sub cmdFirst_Click()
On Error Resume Next
rsImage.MoveFirst
Call ShowPic
End Sub
Private Sub Form_Load()
rsImage.LockType = adLockOptimistic
rsImage.CursorType = adOpenKeyset
cnnImage.Provider = "Microsoft.Jet.OLEDB.4.0"
strSql = App.Path & "\Image.mdb"
cnnImage.Open strSql
strSql = "Select * From ImageStore"
rsImage.Open strSql, cnnImage
If (rsImage.BOF = True) And (rsImage.EOF = True) Then Exit Sub
Call cmdFirst_Click
End Sub
Public Sub ShowPic()
On Error Resume Next
Open "pictemp" For Binary Access Write As lngDataFile
lngLengh = rsImage!picImage.ActualSize
intChunks = lngLengh \ ChunkSize
intFragment = lngLengh Mod ChunkSize
ReDim Chunk(intFragment)
Chunk() = rsImage!picImage.GetChunk(intFragment)
Put lngDataFile, , Chunk()
For I = 1 To intChunks
ReDim Buffer(ChunkSize)
Chunk() = rsImage!picImage.GetChunk(ChunkSize)
'建立图片临时文件
Put lngDataFile, , Chunk()
Next I
Close lngDataFile
FileName = "pictemp"
'Picture1.Picture = LoadPicture(FileName)
RichTextBox1.LoadFile FileName
End Sub