正在做一个数据库系统,有一些Word文档需要存储,也要按照数据库系统的权限给与读写权限,所以我想将文档存入数据库中,能不能实现?当然读出来的时候还是.doc格式的,能用Word打开进行修改、阅读!
如果不能,各位高手有好的建议吗,感谢!
---------------------------------------------------------------
在SQL帮助里有这样的一段话,说明是可以保存.doc文档的。具体怎样做我也不知道,你研究一下吧。
二进制数据
二进制数据由十六进制数表示。例如,十进制数 245 等于十六进制数 F5。在 Microsoft® SQL Server™ 2000 中,二进制数据使用 binary、varbinary 和 image 数据类型存储。指派为 binary 数据类型的列在每行中都是固定的长度(最多为 8 KB)。指派为 varbinary 数据类型的列,各项所包含的十六进制数字的个数可以不同(最多为 8 KB)。image 数据列可以用来存储超过 8 KB 的可变长度的二进制数据,如 Microsoft Word 文档、Microsoft Excel 电子表格、包含位图的图像、图形交换格式 (GIF) 文件和联合图像专家组 (JPEG) 文件。
除非数据长度超过 8KB 时用 image 数据类型存储,一般宜用 varbinary 类型来存储二进制数据。建议列宽的定义不超过所存储的二进制数据可能的最大长度。
---------------------------------------------------------------
VB+ADO的方法:
Private Function DatabaseToFile(ByVal DataField As ADODB.Field, ByVal vSaveAs As String, ByVal vFileExpendName As String) As String
Dim fnum As Long, bytesleft As Long, bytes As Long
Dim lSumSize As Long, lNowSize As Long
Dim tmp() As Byte
On Error GoTo ErrHandleDatabaseToFile
If Trim(vSaveAs) = "" Then
DatabaseToFile = GetTempFileName(vFileExpendName)
Else
DatabaseToFile = Trim(vSaveAs)
End If
fnum = FreeFile
Open (DatabaseToFile) For Binary As fnum
bytesleft = DataField.ActualSize
lSumSize = CLng(bytesleft / 8192)
Do While bytesleft
bytes = bytesleft
If bytes > 8192 Then bytes = 8192
tmp = DataField.GetChunk(bytes)
Put #fnum, , tmp
bytesleft = bytesleft - bytes
lNowSize = lNowSize + 1
RaiseEvent TransmitData(lNowSize, lSumSize, False)
Loop
Close #fnum
Exit Function
ErrHandleDatabaseToFile:
DatabaseToFile = ""
Err.Clear
End Function
Private Function FileToDatabase(ByVal vDataField As ADODB.Field, ByVal vFileName As String)
Dim fnum As Long, bytesleft As Long, bytes As Long
Dim lSumSize As Long, lNowSize As Long
Dim tmp() As Byte
On Error GoTo ErrHandleFileToDatabase
fnum = FreeFile
Open vFileName For Binary As fnum
bytesleft = LOF(fnum)
lSumSize = CLng(bytesleft / 8192)
Do While bytesleft
bytes = bytesleft
If bytes > 8192 Then bytes = 8192
ReDim tmp(1 To bytes) As Byte
Get #fnum, , tmp
vDataField.AppendChunk tmp
bytesleft = bytesleft - bytes
lNowSize = lNowSize + 1
DoEvents
RaiseEvent TransmitData(lNowSize, lSumSize, True)
Loop
Close #fnum
Exit Function
ErrHandleFileToDatabase:
Err.Clear
End Function
---------------------------------------------------------------
可以有两个方案:
一:只是保存word的地址在数据库里.
二:把word内容保存在数据库中,可以用image字段.
如果开发工具是pb,可以用ole,调用ole_1.Activate(OffSite!)
可把该内容在word中打开,直接update该image字段,保存
修改内容.
---------------------------------------------------------------
用一种语言编程实现,我用DELPHI解释,其它语言类似,sql server 字段用IMAGE,
DELPHI中用
TFormatfield(fields[doc]).loadfromfile('文件.doc');
将.doc文件存到SQL SERVER的image字段
用TFormatfield(fields[doc]).SAVETOFILE('文件.doc');将.doc文件从数据库读出来。
具体你去查相应的编程语言的帮助,用loadfromstream,savetostream也可以。不只.doc,
.bmp,.rtf等都可以存到IMAGE字段保存;sql server2000的IMAGE字段还能对.doc文件进行
全文检索.