DATASNAP远程方法返回TSTREAM正解


DATASNAP远程方法返回TSTREAM,如果数据大小超过32K是会报错的。许多DELPHIER栽在这个上头,甚至开始怀疑TSTREAM返回数据的可行性。


因为DATASNAP远程方法返回TSTREAM,数据包大小有最大32K限制。


怎么解决?客户端要做并包处理。


function CopyStream(const AStream: TStream): TMemoryStream;
const
LBufSize = $F000;
var
LBuffer: TBytes;
LReadLen: Integer;
begin
Result := nil;
if AStream = nil then
Exit;
Result := TMemoryStream.Create;
try
if AStream.Size = - then
begin
SetLength(LBuffer, LBufSize);
repeat
LReadLen := AStream.Read(LBuffer[], LBufSize);
if LReadLen > then
Result.WriteBuffer(LBuffer[], LReadLen);
if LReadLen < LBufSize then
break;
until LReadLen < LBufSize;
end
else
Result.CopyFrom(AStream, );
Result.Position := ;
except
Result.Free;
end;
end; procedure TForm1.btnQry3Click(Sender: TObject);
var
LStream: TStream;
LMemStream: TMemoryStream;
begin
DataSource1.DataSet := FDMemTable1;
LStream := methods.QuerySql3('', 'select * from t1');
if LStream <> nil then
begin
LMemStream := CopyStream(LStream);
FDMemTable1.LoadFromStream(LMemStream, TFDStorageFormat.sfBinary);
LMemStream.Free;
end;
end;

DATASNAP远程方法返回TSTREAM正解(转咏南兄)的更多相关文章

  1. DATASNAP远程方法返回TSTREAM正解

    DATASNAP远程方法返回TSTREAM正解 DATASNAP远程方法返回TSTREAM,如果数据大小超过32K是会报错的.许多DELPHIER栽在这个上头,甚至开始怀疑TSTREAM返回数据的可行 ...

  2. 解决DATASNAP远程方法参数超过32个的问题

    群里有位同仁提出他有一个DATASNAP远程方法超过了32个参数,然后DELPHI编译通不过,提示方法参数不能超过32个,问怎么办?于是群内同仁纷纷出主意,我说用OLEVARINAT数组,有人说用RE ...

  3. 论DATASNAP远程方法支持自定义对象作参数

    论DATASNAP远程方法支持自定义对象作参数 DATASNAP远程方法已经可以支持自定义对象作参数,这是非常方便的功能. 1)自定义对象 type TMyInfo = class(TObject) ...

  4. idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)

    idhttp.get方式调用,这种比较简单,大家都会.post方式网上却没有任何成功的代码,本人也是摸索了一个上午才搞定. 分享给大家. (1)post方式调用的远程方法,方法名必须加“update” ...

  5. datasnap远程方法支持自定义对象传参

    有同仁需要远程方法传输自定义的数据类型,他以为要自己写代码会很复杂,其实DATASNAP早就为我们想到了. datasnap的数据序列和还原真是无与伦比的强大,其远程方法支持自定义对象传参,DATAS ...

  6. DATASNAP为支持FIREDAC而增加的远程方法的数据类型TFDJSONDataSets

    前面的博客提到用FIREDAC全面替代COM那一套东西:DATAPROVIDER,OLEVARIANT,CLIENTDATASET,DBEXPRESS... 显然,DATASNAP的远程方法必须增加对 ...

  7. C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法

    最近在做项目的时候需要操作ftp进行文件的上传下载,但在调用using (var response = (FtpWebResponse)FtpWebRequest.GetResponse())的时候总 ...

  8. idhttp.post方式 调用datasnap rest 远程方法

    idhttp.get方式调用,这种比较简单,大家都会.post方式网上却没有任何成功的代码,本人也是摸索了一个上午才搞定. 分享给大家. (1)post方式调用的远程方法,方法名必须加“update” ...

  9. 一个关于WCF调用远程链接返回405错误不允许使用此方法的问题

    最近在调试WCF的接口时一直返回“405不允许使用此方法”,这个问题困扰了大半天,网上查了各种办法,但是每个人遇到的问题不同还是不能解决. 最后无意之中发现问题所在,记录一下帮助后面的同学解决问题. ...

随机推荐

  1. xdcms_3.0.1 | 代码审计

    这周的审计任务,这次审计 xdcms . 下面就开始审计之旅.                                                                     ...

  2. win10使用4G 模块RNDIS模式上网

    Windons使用RNDIS模式上网步骤 Chapter 1 模块端配置 1模块设置为RNDIS模式 1.       以EC20CEFAG模块为例 2.       命令如下: 1)         ...

  3. VMware安装CentOS7踩坑

      1.VMware安装Centos7加载界面不显示,但有快照 单击“开始”,运行中输入cmd. 然后输入命令 netsh winsock reset. 重启计算机. 2.nat模式网络问题     ...

  4. Android 6.0动态申请权限时,权限框闪一下就消失的问题;

    Android 蓝牙BLE开发需要位置权限,不然扫描不到周围的蓝牙信息: 位置权限申请: if (Build.VERSION.SDK_INT < 23){return;} //判断是否有权限 i ...

  5. day9笔记整理,记忆

    函数的使用:一 定义函数的三种形式 1.1 无参函数 1.2 有参函数 1.3 空函数二 调用函数的三种形式 2.1 语句形式    def foo():   print('from foo')    ...

  6. WPF 去除系统窗体边框,自定义移动窗体

    方法一: 去除系统窗体边框: <Window x:Class="PracticeProject.MainWindow" xmlns="http://schemas. ...

  7. 使用docker生成centos7系统

    因为缺乏系统,所以使用docker镜像模拟生成多个系统,用于练习集群的安装. 查看已有镜像 docker images 下载镜像: docker pull centos: docker pull  镜 ...

  8. Install Python on Mac (Anaconda)

    Install Python on Mac (Anaconda) 标签(空格分隔): 运维 This blog is copy from the link: https://medium.com/@G ...

  9. 1.正则re

    正则 :规则表达式 一般在匹配非结构化的数据时用的比较多,结构化的数据一般用xpath,bs4.但具体使用起来都是视情况而定,相对而言.正则规则平时涉及最多也就是匹配邮箱,电话,及特殊字符串.规则相对 ...

  10. 55.1拓展之边框border-width属性。

    效果地址:https://scrimba.com/c/cQpDKkSN HTML code: <div class="border1 borders"></div ...