如何把文档等文件上传到SQL中呢?谢谢!

zxg007 2014-03-03 08:45:18
我按网上的各种例子试了好多种方式,都不行.
SQL中建了个表:
CREATE TABLE OfficeFile
(
office image
)

VB中:
Private Sub Command1_Click()
Dim iStm As ADODB.Stream
Dim iRe As ADODB.Recordset
Dim iConcStr As String

'数据库连接字符串
iConcStr = "Provider=MSDASQL.1;Password=;Persist Security Info=True;User ID=sa;Data Source=OTIME;Initial Catalog=OTIME"

'读取文件到内容
Set iStm = New ADODB.Stream
With iStm
.Type = adTypeBinary '二进制模式
.Open
.LoadFromFile "D:\test.doc"
End With

' 打开保存文件的表
Set iRe = New ADODB.Recordset
With iRe
.Open " SELECT * FROM OfficeFile ", iConcStr, 1,3
.AddNew '新增一条记录
.Fields("office") = iStm.Read
' .Update
End With

' 完成后关闭对象
' iRe.Close
iStm.Close
End Sub
总是在OPEN的地方出错:不能更新查询,因为它不含可用作键的搜索列.网上有个转载很广的例子<很多单位尤其是制造业、设计院,计算机应用开展的较早。>,我试了也不行,不懂要怎么用
...全文
379 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
angelbene 2015-05-07
  • 打赏
  • 举报
回复
楼主解决了吗?可以教教我吗?我也被这个问题困扰了很久。一直没做出来。可否加下我QQ:523763580.谢谢谢谢
發糞塗牆 2014-03-04
  • 打赏
  • 举报
回复
文件要频繁转换成二进制存入数据库然后再转换成程序可读格式展现,这个开销不是小事
zxg007 2014-03-04
  • 打赏
  • 举报
回复
引用 7 楼 fredrickhu 的回复:
[quote=引用 4 楼 zxg007 的回复:] 您好,使用什么方法不重要,只要能把文件成功上传至服务器相应位置就可以了。另外,如果是保存在数据库里,那sql的体积不是越来越大?
SQL中存储路径 程序调用路径 是最常用的方法。[/quote] 您好,您的意思是用比如FTP方法把文件存在系统某个盘下,然后把文件保存的路径存入数据库中,上传和下载都是从数据库中读取路径进行操作?有没有简单的例子呢,非常感谢!
LongRui888 2014-03-04
  • 打赏
  • 举报
回复
引用 9 楼 zxg007 的回复:
[quote=引用 6 楼 yupeigu 的回复:] [quote=引用 3 楼 u011015550 的回复:]
必须要用语句么?最近看到一种读取外部文件的方法,你看看,
以下是否符合要求呢

--先添加一个链接服务器,链接到具体的文件,格式大致如下:
sp_addlinkedserver
'exam',   --链接服务器名
'Microsoft.Jet.OLEDB.4.0',  --提供者名称(可以是excel表,acsess/jet等数据库文件)
'',    
'd:\exam.mdb'   --文件所处的物理路径,比如此处写的是access数据文件

--然后通过语句访问该链接服务器连接的文件中的数据
select * from openrowset('Microsoft.Jet.OLEDB.4.0','d:\exam.mdb';'admin';'',employee)--此处employee是exam.mdb数据库文件里的一张表名称
其实最好是,保存到windows系统的目录中,这种保存到表中的方法,不是很方便的[/quote] 如果用别的方法,比如用FTP保存到某个盘的某个目录下,这样如果想将某条数据记录对应某几个文件的话方便么?[/quote] 方便的,这个只需要在你的表中,加一个字段,存储这个文件的路径就可以
zxg007 2014-03-04
  • 打赏
  • 举报
回复
引用 6 楼 yupeigu 的回复:
[quote=引用 3 楼 u011015550 的回复:]
必须要用语句么?最近看到一种读取外部文件的方法,你看看,
以下是否符合要求呢

