本人要写一个组件,用于ASP调用的。其中有一个是从远端服务器数据库读取图片到本地后,将其替换至WORD文档。
由于我用ADO进行远程连接并应用于ACTIVCEX所以只能用这种动态创建较好。
可这种创建与ASP中的类似了,那我如何将读出来的二进制文件写入TmemoryStream
呢?
procedure TdocCreateActiveX.Read_Photo(intI: Integer);
var
rs:OleVariant;
mem_stream:TMemoryStream;
Image:TImage;
strField,strWord:string;
begin
Image:= TImage.Create(nil); rs := createOleobject('ADODB.recordset'); // ' + FareaCode + '
rs.ActiveConnection := Query;
try
rs.Open(FSqlStrImg, query, 3, 1);
except
showmessage('rs.open 出错');
end;
if not rs.Eof then
begin
try
strField:=trim(rs.fields[intI].name);
(rs.fields[strField].value as TBlobField).SaveToStream(mem_stream);//这里出错了,因为它不支持 TBlobField类型转换的。
//strWord:= JudgeStr(strWord);
//ReplaceWord(strField,strWord);} except
ShowMessage('数据输出出错,请重试!');
exitWord;
end;
end;
rs.close;
end;
由于我用ADO进行远程连接并应用于ACTIVCEX所以只能用这种动态创建较好。
可这种创建与ASP中的类似了,那我如何将读出来的二进制文件写入TmemoryStream
呢?
procedure TdocCreateActiveX.Read_Photo(intI: Integer);
var
rs:OleVariant;
mem_stream:TMemoryStream;
Image:TImage;
strField,strWord:string;
begin
Image:= TImage.Create(nil); rs := createOleobject('ADODB.recordset'); // ' + FareaCode + '
rs.ActiveConnection := Query;
try
rs.Open(FSqlStrImg, query, 3, 1);
except
showmessage('rs.open 出错');
end;
if not rs.Eof then
begin
try
strField:=trim(rs.fields[intI].name);
(rs.fields[strField].value as TBlobField).SaveToStream(mem_stream);//这里出错了,因为它不支持 TBlobField类型转换的。
//strWord:= JudgeStr(strWord);
//ReplaceWord(strField,strWord);} except
ShowMessage('数据输出出错,请重试!');
exitWord;
end;
end;
rs.close;
end;
解决方案 »
- 你们觉得Indy好用还是ICS好用?
- IdTCPClient和IdTCPServer 发送字符的时候为什么不能超过 string[255] ??
- 如何实现智能文字录入?
- 要是自动升级程序和主软件一起做成一个EXE,那么自动升级此EXE文件时是否能运行升级程序且将自动升级程序一起升级了呢
- 请大家看看,这条语句是什么意思呀?
- 调查:你面试时穿西装了吗?
- 为什么会:数据连接失败?
- 请问,有什么好的工具可以下载再线电影?
- 急,急,急--------100
- 我以前学的是VC现在也开始接触DELPHI请问我如何快速提高自己的DELPHI水平?能否提供一些意见或推进几本好书?谢谢!
- 紧急问题!!!???
- 进制转换
我将图片存下来了,用如下代码,可是图片大小对,但是图片却不能显示。
query := CreateOleObject('ADODB.connection');
cs := 'provider=ASAprov;eng=''lyj_eatery'';uid=''lyj'';pwd=''LYJFDCPDXTSXGS'';commlinks=tcpip(host=''192.168.10.80'')';
try
query.OPen(cs);
except
MessageBox(0,'连接远程数据库出错,请得试!','系统提示',MB_OK+MB_ICONERROR);
Exit;
end;
strSQL:='select * from eatery_photo where e_code=''11010000000001''';
rs := createOleobject('ADODB.recordset'); // ' + FareaCode + '
rs.ActiveConnection := Query;
try
rs.Open(strSQL, query, 3, 1);
except
showmessage('rs.open 出错');
end;
if not rs.Eof then
begin
try
strField:=trim(rs.fields[1].name);
vImgTemp:= rs.fields[strField].value;
mem_stream:= TMemoryStream.Create;
mem_stream.WriteBuffer(vImgTemp,sizeof(vImgTemp));
showmessage(inttostr(sizeof(vImgTemp))); if FileExists('c:\out_image_temp.jpg') then deletefile('c:\out_image_temp.jpg');
mem_stream.SaveToFile('c:\out_image_temp.jpg');
mem_stream.Free;
//strWord:= JudgeStr(strWord);
//ReplaceWord(strField,strWord);}
except
ShowMessage('数据输出出错,请重试!');
end;
end;
rs.close;
query.close;
改为:
TBlobField(rs.Fields[strField]).SavetoStream(Mem_Stream);
试试!
var
mem_stream:TMemoryStream;
selfquery:TADOQuery;
begin
try
mem_stream:=TMemoryStream.Create;
selfquery:=TADOQuery.Create(nil);
with selfquery do begin
Connection:=ADOConnection1;
if Active then close;
SQL.Clear;
SQL.Add('select * from eatery_photo where e_code=''11010000000003''');
Open;
(selfquery.FieldByName('e_photo') as TBlobField).SaveToStream(mem_stream) ;
if FileExists('c:\out_image_temp.jpg') then deletefile('c:\out_image_temp.jpg');
mem_stream.SaveToFile('c:\out_image_temp.jpg'); end
except
Application.MessageBox('照片装载时发生错误,请重新操作!','系统提示',MB_OK+MB_ICONINFORMATION);
//mem_stream.Free;
//selfquery.Close;
exit;
end;
mem_stream.Free;
selfquery.Close;
end;
大家可以用上面几种形式试一下。