|
|
导航: |
论坛 -> 数据库专区
斑竹:liumazi,waterstone |
|
作者: |
|
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); 报的错
此帖子包含附件:
大小:2,143B |
----------------------------------------------
Delphi爱好者 |
作者: |
|
2017/9/10 18:00:33 |
1楼: |
系统自带的例子c:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Object Pascal\DataSnap\FireDAC
----------------------------------------------
Delphi爱好者
|
作者: |
|
2017/9/10 18:59:33 |
2楼: |
系统bug吧
----------------------------------------------
-
|
作者: |
|
2017/9/11 9:57:13 |
3楼: |
为啥要用TStringStream?如果流中有$0,数据会被截断的吧!
----------------------------------------------
-
|
作者: |
|
2017/9/11 19:11:46 |
4楼: |
先保存这个流到文件,再用HEX编辑器打开看看内容是不是读出的正确数据库内容吧?还是要具体分析的,泛泛的猜测没有意义,别人又没有人你的环境。
----------------------------------------------
-
|
作者: |
|
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/
|
作者: |
|
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),如图 服务端
此帖子包含附件:
大小:11.4K |
----------------------------------------------
Delphi爱好者
|
作者: |
|
2017/9/12 10:07:47 |
7楼: |
客户端
此帖子包含附件:
大小:7.1K |
----------------------------------------------
Delphi爱好者
|
作者: |
|
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爱好者
|
作者: |
|
2017/9/12 10:31:35 |
9楼: |
是不是改成mssql数据库后,还得改某些其他相应参数.....
----------------------------------------------
Delphi爱好者
|
作者: |
|
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爱好者
|
作者: |
|
2017/9/13 16:22:01 |
11楼: |
找到问题所在了,客户端需要select两个表,我之前都是select 所有字段,后来只select主要的字段,可以查询成功了。高手指教说datasnap 通过stream传输大数据是分多个数据包传输,客户端接受需要进行处理才行,目前在进一步学习中。。。。
----------------------------------------------
Delphi爱好者
|
|