如何将视频保存到数据库

seakang 2003-05-10 04:07:57
本人要做视频采集,导入并存储到数据库
用vb,sql server如何实现
用ado对象访问
...全文
2517 60 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
60 条回复
切换为时间正序
请发表友善的回复…
发表回复
seakang 2003-05-30
  • 打赏
  • 举报
回复
txz1228兄台用小马哥的代码存储视频,
但是如何读出来呢,
麻烦把编的程序发过来
有重谢!!!
发project过来
mailto:seakang22@eyou.com
jimmyxing 2003-05-29
  • 打赏
  • 举报
回复
非常好的提议!
我觉得大力同志的方法可行,存储目录路径就可以了嘛。
seakang 2003-05-29
  • 打赏
  • 举报
回复
存进去后,
如何读出来
dreamer2002 2003-05-29
  • 打赏
  • 举报
回复
用image字段。
下面的代码来自大力(http://expert.csdn.net/Expert/topic/1666/1666858.xml?temp=.7174188
)的

CREATE PROCEDURE sp_textcopy (
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S ' + @srvname +
' /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @colname +
' /W "' + @whereclause +
'" /F ' + @filename +
' /' + @direction
EXEC master..xp_cmdshell @exec_str


下面是一个拷贝视频到SQL Server的pubs数据库的例子, 表名pub_info, 字段名logo,图像文件名picture.bmp,保存到pub_id='0736'记录
sp_textcopy @srvname = 'ServerName',
@login = 'Login',
@password = 'Password',
@dbname = 'pubs',
@tbname = 'pub_info',
@colname = 'logo',
@filename = 'c:\movie.avi',
@whereclause = " WHERE pub_id='0736' ",
@direction = 'I'
seakang 2003-05-28
  • 打赏
  • 举报
回复
数据库可以采用微软的Access97或者SQL Server来进行,首先新建一张表,取名为Ta

ble,添加三个字段,分别是:姓名 Char型(SQL Server中)文本型(Access中);编号

Char型(SQL Server中)文本型(Access中);照片image型(SQL Server中)OLE对象(

Access中),设计好后存盘。为了可以进行远程调用,我们采用ODBC的方法进行,双击打

开控制面板里的ODBC数据源,界面如图1所示:

  点“系统DSN”选项卡,按“添加”按钮选择对应的数据源驱动程序Access的*.mdb或

者SQL Server,依照添加向导加添加数据源,下面就可以开始程序的编写了。



  二、 程序的编写



  运行VB,新建一个工程。本程序采用ADO控件和动态链接库访问数据库,需要加入ADO

的运行库,单击“工程\引用”菜单,出现引用对话框,选择Microsoft ActiveX Data Ob

jects2.0 Library并确定。

  添加一个Form,四个Label控件,两个TextBox控件,一个PictureBox控件,一个ADOD

C控件,三个CommandButton控件,一个CommandDialog控件,如果ADODC和CommandDialog控

件没有出现在工具框上,请单击菜单“工程\部件”。点“控件”选项卡,在其中选中Mic

rosoft ADO Data Control 6.0(OLEDB)和Microsoft Common Dialog Control 6.0两项按“

确定”按钮。

  下面是以上各个控件的一些属性:

  Form1.MaxButton=False

  Label1.Caption=姓名:

  Label2.Caption=编号:

  Label3.Name= ResName

  Label3.BackColor= &H80000009&

  Label3.BorderStyle=1-Fixed Single

  Label3.DataField=姓名

  Label3.DataSource= AdoCtr

  Label4.Name= ResNumb

  Label4.BackColor= &H80000009&

  Label4.BorderStyle=1-Fixed Single

  Label4.DataField=编号

  Label4.DataSource= AdoCtr

  Text1.Name= Names

  Text2.Name= Numb

  CommonDialog1.Name= CDlg

  Adodc1.Name=AdoCtr

  CommonButton1.Name=PreView

  CommonButton1.Caption=预览

  CommonButton2.Name=Save

  CommonButton2.Caption=保存

  CommonButton3.Name= Update

  CommonButton3.Caption=更新

  PictureBox1.Name= PicBox

  PictureBox1.AutoSize=False

  PictureBox1.AutoRedraw=False

  PictureBox1.DataField=照片

  PictureBox1.DataSource=AdpCtr

  下面是程序代码:

  ′此工程需有Microsoft ActiveX Data Object 2.1 Library(msado15.dll)

  Dim Constr As String ′ODBC路径

  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

  程序运行后的结果如图2。

  本程序在VB6.0/Windows98/WindowsNT下编译通过。
seakang 2003-05-28
  • 打赏
  • 举报
回复
楼上的可否把project发到我的信箱里
seakang22@eyou.com
seakang22@sohu.com
txz1228 2003-05-27
  • 打赏
  • 举报
回复
我用vb写的程序可以将小的视频文件放到smsqlserver 2000中,不大于100M,当我将一张VCD数据500M放入数据库时,用 “yoki(小马哥)”的代码就不行了,程序提示rst的容量不足,我想可能是将VCD数据读一部份就立即写入数据库,然后再读下一部分,在继续上一次写入的地方追加新的数据,只有这样才能解决容量不足的问题。请大家帮忙,给出这一部分的代码。
zhg_best2000 2003-05-23
  • 打赏
  • 举报
回复
不知道微软的Yukon数据库出来后,并发性能可否提升。
pengdali 2003-05-22
  • 打赏
  • 举报
回复
原贴:
http://expert.csdn.net/Expert/TopicView1.asp?id=1594455


另:
如果报textcopy不是可执行文件的话,你就到
C:\Program Files\Microsoft SQL Server\MSSQL\Binn
目录下拷备 textcopy.exe到:
C:\Program Files\Microsoft SQL Server\80\Tools\Binn
pengdali 2003-05-22
  • 打赏
  • 举报
回复
i是读入
o是读出
pengdali 2003-05-22
  • 打赏
  • 举报
回复
用image类型

方法:
1、建立过程
CREATE PROCEDURE sp_textcopy (
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S ' + @srvname +
' /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @colname +
' /W "' + @whereclause +
'" /F ' + @filename +
' /' + @direction
EXEC master..xp_cmdshell @exec_str

2、建表和初始化数据
create table 表名 (编号 int,image列名 image)
go
insert 表名 values(1,0x)
insert 表名 values(2,0x)
go

3、读入
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','I' --注意条件是 编号=1

sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','I' --注意条件是 编号=2

go

4、读出成文件
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','O' --注意条件是 编号=1

sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','O' --注意条件是 编号=2
go
ccat 2003-05-22
  • 打赏
  • 举报
回复
把视频存进数据库是一件很奇怪的事吗?我不觉得呀~我看这是一个趋势。
不过要想提高视频数据库的性能,肯定得灵活使用一些手段,比如把存放视频的表放到一个单独的物理存储器中。
想要使用关系型数据库强大的信息管理能力,难以避免的要牺牲一些性能(同简单的文件系统相比)。这是没办法的事,根据情况取舍吧。
xdf_hubei 2003-05-22
  • 打赏
  • 举报
回复
用户数量少,可以考虑放到数据库中,如果CLIENT端用户数量多,就算你的服务器受的了,网络一般也受不了啊
就算你存放MPG4格式,连续播放码流也不低,除非质量很差,用户10,100,1000,你看看效果?受不了的
xdf_hubei 2003-05-22
  • 打赏
  • 举报
回复
楼上的,你难道不能在数据库中只存放文件名,路径在别的地方存放行不行,到时候变动,只用变动一个
我就见过将视频存到ACCESS里面的,MDB文件有30GB
是德国一个工作做的监控软件
philipscn 2003-05-22
  • 打赏
  • 举报
回复
视频数据只是一个概念,在媒体资产管理系统中用的比较多,在这类的系统中,将视频文件存入数据库还是很有必要的!
zhuimeng313 2003-05-22
  • 打赏
  • 举报
回复
guan zhu
jeremy201 2003-05-22
  • 打赏
  • 举报
回复
视屏应该存数据库中为好,若存路径,有局限性,如下:
当你要把你机器上的视屏文件存放到另外的数据库服务器中,若是存路径,那么,当你的电脑电脑关掉后,另外一个人访问数据库中的视频文件,那他怎么看的了。所以还是存到数据库中为好。
ilylhfe 2003-05-20
  • 打赏
  • 举报
回复
如何转成2进制~~
mauriceliu 2003-05-20
  • 打赏
  • 举报
回复
哈!我在Oracle中就用LOB字段直接存储视频,感觉不错。但是考虑到数据库服务性能的问题,我还是按时间分段限制文件大小。只是客户端在运行存取LOB对象时,动态内存分配巨大无比,不知道是什么问题。
nmgdjq 2003-05-20
  • 打赏
  • 举报
回复
请问QQ是如何将图片进行存储的呢?是路径还是存文件?
加载更多回复(40)

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