1、注:我已引用了Microsoft ActiveX Data Objects 2.5 Library
我的数据库里每条纪录都有一幅图片。在新增记录的代码如下:
rs.AddNew
rs.Fields(“name").Value = Text1.Text
rs.Fields("photo")= Image1.Picture ‘就是这里不对,大虾看看怎么改
rs.Update 读取数据也是怎么样读出图片啊,我用其他方法把图片存为长二制文件,
Dim sqlstr As String
sqlstr = "select * from emplist where 公司型号= '" & Text13.Text & "'"
If Cn = True Then
If ExeReturn(sqlstr, rst) = True Then
text1.text=rs.fields("name").value
image1.picture=loadpicture(rs.fields("photo")) 就是这里不对,大虾看看怎么改
2、如果在数据库里面保存图片的路径,那么在VB中怎么把路径显示成图片?
3、如果用了Stream Dim PicStm As ADODB.Stream 然后怎么用啊,最好有注释,
谢谢大家了,分不够再加,如果问题能解决,我可以把我的全部分给完,
QQ:37219328 E-mail:[email protected]
谢谢大家了!
我的数据库里每条纪录都有一幅图片。在新增记录的代码如下:
rs.AddNew
rs.Fields(“name").Value = Text1.Text
rs.Fields("photo")= Image1.Picture ‘就是这里不对,大虾看看怎么改
rs.Update 读取数据也是怎么样读出图片啊,我用其他方法把图片存为长二制文件,
Dim sqlstr As String
sqlstr = "select * from emplist where 公司型号= '" & Text13.Text & "'"
If Cn = True Then
If ExeReturn(sqlstr, rst) = True Then
text1.text=rs.fields("name").value
image1.picture=loadpicture(rs.fields("photo")) 就是这里不对,大虾看看怎么改
2、如果在数据库里面保存图片的路径,那么在VB中怎么把路径显示成图片?
3、如果用了Stream Dim PicStm As ADODB.Stream 然后怎么用啊,最好有注释,
谢谢大家了,分不够再加,如果问题能解决,我可以把我的全部分给完,
QQ:37219328 E-mail:[email protected]
谢谢大家了!
Private Sub Command17_Click()
Dim db As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim StmPic As ADODB.Stream
db.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & "data source=" & App.Path & "\dev.mdb"
db.Open Set StmPic = New ADODB.Stream
StmPic.Type = adTypeBinary '指定流是二进制类型
StmPic.Open '将数据获取到Stream对象中
StmPic.LoadFromFile ("f:\aa.jpg") '将选择的图像加载到打开的StmPic中
rs.Open "Photo", db, adOpenDynamic, adLockOptimistic
rs.AddNew
rs!photo = StmPic.Read '从StmPic对象中读取数据
rs.Update
StmPic.Close
MsgBox "保存到数据库成功!"
End Sub'取出图片.
Private Sub Command18_Click()
Dim db As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim StmPic As ADODB.Stream
Dim StrPicTemp As String
db.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & "data source=" & App.Path & "\dev.mdb"
db.OpenSet StmPic = New ADODB.Stream
StmPic.Type = adTypeBinary
StmPic.Open
rs.Open "select * from photo where id=1", db
StmPic.Write rs!photo '写入数据库中的数据至Stream中
StmPic.SaveToFile App.Path & "\photo\temp.tmp", adSaveCreateOverWrite
StmPic.Close
rs.Close
Picture1.Picture = LoadPicture(App.Path & "\photo\temp.tmp")
End Sub
显示图片:
picture1.picture=loadpicture(""& rs!photo &"")
即可。
这句错啦!!!记录集怎么能直接存取图片呢?呵呵
要用ADODB.Stream ,关于用法楼上的已经讲的很详细了呵呵
Dim FileName As String ′图片文件名
Const BLOCKSIZE = 4096 ′每次读写块的大小
Dim ADOCon As New ADODB.Connection ′ADODB Connection对象
Dim ADORst As New ADODB.Recordset ′ADODB Recordset 对象
Dim ADOFld As ADODB.Field ′ADODB Field 对象
------------------------
Private Sub SaveToDB(ByRef Fld As ADODB.Field, DiskFile As String)
Dim byteData() As Byte ′定义数据块数组
Dim NumBlocks As Long ′定义数据块个数
Dim FileLength As Long ′标识文件长度
Dim LeftOver As Long′定义剩余字节长度
Dim SourceFile As Long ′定义自由文件号
Dim i As Long ′定义循环变量
SourceFile = FreeFile ′提供一个尚未使用的文件号
Open DiskFile For Binary Access Read As SourceFile ′打开文件
FileLength = LOF(SourceFile) ′得到文件长度
If FileLength = 0 Then ′判断文件是否存在
Close SourceFile
MsgBox DiskFile & ″ 无 内 容 或 不 存 在 !″
Else
NumBlocks = FileLength \ BLOCKSIZE ′得到数据块的个数
LeftOver = FileLength Mod BLOCKSIZE ′得到剩余字节数
Fld.Value = Null
ReDim byteData(BLOCKSIZE) ′重新定义数据块的大小
For i = 1 To NumBlocks
Get SourceFile, , byteData() ′ 读到内存块中
Fld.AppendChunk byteData() ′写入FLD
Next i
ReDim byteData(LeftOver) ′重新定义数据块的大小
Get SourceFile, , byteData() ′读到内存块中
Fld.AppendChunk byteData() ′写入FLD
Close SourceFile ′关闭源文件
End If
End Sub
----------------------
Private Sub Form_Load()
Constr = ″DSN=image″ ′定义ODBC连接
ADOCon.Open Constr ′创建一个连接
ADORst.Open ″table″, ADOCon, adOpenDynamic, adLockOptimistic
′打开一个ADO动态集 表名为table
Set AdoCtr.Recordset = ADORst ′将动态集赋给ADO控件
End Sub
----------------------
Private Sub Form_Unload(Cancel As Integer)
′记得关闭打开的数据集,释放资源
ADORst.Close
ADOCon.Close
Set ADORst = Nothing
Set ADOCon = Nothing
End Sub
---------------------- Private Sub PreView_Click()
′显示打开文件的公用对话框,选择需要加入数据库的图片
CDlg.Filter = ″位图(*.bmp)|*.bmp″
CDlg.ShowOpen
FileName = CDlg.FileName
PicBox.Picture = LoadPicture(FileName) ′预览图片
End Sub
---------------------- Private Sub Save_Click()
ADORst.AddNew ′新增纪录
ADORst(″姓名″).Value = Names.Text ′给动态集的第一个字段赋值
ADORst(″编号″).Value = Numb.Text ′给动态集的第二个字段赋值
Set ADOFld = ADORst(″照片″) ′给ADODB.Field对象赋值
Call SaveToDB(ADOFld, FileName)
′调用子程序,给第三个字段(image)赋值
ADORst.Update
End Sub
---------------------- Private Sub Update_Click()
′重新打开纪录集,刷新纪录
ADORst.Close
ADOCon.Close
Set ADORst = Nothing
Set ADOCon = Nothing
ADOCon.Open Constr
ADORst.Open ″table″, ADOCon, adOpenDynamic, adLockOptimistic
Set AdoCtr.Recordset = ADORst
End Sub