当前位置:主页>销售管理软件> 列表

过年了,最后一个问题,别不理我-----------高手都 找零售药店软件

库存管理软件版1楼: 我在三层结构中,在客户端读WORD文件到流传到服务端,服务端收到的文件能够打开,且与原文件一样,但在服务端读WORD文件到流传到客户端后,服务端的文件就打不开了,且看不到文件大小,客户端收到的文件也打不开,也看不到文件大小。
客户端传文件代码:
procedure TfmContract_Annex_Edit.sbOkClick(Sender: TObject);
var
ITemp : IhnBaseData;
sFileStream : WideString;
sFileName : WideString;
ass : TStringStream;
ams : TMemoryStream;
sMsg : WideString;
begin
ITemp := (dmData.scHnjtBase.GetSOAPServer as IhnBaseData);
ass := TStringStream.Create('''');
ams := TMemoryStream.Create;
ams.LoadFromFile(edtAnnex.Text);
ams.SaveToStream(ass);
sFileStream := EnCodeString(ass.DataString);
if Trim(dbcb.Text) = ''Word'' Then
sFileName := cdsAnnex.fieldbyname(''ANNEX_ID'').AsString+''.DOC''
Else
sFileName := cdsAnnex.fieldbyname(''ANNEX_ID'').AsString+''.XLS'';
ITEmp.sPreStoreFile(sFileName,sFileStream,sMsg);
if sMsg = '''' Then
Begin
ShowMessage(''保存成功'');
Close;
End
Else
Raise Exception.Create(sMsg);
end;

服务端存WORD文件代码如下:

procedure ThnBaseData.sPreStoreFile(sFileName: String;
sFileStream: String; var sMsg: String);
var
ass : TStringStream;
ams : TMemoryStream;
sFile : String;
begin
sFile := ''D:\hnjtServer\AnnexFile\''+sFileName;
ams := TMemoryStream.Create;
ass := TStringStream.Create(DecodeString(sFileStream));
try
ams.LoadFromStream(ass);
ams.Position := 0;
ams.SaveToFile(sFile);
Except
sMsg := ''存文件失败'';
end;
ams.Free;
ass.Free;
end;

服务端读WORD文件代码如下:
procedure ThnBaseData.sPreGetFile(sFileName: String; var sFileStream, sMsg: String);
var
sFile : String;
ass : TStringStream;
ams : TMemoryStream;
begin
ass := TStringStream.Create('''');
ams := TMemoryStream.Create;

sFile := ''D:\hnjtServer\AnnexFile\''+sFileName;
Try
ams.LoadFromFile(sFile);
ams.SaveToStream(ass);
sFileStream := EnCodeString(ass.DataString);
Except
sMsg := ''取文件失败'';
End;
ams.Free;
ass.Free;
end;
客户端取文件代码:
TfmContract_Edit.DBGridEh2DblClick(Sender: TObject);
var
ITemp : IhnBaseData;
sFileStream : WideString;
sFileName : WideString;
ass : TStringStream;
ams : TMemoryStream;
sMsg : WideString;
begin
if Self.cdsAnnex.FieldByName(''ANNEX_ID'').AsString = '''' then
Exit;
ITemp := (dmData.scHnjtBase.GetSOAPServer as IhnBaseData);
if Trim(cdsAnnex.FieldByName(''ANNEX_FILE_TYPE'').AsString) = ''Word'' Then
sFileName := cdsAnnex.FieldByName(''ANNEX_ID'').AsString+''.DOC''
Else
sFileName := cdsAnnex.FieldByName(''ANNEX_ID'').AsString+''.XLS'';
ITEmp.sPreStoreFile(sFileName,sFileStream,sMsg);
if sMsg <> '''' Then

Raise Exception.Create(smsg);
ass := TStringStream.Create(DecodeString(sFileStream));
ams := TMemoryStream.Create;
try
ams.LoadFromStream(ass);
ams.SaveToFile(''D:\zxy.doc'');
Except
sMsg := ''存文件失败'';
end;
ams.Free;
ass.Free;
end;

还有,三层结构中只支持标准调用,如果直接传输流,请问我怎么把流参数转为标准调用

2楼: 用 TBlobField(Fieldbyname(''ANNEX_CONTENT'')).LoadFromFile();
TBlobField(Fieldbyname(''ANNEX_CONTENT'')).SaveToFile();
试试 如零售药店软件

3楼: 还是不行

4楼: 没有用过word,只用过excel
帮你顶!

5楼: excel又是怎么实现的呢

6楼: 你读出是在DBGRID里显示,还是用WORD来打开...?或是你的读出格式不对..?

库存管理软件版7楼: 代码中写到:是输出一文件
Memstream.SaveToFile(''D:\test.doc'');

8楼: 以下是我导出到EXCEL文件的代码
procedure TFrm_info.Button3Click(Sender: TObject);
var
RecCount,FieCount,totalCount,j,i:integer;


FlagProcess:integer;
range:OleVariant;
begin
FlagProcess:=0;
if not FileExists(''d:\text.xls'') then
begin
showmessage(''文件路径不存在!'');
exit;
end;
ExcelApp.Connect;
ExcelApp.Visible[0]:=True;
ExcelWkbook.ConnectTo(ExcelApp.Workbooks.open(''d:\text.xls'',
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,
EmptyParam,EmptyParam,0));
ExcelWkSheet.ConnectTo (ExcelWkBook.Activesheet as _Worksheet);

totalCount:=FrmSLdate.ClGljjjszb.RecordCount+FrmSLdate.CLglwlpbl.RecordCount+FrmSLdate.CLsjj.RecordCount;

// 显示日期

ExcelWkSheet.Cells.Item[2,16]:=''日期:'';
ExcelWkSheet.Cells.Item[2,17]:=usldate.data;

// ***** 导出高炉经济技术指标中的数据 ***** //

if FrmSLdate.ClGljjjszb.RecordCount<>0 then
begin
frm_info.Label1.Caption:=''正在导出数据...'';

RecCount:=FrmSLdate.ClGljjjszb.RecordCount;

FieCount:=FrmSLdate.ClGljjjszb.FieldCount;

FrmSLdate.ClGljjjszb.First; //添加数据
for j:=1 to RecCount do
begin
FlagProcess:=FlagProcess+1;
application.ProcessMessages;
frm_info.ProgressBar1.Position:=FlagProcess*100 div totalCount;
FrmSLdate.ClGljjjszb.RecNo:=j;
for i:=0 to FieCount-4 do
begin
ExcelWkSheet.Cells.Item[j+3,i+3]:=FrmSLdate.ClGljjjszb.Fields[i+3].Value;
end;
end;
end;

// ***** 导出高炉物料配比量 ***** //

if FrmSLdate.CLglwlpbl.RecordCount<>0 then
begin
RecCount:=FrmSLdate.CLglwlpbl.RecordCount;
FieCount:=FrmSLdate.CLglwlpbl.FieldCount;

FrmSLdate.CLglwlpbl.First; //添加数据
for j:=1 to RecCount do
begin
FlagProcess:=FlagProcess + 1;
application.ProcessMessages;
frm_info.ProgressBar1.Position:=FlagProcess*100 div totalCount;
FrmSLdate.CLglwlpbl.RecNo:=j;
for i:=0 to FieCount-4 do


begin
ExcelWkSheet.Cells.Item[j+15,i+3]:=FrmSLdate.CLglwlpbl.Fields[i+3].Value;
end;
end;
end;

// ***** 显示烧结机的内容 ***** //

if FrmSLdate.CLsjj.RecordCount<>0 then
begin
RecCount:=FrmSLdate.CLsjj.RecordCount;
FieCount:=FrmSLdate.CLsjj.FieldCount;

FrmSLdate.CLsjj.First; //添加数据
for j:=1 to RecCount do
begin
FlagProcess:=FlagProcess + 1;
application.ProcessMessages;
frm_info.ProgressBar1.Position:=FlagProcess*100 div totalCount;
FrmSLdate.CLsjj.RecNo:=j;
for i:=0 to FieCount-4 do
begin
ExcelWkSheet.Cells.Item[j+26,i+3]:=FrmSLdate.CLsjj.Fields[i+3].Value;
end;
end;
end;

// ***** 显示产量与含量中的内容 ***** //

for i:=0 to 8 do
begin
ExcelWkSheet.Cells.Item[i+35,3]:=usldate.ArrayCLYHL[i];
end;

for i:=0 to 8 do
begin
ExcelWkSheet.Cells.Item[i+35,6]:=usldate.ArrayCLYHL[i+9];


end;

// ***** 显示记事栏中的内容 ***** //

ExcelWkSheet.Cells.Item[35,9]:=usldate.arrayJSL[0];
ExcelWkSheet.Cells.Item[38,9]:=usldate.arrayJSL[1];
ExcelWkSheet.Cells.Item[40,9]:=usldate.arrayJSL[2];
ExcelWkSheet.Cells.Item[41,9]:=usldate.arrayJSL[3];
ExcelWkSheet.Cells.Item[42,9]:=usldate.arrayJSL[4];

ExcelWksheet.SaveAs(''d:\text.xls'');
frm_info.Label1.Caption:=''导出完毕'';

end;

9楼: 确保文件的读取方式一样

10楼: 确保一样