--先添加一个链接服务器,链接到具体的文件,格式大致如下:
sp_addlinkedserver
'exam',   --链接服务器名
'Microsoft.Jet.OLEDB.4.0',  --提供者名称(可以是excel表,acsess/jet等数据库文件)
'',    
'd:\exam.mdb'   --文件所处的物理路径,比如此处写的是access数据文件

--然后通过语句访问该链接服务器连接的文件中的数据
select * from openrowset('Microsoft.Jet.OLEDB.4.0','d:\exam.mdb';'admin';'',employee)--此处employee是exam.mdb数据库文件里的一张表名称
其实最好是,保存到windows系统的目录中,这种保存到表中的方法,不是很方便的[/quote] 如果用别的方法,比如用FTP保存到某个盘的某个目录下,这样如果想将某条数据记录对应某几个文件的话方便么?
zxg007 2014-03-04
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
上传东西一般是用前端语言调用类似FTP等功能,直接写sql不合理,如果数据也存在sql server里面,转换开销和维护开销都很大
您好,转换的开销这个问题应该可以不考虑,我就是给单位业余时间在局域网内弄个小系统,用三年了,数据库备份下来的文件还没5M,数据记录还没上万条,所以这方面是不是可以不考虑?
--小F-- 2014-03-04
  • 打赏
  • 举报
回复
引用 4 楼 zxg007 的回复:
您好,使用什么方法不重要,只要能把文件成功上传至服务器相应位置就可以了。另外,如果是保存在数据库里,那sql的体积不是越来越大?
SQL中存储路径 程序调用路径 是最常用的方法。
LongRui888 2014-03-04
  • 打赏
  • 举报
回复
引用 3 楼 u011015550 的回复:
必须要用语句么?最近看到一种读取外部文件的方法,你看看,
以下是否符合要求呢

--先添加一个链接服务器,链接到具体的文件,格式大致如下:
sp_addlinkedserver
'exam',   --链接服务器名
'Microsoft.Jet.OLEDB.4.0',  --提供者名称(可以是excel表,acsess/jet等数据库文件)
'',    
'd:\exam.mdb'   --文件所处的物理路径,比如此处写的是access数据文件

--然后通过语句访问该链接服务器连接的文件中的数据
select * from openrowset('Microsoft.Jet.OLEDB.4.0','d:\exam.mdb';'admin';'',employee)--此处employee是exam.mdb数据库文件里的一张表名称
其实最好是,保存到windows系统的目录中,这种保存到表中的方法,不是很方便的
LongRui888 2014-03-04
  • 打赏
  • 举报
回复
关于第一个,如何把文件上传到远程服务器,你可以去vb板块问问的,那里都是这方面的高手
發糞塗牆 2014-03-04
  • 打赏
  • 举报
回复
上传东西一般是用前端语言调用类似FTP等功能,直接写sql不合理,如果数据也存在sql server里面,转换开销和维护开销都很大
LongRui888 2014-03-04
  • 打赏
  • 举报
回复
引用 13 楼 zxg007 的回复:
[quote=引用 10 楼 yupeigu 的回复:] [quote=引用 9 楼 zxg007 的回复:] [quote=引用 6 楼 yupeigu 的回复:] [quote=引用 3 楼 u011015550 的回复:]
必须要用语句么?最近看到一种读取外部文件的方法,你看看,
以下是否符合要求呢

--先添加一个链接服务器,链接到具体的文件,格式大致如下:
sp_addlinkedserver
'exam',   --链接服务器名
'Microsoft.Jet.OLEDB.4.0',  --提供者名称(可以是excel表,acsess/jet等数据库文件)
'',    
'd:\exam.mdb'   --文件所处的物理路径,比如此处写的是access数据文件

