W
wangmao
Unregistered / Unconfirmed
GUEST, unregistred user!
我想将通过流操作word文档等文件写入数据库并从数据库读出
但是写入和读出的文件字节数并不相同,而且对于word文件从数据库读出后,并不能打开
怎么解决这个问题
我的程序如下
保存到数据库:
var
m_str: Tmemorystream;
sqlstr, file_name, filename, file_ext, str: string;
zq1: TzQuery;
size, i: Integer;
begin
if OpenDialog1.Execute then
begin
file_name := OpenDialog1.FileName;
file_ext := ExtractFileExt(OpenDialog1.FileName);
filename := ExtractFileName(OpenDialog1.FileName)
end;
m_str := Tmemorystream.Create;
m_str.LoadFromFile(file_name);
m_str.Position := 0;
i := m_str.Size;
zq1 := TZQuery.Create(Self);
zq1.Connection := ZConnection1;
with zq1 do
begin
close;
sql.Clear;
SQL.Text := 'insert into tb_file (file_name,file_ext,file) values
file_name,:file_ext,:file)';
ParamByName('file_name').AsString := filename;
ParamByName('file_ext').AsString := file_ext;
ParamByName('file').LoadFromStream(m_str, ftBlob);
ExecSQL;
end;
zq1.Free;
m_str.Free;
end;
从数据库读出:
var
m_str: Tmemorystream; //修改图片POS_mgxid
str, file_ext, filename: string;
zq1: tzquery;
file_id, SizeOf, i: Integer;
begin
if not zQuery1.IsEmpty then //如果更新编号不为空
begin
m_str := Tmemorystream.Create;
zq1 := TZQuery.Create(Self);
zq1.Connection := ZConnection1;
with zq1 do
begin
close;
SQL.Clear;
SQL.Text := ' select file from tb_file where file_id=' + inttostr(file_id);
Open;
end;
Tblobfield(zq1.FieldByName('file')).savetostream(m_str);
zq1.Free;
file_ext := zQuery1.fieldbyname('file_ext').AsString;
filename := zQuery1.fieldbyname('file_name').AsString;
m_str.SaveToFile(ExtractFilePath(Application.ExeName) + filename);
end;
end;
但是写入和读出的文件字节数并不相同,而且对于word文件从数据库读出后,并不能打开
怎么解决这个问题
我的程序如下
保存到数据库:
var
m_str: Tmemorystream;
sqlstr, file_name, filename, file_ext, str: string;
zq1: TzQuery;
size, i: Integer;
begin
if OpenDialog1.Execute then
begin
file_name := OpenDialog1.FileName;
file_ext := ExtractFileExt(OpenDialog1.FileName);
filename := ExtractFileName(OpenDialog1.FileName)
end;
m_str := Tmemorystream.Create;
m_str.LoadFromFile(file_name);
m_str.Position := 0;
i := m_str.Size;
zq1 := TZQuery.Create(Self);
zq1.Connection := ZConnection1;
with zq1 do
begin
close;
sql.Clear;
SQL.Text := 'insert into tb_file (file_name,file_ext,file) values
![Smile (: (:](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f642.png)
ParamByName('file_name').AsString := filename;
ParamByName('file_ext').AsString := file_ext;
ParamByName('file').LoadFromStream(m_str, ftBlob);
ExecSQL;
end;
zq1.Free;
m_str.Free;
end;
从数据库读出:
var
m_str: Tmemorystream; //修改图片POS_mgxid
str, file_ext, filename: string;
zq1: tzquery;
file_id, SizeOf, i: Integer;
begin
if not zQuery1.IsEmpty then //如果更新编号不为空
begin
m_str := Tmemorystream.Create;
zq1 := TZQuery.Create(Self);
zq1.Connection := ZConnection1;
with zq1 do
begin
close;
SQL.Clear;
SQL.Text := ' select file from tb_file where file_id=' + inttostr(file_id);
Open;
end;
Tblobfield(zq1.FieldByName('file')).savetostream(m_str);
zq1.Free;
file_ext := zQuery1.fieldbyname('file_ext').AsString;
filename := zQuery1.fieldbyname('file_name').AsString;
m_str.SaveToFile(ExtractFilePath(Application.ExeName) + filename);
end;
end;