Datasnap& Fmx Mobile App如何发送包含blob字段的数据集

时间:2014-02-06 13:21:19

标签: stored-procedures delphi-xe5 datasnap firemonkey-fm3

我有一个多层项目,我会通过带有函数的FDStoredProc从microsoft sql 2005收集数据,该函数会将数据集返回给客户端。当服务器将数据集分配给函数的结果并且函数尝试将其发送到客户端时,我收到此错误。项目etctec.exe引发异常类TDBXError,消息'TDBXTypes.BLOB值类型无法作为TDBXTypes.Bytes值类型'进行访问。

在另一个项目中,我使用与TFDStoredProc不同的数据库的StoredProc完全相同的方式,它工作正常。什么会引起这个错误?

这就是我在服务器中所做的事情。

function TServerMethods1.getCategories(): TDataSet;
begin
  FDStoredProc1.ParamByName('@val1').AsInteger:= 1;
  FDStoredProc1.ParamByName('@val2').AsInteger:= 0;
  FDStoredProc1.ParamByName('@val3').AsInteger:= 1;
  FDStoredProc1.ParamByName('@val4').AsInteger:= 1;
  FDStoredProc1.Open();
  result:= FDStoredProc1;
end;

并且客户端像这样调用它......

dataset:=ClientModule1.ServerMethods1Client.getCategories();

问题来自NVARCHAR(max)类型的某些字段,是否有人知道此错误的解决方法而不更改字段类型?

我尝试将数据集的字段类型更改为字符串或某些内容但没有成功。我可以暂时做的唯一事情是分别获取这些字段,将它们放在字符串列表中或类似的东西中并将其传递给客户端。

1 个答案:

答案 0 :(得分:0)

我认为你应该使用下面的一些类似的方法: http://docwiki.embarcadero.com/Libraries/XE4/en/Data.DB.TDataSet.CreateBlobStream http://docwiki.embarcadero.com/Libraries/XE4/en/Data.DB.TDataSet.GetBlobFieldData

您应该将字段定义为blob字段,然后使用链接中描述的函数将数据输入/输出。

以下是如何复制数据的示例: http://docwiki.embarcadero.com/Libraries/XE4/en/Data.DB.TDataSet.CreateBlobStream