--然后通过语句访问该链接服务器连接的文件中的数据
select * from openrowset('Microsoft.Jet.OLEDB.4.0','d:\exam.mdb';'admin';'',employee)--此处employee是exam.mdb数据库文件里的一张表名称
其实最好是,保存到windows系统的目录中,这种保存到表中的方法,不是很方便的[/quote] 如果用别的方法,比如用FTP保存到某个盘的某个目录下,这样如果想将某条数据记录对应某几个文件的话方便么?[/quote] 方便的,这个只需要在你的表中,加一个字段,存储这个文件的路径就可以[/quote] 您好,有没有简单的例子或者代码给段?我是个业余的,很多东西不太懂,谢谢啊![/quote] 我觉得这个有2个过程,第一个就是你得有一个控件,能把文件,从客户端,上传到你服务器的目录,这个在vb里应该有控件的,你找找。 然后上传完成后,就可以把这个路径插入到表中,比如: insert Into 表 values('e:\www\image\文档.doc')
zxg007 2014-03-04
  • 打赏
  • 举报
回复
您好,使用什么方法不重要,只要能把文件成功上传至服务器相应位置就可以了。另外,如果是保存在数据库里,那sql的体积不是越来越大?
zxg007 2014-03-04
  • 打赏
  • 举报
回复
引用 10 楼 yupeigu 的回复:
[quote=引用 9 楼 zxg007 的回复:] [quote=引用 6 楼 yupeigu 的回复:] [quote=引用 3 楼 u011015550 的回复:]
必须要用语句么?最近看到一种读取外部文件的方法,你看看,
以下是否符合要求呢

--先添加一个链接服务器,链接到具体的文件,格式大致如下:
sp_addlinkedserver
'exam',   --链接服务器名
'Microsoft.Jet.OLEDB.4.0',  --提供者名称(可以是excel表,acsess/jet等数据库文件)
'',    
'd:\exam.mdb'   --文件所处的物理路径,比如此处写的是access数据文件

--然后通过语句访问该链接服务器连接的文件中的数据
select * from openrowset('Microsoft.Jet.OLEDB.4.0','d:\exam.mdb';'admin';'',employee)--此处employee是exam.mdb数据库文件里的一张表名称
其实最好是,保存到windows系统的目录中,这种保存到表中的方法,不是很方便的[/quote] 如果用别的方法,比如用FTP保存到某个盘的某个目录下,这样如果想将某条数据记录对应某几个文件的话方便么?[/quote] 方便的,这个只需要在你的表中,加一个字段,存储这个文件的路径就可以[/quote] 您好,有没有简单的例子或者代码给段?我是个业余的,很多东西不太懂,谢谢啊!
Neo_whl 2014-03-03
  • 打赏
  • 举报
回复
必须要用语句么?最近看到一种读取外部文件的方法,你看看,
以下是否符合要求呢

--先添加一个链接服务器,链接到具体的文件,格式大致如下:
sp_addlinkedserver
'exam',   --链接服务器名
'Microsoft.Jet.OLEDB.4.0',  --提供者名称(可以是excel表,acsess/jet等数据库文件)
'',    
'd:\exam.mdb'   --文件所处的物理路径,比如此处写的是access数据文件

--然后通过语句访问该链接服务器连接的文件中的数据
select * from openrowset('Microsoft.Jet.OLEDB.4.0','d:\exam.mdb';'admin';'',employee)--此处employee是exam.mdb数据库文件里的一张表名称
zxg007 2014-03-03
  • 打赏
  • 举报
回复
引用 1 楼 yupeigu 的回复:
你的意思是要把文件存储到sql server的表中吗? 这个可以考虑用ntext字段,在2005中可以用nvarchar(max),非常方面, 这个image一般可以存储图片等二进制的数据
您好,ntext字段是存储字符文字吧?我有个工程项目管理的小系统,VB6+MS SQL,数据的存储、修改等操作都已实现,现在想给每个工程添加附件,附件类型有文档、图片、图纸等格式。不懂有什么方法可以实现。
LongRui888 2014-03-03
  • 打赏
  • 举报
回复
你的意思是要把文件存储到sql server的表中吗? 这个可以考虑用ntext字段,在2005中可以用nvarchar(max),非常方面, 这个image一般可以存储图片等二进制的数据

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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