DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: laidabin
今日帖子: 3
在线用户: 19
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 luckywangxw2 (delphifans) ★☆☆☆☆ -
普通会员
2017/9/10 15:49:52
标题:
关于三层架构DataSnap 使用FireDAC组件连接mssql数据库的问题 浏览:2964
加入我的收藏
楼主: 系统自带的DataSnap 三层架构DataSnap和 使用FireDAC组件的例子,使用TFDConnection链接并使用TStream方式传输、使用FireDAC控件完成调用的DataSnap的例子。  上面用的是sqlite数据库,
    问下,换上mssql数据库可以吗?我换成mssql数据库后,有以下报错。
难道msSql数据库不支持Tstream方式传输吗,
----------
procedure TClientForm.GetTables;
var
  LStringStream: TStringStream;
begin
  FDStoredProcGet.ExecProc;
  LStringStream := TStringStream.Create(FDStoredProcGet.Params[0].asBlob);
  try
        if LStringStream <> nil then
        begin
          LStringStream.Position := 0;
          DataModuleFDClient.FDSchemaAdapter.LoadFromStream(LStringStream, TFDStorageFormat.sfBinary);
        end;
  finally
    LStringStream.Free;
  end;
end;
----------
以上过程执行到DataModuleFDClient.FDSchemaAdapter.LoadFromStream(LStringStream, TFDStorageFormat.sfBinary);  报的错
此帖子包含附件:
PNG 图像
大小:2,143B
----------------------------------------------
Delphi爱好者
作者:
男 luckywangxw2 (delphifans) ★☆☆☆☆ -
普通会员
2017/9/10 18:00:33
1楼: 系统自带的例子c:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Object Pascal\DataSnap\FireDAC
----------------------------------------------
Delphi爱好者
作者:
男 ksrsoft (cb168) ★☆☆☆☆ -
普通会员
2017/9/10 18:59:33
2楼: 系统bug吧
----------------------------------------------
-
作者:
男 wg961423 (麦子仲肥) ★☆☆☆☆ -
盒子活跃会员
2017/9/11 9:57:13
3楼: 为啥要用TStringStream?如果流中有$0,数据会被截断的吧!
----------------------------------------------
-
作者:
男 kkkmmm (KKKMMM) ★☆☆☆☆ -
普通会员
2017/9/11 19:11:46
4楼: 先保存这个流到文件,再用HEX编辑器打开看看内容是不是读出的正确数据库内容吧?还是要具体分析的,泛泛的猜测没有意义,别人又没有人你的环境。
----------------------------------------------
-
作者:
男 hnxxcxg (咏南中间件) ★☆☆☆☆ -
盒子活跃会员
2017/9/12 7:48:27
5楼: 1)FIREDAC驱动MSSQL肯定是可以的。
2)中间件和客户端相关的单元都要引用 FireDAC.Stan.StorageJSON, FireDAC.Stan.StorageBin。
3)你代码写的有问题。
4)最新版本可能有BUG。
5)你换用fsjson试下。
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
作者:
男 luckywangxw2 (delphifans) ★☆☆☆☆ -
普通会员
2017/9/12 10:07:30
6楼:     代码上我一个没动,只是把服务端fdconnection的参数改了下,连接到了我的mssql数据库,测试连接成功,然后添加了FDPhysMSSQLDriverLink1控件。
    客户端是通过FDStoredProc连接的服务端的方法TServerMethods.StreamGet,如下:
function TServerMethods.StreamGet: TStream;
begin
  Result := TMemoryStream.Create;
  try
    qCustomers.Close;
    qCustomers.Open;
    qOrders.Close;
    qOrders.Open;
    FDSchemaAdapter.SaveToStream(Result, TFDStorageFormat.sfBinary);
    Result.Position := 0;
  except
    raise;
  end;
end;
---------
qCustomers和qOrders查询的是我两个表,通过SchemaAdapter属性连接到FDSchemaAdapter控件(第一次见到这个控件)。客户端也有这个控件,另外还多了两个FDTableAdapter(都连接到客户端的FDSchemaAdapter),如图 服务端
此帖子包含附件:
PNG 图像
大小:11.4K
----------------------------------------------
Delphi爱好者
作者:
男 luckywangxw2 (delphifans) ★☆☆☆☆ -
普通会员
2017/9/12 10:07:47
7楼: 客户端
此帖子包含附件:
PNG 图像
大小:7.1K
----------------------------------------------
Delphi爱好者
作者:
男 luckywangxw2 (delphifans) ★☆☆☆☆ -
普通会员
2017/9/12 10:22:37
8楼: procedure TClientForm.GetTables;
var
  LStringStream: TStringStream;
begin
  FDStoredProcGet.ExecProc;
  LStringStream := TStringStream.Create(FDStoredProcGet.Params[0].asBlob);
  try
        if LStringStream <> nil then
        begin
          LStringStream.Position := 0;
          DataModuleFDClient.FDSchemaAdapter.LoadFromStream(LStringStream, TFDStorageFormat.sfBinary);
        end;
  finally
    LStringStream.Free;
  end;
end;
----------
以上客户端代码,通过FDStoredProcGet.ExecProc;调用的服务端方法,然后将数据通过DataModuleFDClient.FDSchemaAdapter.LoadFromStream(LStringStream, TFDStorageFormat.sfBinary); 保存到两个FDTableAdapter,然后有两个FDMemTable通过属性Adapter连接到FDTableAdapter控件,datasource连接到FDMemTable,把数据显示出来,
----------------------------------------------
Delphi爱好者
作者:
男 luckywangxw2 (delphifans) ★☆☆☆☆ -
普通会员
2017/9/12 10:31:35
9楼: 是不是改成mssql数据库后,还得改某些其他相应参数.....
----------------------------------------------
Delphi爱好者
作者:
男 luckywangxw2 (delphifans) ★☆☆☆☆ -
普通会员
2017/9/12 10:36:39
10楼: delphi xe10 系统自带的demo,c:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Object Pascal\DataSnap\FireDAC,有谁可以编译试下,改成mssql数据库
----------------------------------------------
Delphi爱好者
作者:
男 luckywangxw2 (delphifans) ★☆☆☆☆ -
普通会员
2017/9/13 16:22:01
11楼: 找到问题所在了,客户端需要select两个表,我之前都是select  所有字段,后来只select主要的字段,可以查询成功了。高手指教说datasnap 通过stream传输大数据是分多个数据包传输,客户端接受需要进行处理才行,目前在进一步学习中。。。。
----------------------------------------------
Delphi爱好者
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行105.4688毫秒 RSS