'''以下的Cn是定義的連接數據庫的對象 '''保存相片 Public Sub SavePictureToSql() Dim RsPic As New ADODB.Recordset '''用來打開要保存相片的表 Dim StrPic As New ADODB.Stream '''用來取得相片的二進制碼,并向字段中添加 '''將要保存的相片加到Stream對象中 With StrPic .Type = adTypeBinary '''將對象的類型設置為二進制 .Open '''打開 '''假如現在你已將要保存的相片加入到控件Image中 .LoadFromFile CommonDialog.filename '''取得要保存的相片 End With
With RsPic If .State = 1 Then .Close '''打開表 .Open "Select Imgfield From Table", CN, adOpenDynamic, adLockOptimistic .AddNew '''新增 .Fields(Imgfield) = StrPic.Read .Update '''更新保存 MsgBox "相片保存成功!", vbInformation .Close End With
Set RsPic = Nothing Set StrPic = Nothing End Sub'''讀取相片 Private Sub LoadPictureFromSql() Dim RsPic As New ADODB.Recordset '''用來打開要讀取相片的表 With RsPic If .State = 1 Then .Close .Open "Select Imgfield From Table", CN, adOpenDynamic, adLockOptimistic If .RecordCount > 0 Then '''判斷是否有數據 Set Image1.DataSource = RsPic '''將相片賦給Image Image1.DataField = RsPic(Imgfield).name End If .Close End With
Set RsPic = Nothing End Sub試一下行不?
存图片有两种方式 第一、存路径。 存相对路径。把图片报存在相对地址。 这种方法可以快速、省代码。 第二、存数据流 代码如下: Private Sub Command1_Click() '添加图片 Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset Set cnn = New ADODB.Connection Set rs = New ADODB.Recordset cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\数据库\db1.mdb;Persist Security Info=False" rs.Open "select * from t1", cnn, adOpenKeyset, adLockBatchOptimistic Dim mstream As ADODB.Stream Set mstream = New ADODB.Stream mstream.Mode = adModeReadWrite mstream.Type = adTypeBinary mstream.Open mstream.LoadFromFile "e:\13.jpg" rs.AddNew rs!s1 = mstream.Read rs.UpdateBatch mstream.Close rs.Close cnn.Close End SubPrivate Sub Command2_Click() '读出 Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset Dim mstream As ADODB.Stream
Set cnn = New ADODB.Connection Set rs = New ADODB.Recordset cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\数据库\db1.mdb;Persist Security Info=False" rs.Open "select * from t1", cnn, adOpenKeyset, adLockBatchOptimistic Set mstream = New ADODB.Stream mstream.Mode = adModeReadWrite mstream.Type = adTypeBinary
mstream.Open mstream.Write rs!s1 mstream.SaveToFile "e:\sxs\15.jpg", adSaveCreateOverWrite Picture1.Picture = LoadPicture("e:\15.jpg") rs.Close cnn.Close End Sub 这是用数据流的形式保存 其字段类型为 image 类型。 这样是以十六进制的形式保存图像。 但是占用数据库,最好把图片的格式调好。
好像可以用固定的算法
就可以
'''保存相片
Public Sub SavePictureToSql()
Dim RsPic As New ADODB.Recordset '''用來打開要保存相片的表
Dim StrPic As New ADODB.Stream '''用來取得相片的二進制碼,并向字段中添加
'''將要保存的相片加到Stream對象中
With StrPic
.Type = adTypeBinary '''將對象的類型設置為二進制
.Open '''打開
'''假如現在你已將要保存的相片加入到控件Image中
.LoadFromFile CommonDialog.filename '''取得要保存的相片
End With
With RsPic
If .State = 1 Then .Close
'''打開表
.Open "Select Imgfield From Table", CN, adOpenDynamic, adLockOptimistic
.AddNew '''新增
.Fields(Imgfield) = StrPic.Read
.Update '''更新保存
MsgBox "相片保存成功!", vbInformation
.Close
End With
Set RsPic = Nothing
Set StrPic = Nothing
End Sub'''讀取相片
Private Sub LoadPictureFromSql()
Dim RsPic As New ADODB.Recordset '''用來打開要讀取相片的表
With RsPic
If .State = 1 Then .Close
.Open "Select Imgfield From Table", CN, adOpenDynamic, adLockOptimistic
If .RecordCount > 0 Then '''判斷是否有數據
Set Image1.DataSource = RsPic '''將相片賦給Image
Image1.DataField = RsPic(Imgfield).name
End If
.Close
End With
Set RsPic = Nothing
End Sub試一下行不?
第一、存路径。
存相对路径。把图片报存在相对地址。
这种方法可以快速、省代码。
第二、存数据流
代码如下:
Private Sub Command1_Click() '添加图片
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\数据库\db1.mdb;Persist Security Info=False"
rs.Open "select * from t1", cnn, adOpenKeyset, adLockBatchOptimistic
Dim mstream As ADODB.Stream
Set mstream = New ADODB.Stream
mstream.Mode = adModeReadWrite
mstream.Type = adTypeBinary
mstream.Open
mstream.LoadFromFile "e:\13.jpg"
rs.AddNew
rs!s1 = mstream.Read
rs.UpdateBatch
mstream.Close
rs.Close
cnn.Close
End SubPrivate Sub Command2_Click() '读出
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim mstream As ADODB.Stream
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\数据库\db1.mdb;Persist Security Info=False"
rs.Open "select * from t1", cnn, adOpenKeyset, adLockBatchOptimistic
Set mstream = New ADODB.Stream
mstream.Mode = adModeReadWrite
mstream.Type = adTypeBinary
mstream.Open
mstream.Write rs!s1
mstream.SaveToFile "e:\sxs\15.jpg", adSaveCreateOverWrite
Picture1.Picture = LoadPicture("e:\15.jpg")
rs.Close
cnn.Close
End Sub
这是用数据流的形式保存 其字段类型为 image 类型。
这样是以十六进制的形式保存图像。
但是占用数据库,最好把图片的格式调好。
你不要要求太高,
如果要联系数据库的话,干脆用
低版本Access+DAODC+PictureBox数据绑定
得了。简单而实用。
还是简单点好,ADO+PictureBox绑定可以读不能写。
ADO写图片要用代码控制。