如何将WORD的文档存入SQL SERVER中某个数据库中的一条记录中(100分)

  • 主题发起人 主题发起人 hzzkf
  • 开始时间 开始时间
H

hzzkf

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在程序中实现这样的功能,将指定的WORD文档存入SQL SERVER中的数据库中,
表中的每条记录有两个字段,一个用于存文档名,字段类型可以取CHAR值。
但如何将WORD的整个文件做为一个字段内容存入记录中呢?
 
这个功能不现实,至少在SQLServer中不现实;
最多只能保存Word的文本,格式将会全部丢失。
考虑只保存指向Word文件的路径和文件名。
 
可以利用BLOB字段.
 
完全可以, 利用OLE方式.
 
以下程序将一个文件存到blob字段中。(参考李维的书)
var sfilename:string;
function blobcontenttostring(const filename: string):string;
begin
with tfilestream.create(filename,fmopenread) do
try
setlength(Result,size);
read(Pointer(Result)^,size);
finally
free;
end;
end;

begin
if (opendialog1.execute) then
begin
sFileName:=OpenDialog1.FileName;
adotable1.edit;
adotable1.fieldbyname('visio').asstring:=Blobcontenttostring(sFileName);
adotable1.post;
end;
 
我也想知道。
 
这个我做过的,我用了text字段设字段名为'tt'
var str:Tmemorystream;
begin
str:=Tmemorystream.Create;
str.LoadFromFile('f:/page.doc');
str.Position:=0;
adoquery1.Append;
Tblobfield(adoquery1.FieldByName('tt')).loadfromstream(str);
try
adoquery1.Post;
finally
str.Free;
end;//存储文件

var str:Tmemorystream;
begin
str:=Tmemorystream.Create;
str.Position:=0;
Tblobfield(adoquery1.FieldByName('tt')).savetostream(str);
str.SaveToFile('F:/gg.doc');
str.Free;//导出文件

存储文件名就不用多讲了吧,我用的是delphi5和sql7.0试验过,没问题
可以存储任何形式的文件,并可导出为其他后缀名。
 
terry_lzs:我用的是你的方法,但有一个小问题,我提交SQL语句时用的是:
例: dataunit.DataModule1.query3.SQL.Add('insert 文件数据表 (文件名称,
文件内容,建立时间,建立用户代码,建立用户姓名,备注) values
(:文件名称,:文件内容,:建立时间,:建立用户代码,:建立用户姓名,:备注)');
.
.
.
dataunit.DataModule1.Query3.Parambyname('文件名称').asstring:=edit1.text;
dataunit.DataModule1.Query3.FieldByName('文件内容').asstring:=?
其中'?'即为提交数据,而你的提交语句是:
'Tblobfield(adoquery1.FieldByName('tt')).loadfromstream(str);'该如何转换到
我的提交方式呢?
 
对不起,这段时间比较忙,没时间帮你试
你可以先暂时用append和post建立新的记录
 
试试'Tblobfield(dataunit.DataModule1.Query3.FieldByName('文件内容')).loadfromstream(str);'
 
bluefoam:
你的方法我用过,编译时不出错,但运行时出错。(数据库里的字段类型为TEXT,你语句
中的loadfromstream(str)里的STR变量我在程序中定义的是Tmemorystream类型)
 
试: Tblobfield(dataunit.DataModule1.Query3.FieldByName('文件内容')).loadformfile('f:/page.doc');
 
wutianbin:
你的方法我用过了,编译时能通过,但运行时提示出错“QUERY3 FIELD '文件内容' NOT
FOUND”
 
大家都不能回答吗?
 
Blob完全可以实现的。
Create Table Back_txt
(
Back_txt_code int,
Back_txt_details image
)


Query.Close;
Query.SQl.Text:=Format('InSert into Back_txt values (%d,:BackTxtDetails)',[Back_txt_Code]);
Query.ParamByName('BackTxtDetails').DataType:=ftBlob;
Query.ParamByName('BackTxtDetails').ParamType:=ptInput;
Query.ParamByName('Backtxtdetails').LoadFromFile(File_Name,ftBlob);
Query.ExecSql

Query.Close;
Query.Sql.Txt:=Format('Select * from Back_txt where Back_Txt_code=%D',[Back_Txt_Code]);
Query.open;
TblobField(Query.FieldByName('Back_txt_details')).SavetoFile(Filename);
如有问题请与我联系。

 

aylm
您是神!!
 
后退
顶部