W
wichian
Unregistered / Unconfirmed
GUEST, unregistred user!
问题是:从数据库中导出的文件无法用AUTOCAD打开,打开的时
候提示 “该文件包含错误信息或已损坏”。
我不清楚流数据在写入数据库是数据被改变或者是在读出时被改
变,
还是写入和读出的时候都会改变流数据。
因为当我把流数据从一个文件读入,并读取存到另一个文件时,
新的文件
可以使用CAD程序打开。
想请教各位高手,富翁们,如何才能在数据库中写入和读取流数
据时能保持
数据格式不便。或者有什么办法能在数据库中保存DWG格式文件
,并能正确导出
以及直接打开的方法。
procedure TForm2.BitBtn1Click(Sender: TObject);
var
FileName, ExtName:string;
openDlg: TOpenDialog;
ms:TMemoryStream;
bs:tBlobstream;
begin
openDlg := TOpenDialog.Create(nil);
openDlg.Filter := '*.dwg|*.dwg';
if openDlg.Execute then
begin
fileName := openDlg.FileName;
extName := ExtractFileExt(fileName);
if not Session.Databases[0].InTransaction then
Session.Databases[0].StartTransaction;
if not Table1.Active then
Table1.Open;
Table1.Append;
Table1.FieldByName('bh_ydd').AsString :=
'052004020046';
Table1.FieldByName('ydqhbz').AsInteger := 0;
Table1.FieldByName('xh').asinteger := getxh;
Table1.FieldByName('ydtzlx').asstring :=
extname;
if uppercase(extName) = '.DWG' then
begin
ms := TMemoryStream.Create;
ms.LoadFromFile(filename);
ms.Position := 0;
bs :=
tBlobstream.create(Table1.FieldByName('tz_yd') as
tblobfield, bmwrite);
//ms.SaveToStream(bs);
BS.CopyFrom(ms,0);
Table1.Post;
ms.Free;
end;
end;
opendlg.Free;
end;
procedure TForm2.BitBtn2Click(Sender: TObject);
var
FileName, ExtName:string;
SaveDlg: TSaveDialog;
ms:TMemoryStream;
bs:tBlobstream;
begin
with ttable.create(nil) do
begin
databasename := 'symint';
tablename := 'SC_YD_YDSMTZ';
filter := 'bh_ydd = 052004020046 AND XH = ' +
Table1.FIELDBYNAME('XH').ASSTRING;
filtered := true;
open;
if isempty then exit;
SaveDlg := TSaveDialog.Create(nil);
SaveDlg.Filter := '*.dwg|*.dwg';
if SaveDlg.Execute then
begin
FileName := SaveDlg.FileName;
ExtName := '.dwg';
ms := TMemoryStream.Create;
bs :=
tBlobstream.create(FieldByName('tz_yd') as tblobfield,
bmread);
ms.copyfrom(bs, 0);
//ms.LoadFromFile('d:/1.dwg');
ms.Position := 0;
ms.SaveToFile(FileName + ExtName);
bs.Free;
ms.free;
end;
end;
SaveDlg.Free;
end;
该问题前面好象也有提出,但是我没有找到答案
分不多,但会尽量发给各位提供解决办法的大大们。
候提示 “该文件包含错误信息或已损坏”。
我不清楚流数据在写入数据库是数据被改变或者是在读出时被改
变,
还是写入和读出的时候都会改变流数据。
因为当我把流数据从一个文件读入,并读取存到另一个文件时,
新的文件
可以使用CAD程序打开。
想请教各位高手,富翁们,如何才能在数据库中写入和读取流数
据时能保持
数据格式不便。或者有什么办法能在数据库中保存DWG格式文件
,并能正确导出
以及直接打开的方法。
procedure TForm2.BitBtn1Click(Sender: TObject);
var
FileName, ExtName:string;
openDlg: TOpenDialog;
ms:TMemoryStream;
bs:tBlobstream;
begin
openDlg := TOpenDialog.Create(nil);
openDlg.Filter := '*.dwg|*.dwg';
if openDlg.Execute then
begin
fileName := openDlg.FileName;
extName := ExtractFileExt(fileName);
if not Session.Databases[0].InTransaction then
Session.Databases[0].StartTransaction;
if not Table1.Active then
Table1.Open;
Table1.Append;
Table1.FieldByName('bh_ydd').AsString :=
'052004020046';
Table1.FieldByName('ydqhbz').AsInteger := 0;
Table1.FieldByName('xh').asinteger := getxh;
Table1.FieldByName('ydtzlx').asstring :=
extname;
if uppercase(extName) = '.DWG' then
begin
ms := TMemoryStream.Create;
ms.LoadFromFile(filename);
ms.Position := 0;
bs :=
tBlobstream.create(Table1.FieldByName('tz_yd') as
tblobfield, bmwrite);
//ms.SaveToStream(bs);
BS.CopyFrom(ms,0);
Table1.Post;
ms.Free;
end;
end;
opendlg.Free;
end;
procedure TForm2.BitBtn2Click(Sender: TObject);
var
FileName, ExtName:string;
SaveDlg: TSaveDialog;
ms:TMemoryStream;
bs:tBlobstream;
begin
with ttable.create(nil) do
begin
databasename := 'symint';
tablename := 'SC_YD_YDSMTZ';
filter := 'bh_ydd = 052004020046 AND XH = ' +
Table1.FIELDBYNAME('XH').ASSTRING;
filtered := true;
open;
if isempty then exit;
SaveDlg := TSaveDialog.Create(nil);
SaveDlg.Filter := '*.dwg|*.dwg';
if SaveDlg.Execute then
begin
FileName := SaveDlg.FileName;
ExtName := '.dwg';
ms := TMemoryStream.Create;
bs :=
tBlobstream.create(FieldByName('tz_yd') as tblobfield,
bmread);
ms.copyfrom(bs, 0);
//ms.LoadFromFile('d:/1.dwg');
ms.Position := 0;
ms.SaveToFile(FileName + ExtName);
bs.Free;
ms.free;
end;
end;
SaveDlg.Free;
end;
该问题前面好象也有提出,但是我没有找到答案
分不多,但会尽量发给各位提供解决办法的大大们。