服务器端采用的是ADO连接的数据库。方法可以参考《Delphi2010+DataSnap白皮书》,挺不错的一份资料,通俗易懂。
昨天发现存储图片的时候发生错误,小图片20k-30k的可以正常存储,大点的80+k的就报错了,目前还没有找到原因。以下是抛开DataSnap,直接用ADO操作的代码,可以正常通过。
function TForm1.savepmt(ItemImg: TMemoryStream; fdid: string): boolean;
begin
with ADOQuery_PZT do
begin
Close;
sql.Text := 'select * from FenDian where 0=3';
Open;
end;
with ADOQuery_PZT do // 写入信息
begin
Close;
SQL.Text :=
'Update FenDian set FDPMT=:P_FDPMT where FenDianID=''' + fdid +
'''';
Parameters.ParamByName('P_FDPMT').LoadFromStream(ItemImg, ftBlob);
try
execsql;
result := true;
except
result := false;
end;
end;
end;
使用DataSnap后,在服务器端执行这个。小图片没有问题,大点的就会保存失败。什么原因呢?
DataSnap官方微

在Delphi2010中使用DataSnap进行三层架构开发时,遇到保存大尺寸jpg图片报错的问题。小图片可以正常存储,但超过一定大小的图片会失败。通过分析,问题可能出在内存变量ItemImg上。通过定义新的类型,实现Create、Destroy、CopyFrom方法,并修改内存变量读取函数,最终解决了这个问题。参考DataSnap官方博客找到了解决方案。

1006

被折叠的 条评论
为什么被折叠?



