vb中图片文件和声音文件不能直接写入数据库,需要将其转化成二进制文件,怎么转化成二进制文件呢?这里就用到了ADODB的Stream对象,这个对象与RecordSet对象有许多类似之处(比如都可以作为一个临时容器盛放数据,但Stream对象盛放的是二进制格式的);二者之间也有非常密切的关系(RecordSet对象许借助Stream对象写入二进制格式的文件)。当然直接将大量的图片和声音这种比较庞大的数据放入数据库会大大影响运行速率,但在初学阶段做一尝试也是很有意思的。下面就是一些简单的代码,实现对于指定的图片文件向数据库中添加、读取、删除的操作。
'此函数实现保存文件到数据库中。分两步完成, '第一步:先加载指定图片文件以二进制的形式存到Stream对象中; '第二步:将Stream中的二进制数据写到数据库的一个表中。 '这里的Stream对象起到了一个转化和缓存的作用 Sub s_SaveFile() Dim iStm As ADODB.Stream Dim iRe As ADODB.Recordset Dim iConcstr As String '实例化Stream对象 Set iStm = New ADODB.Stream '读取文件到内容 With iStm '设置数据流为:二进制模式 .Type = adTypeBinary '打开Stream对象 .Open '向Stream对象中加载图片 .LoadFromFile App.Path + "\黎敏.jpg " End With '将Stream对象中的数据写入image表的photo字段 Set iRe = New ADODB.Recordset Dim sql As String Dim MsgText As String sql = "select * from image" Set iRe = Executesql(sql,MsgText) With iRe '新增一条记录 .AddNew '将Stream对象中的数据写入image表的photo字段 .Fields("photo") = iStm.Read .Update End With '完成后关闭对象 iRe.Close '数据流对象也要有相关的处理 iStm.Close End Sub '将数据库中的二进制形式的图片文件读出,分三步完成 '第一步:将数据库中的文件读取到Stream对象中 '第二步:将Stream对象中的图片文件读到一个临时文件中 '第三步:将临时文件中的图片文件加载到图片控件中 '在操作的时候应注意,Stream跟Recordset对象类似, '都可以存储一定的临时文件,相当于一个临时容器, '当操作完毕的时候应及时清空,或者关闭 Sub s_ReadFile() Dim iStm As ADODB.Stream Dim iRe As ADODB.Recordset '打开表 Set iRe = New ADODB.Recordset Dim sql As String Dim MsgText As String '临时文件,用来保存读出的图片 Dim StrPicTemp StrPicTemp = "c:\temp.tmp " sql = "select top 1 * from image" Set iRe = Executesql(sql,MsgText) '保存到文件,基于数据流 Set iStm = New ADODB.Stream With iStm .Mode = adModeReadWrite .Type = adTypeBinary .Open .Write iRe("photo") '将Stream中数据写入临时文件中 .SaveToFile StrPicTemp,adSaveCreateOverWrite End With iRe.Close iStm.Close '从临时文件中获取图片文件 Image1.Picture = LoadPicture(StrPicTemp) End Sub Private Sub cmdDelete_Click() Dim sql As String Dim MsgText As String Dim iRe As ADODB.Recordset '注意这里的iRe记录集不用关闭, '因为delete语句执行完之后已经自动关闭对象, '否则会提示关闭对象时不允许操作的错误 sql = "delete image" Set iRe = Executesql(sql,MsgText) End Sub Private Sub cmdRead_Click() Call s_ReadFile End Sub Private Sub cmdSave_Click() Call s_SaveFile End Sub