DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: laidabin
今日帖子: 1
在线用户: 5
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/13 16:49:25
标题:
求指点,DATASNAP客户端上传的STREAM,数据库没有保存 浏览:1951
加入我的收藏
楼主: function TServerMethods1.PostStreamData(const AStream: TStream;const sTableName:string ): boolean;
var
  LMemStream: TMemoryStream;
  tempFDQuery: TFDQuery;
  FDSchemaAdapter: TFDSchemaAdapter;
begin
  result := false;
  try
    LMemStream := CopyStream(Astream);
    //CopyStream是DELPHI XE 10自带的例程函数
    LMemStream.Position := 0;
    FDSchemaAdapter := TFDSchemaAdapter.Create(nil);
    tempFDQuery := TFDQUERY.Create(nil);
    tempFDQuery.SchemaAdapter := FDSchemaAdapter;
    tempFDQuery.Connection := FDConSQL;
    tempFDQuery.Close;
    tempFDQuery.SQL.Text := 'select * from ' + stableName + ' where 1=2';
    tempFDQuery.Open;
    tempFDQuery.CachedUpdates := true;
    FDSchemaAdapter.UpdateOptions.AutoCommitUpdates := true;
   //LMemStream.SaveToFile('d:\temp\tmp.bin'),tmp.bin可以被FDMEMTABLE读
   //取数据并显示。说明,客户端传过来的stream是正确的。
    FDSchemaAdapter.LoadFromStream(LMemStream,TFDStorageFormat.sfBinary);
    if FDSchemaAdapter.ApplyUpdates = 0 then Result := true;
  //客户端执行后返回为True,表示成功,但数据库没有更新。
  //百思不得其解,很困惑,希望有人传道授业解惑
 //觉得应该是FDSchemaAdapter.ApplyUpdates没有真正执行
  finally
    LMemStream.Free;
    FDSchemaAdapter.Free;//释不释放都不影响结果
    tempFDQuery.Free;//释不释放都不影响结果
  end;
end;
在网上找了好久的资料,还是没解决,求指点。
另外:已经放置 FDStanStorageBinLink,FDStanStorageXMLLink,FDStanStorageJSONLink
----------------------------------------------
资质差,努力学
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2019/8/13 17:21:11
1楼: 你先试试在 load 之前,把你的 stream 当前位置归零。

LMemStream.Position := 0;
----------------------------------------------
-
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/13 17:29:03
2楼: 刚试了,还是不行。
其实
LMemStream := CopyStream(Astream);
LMemStream.Position := 0;
已经归零了。谢谢,请再次指点
----------------------------------------------
资质差,努力学
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/13 17:45:56
3楼: 期望盒子里的朋友,帮指点一下,卡在这里,搞不定了!
----------------------------------------------
资质差,努力学
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2019/8/13 17:49:25
4楼: 没用过DataSnap, 试一下 Astream.Postion := 0;
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/13 17:56:38
5楼: Astream.Postion := 0;

在CopyStream时,已经将TStream转成TMemoryStream且已经归零。

看了咏南的关于这方面的博客文章,觉得代码没有什么问题,可就是数据不能保存。不知道问题出在哪里,请大神们指点。

盒子也算是国内DELPHI水平比较高的论坛了,不会解决不了这个问题吧,我们盒子里
这么多大神呀
----------------------------------------------
资质差,努力学
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/13 18:01:39
6楼: 没办法,把贴子顶一下,不能沉,期望高手们登录论坛的时候能看到这个贴子。并指教。
----------------------------------------------
资质差,努力学
作者:
男 janker (janker) ★☆☆☆☆ -
盒子活跃会员
2019/8/13 20:45:30
7楼: 我的没这情况,数据库更新了
----------------------------------------------
-
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/13 21:15:36
8楼: 能否提供服务器端代码?
----------------------------------------------
资质差,努力学
作者:
男 janker (janker) ★☆☆☆☆ -
盒子活跃会员
2019/8/13 22:13:13
9楼: 就是delphi自带的DEMO,数据库用的是sqlite
----------------------------------------------
-
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/13 22:14:09
9楼: 泱泱盒子,Delphi高手云集之地,无人知晓?
----------------------------------------------
资质差,努力学
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2019/8/13 22:26:40
10楼: 看例子里还有一个设置,你试试看:
FDSchemaAdapter.UpdateOptions.AssignedValues := [uvAutoCommitUpdates];
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/13 22:36:30
11楼: 拖放控件的时候这个参数设置过,也不行!不知道与客户端的设置或提交代码有没有关系!数据库是mssql 2008r2
----------------------------------------------
资质差,努力学
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2019/8/13 22:52:26
12楼: 表里有没有设置主键字段?
----------------------------------------------
-把学习当信仰
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/13 22:57:13
13楼: 设置了,用TFDJSONDataSets方式,可以正常更新。楼上的之前你的帖子问过这个问题,你说已经解决了。你提到要用好TFDSchemaAdapter。是怎么做到的?
----------------------------------------------
资质差,努力学
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/13 23:02:32
14楼: 感谢各位的热心帮助,可是问题还是没有解决,始终不明白问题出在哪里?很郁闷!期待高人指点。
----------------------------------------------
资质差,努力学
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2019/8/14 0:04:17
15楼: 你应该把客户端数据集(TFDmemtable或TFDQuery)的cacheupdate属性设为true,应该就可以了
----------------------------------------------
-把学习当信仰
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/14 0:26:55
16楼: 客户端FDMemTable 的cacheupdate设为true了,否则用TFDJSONDataSets方式更新数据就不会成功,头疼呀!网上关于firedac的资料好少,百度下来有用的资料少的可怜!
----------------------------------------------
资质差,努力学
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2019/8/14 0:41:03
17楼: 可以加Q讨论,虽然我也搞了蛮久,但是就这几步
----------------------------------------------
-把学习当信仰
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/14 7:34:58
18楼: 你的qq号方便告之吗?
----------------------------------------------
资质差,努力学
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2019/8/14 10:20:01
19楼: 1601423263
----------------------------------------------
-把学习当信仰
作者:
男 zjjtour (zjjtour) ★☆☆☆☆ -
普通会员
2019/8/14 12:24:58
20楼: 特别鸣谢akai1203,花了二个小时的时间,帮远程调试,并解决问题,这种人人为我,我为人人的思想,才是我们DELPHI人的精神,也才能让盒子长远发展。在此特别感谢akai1203无偿的帮助。相当感谢!
----------------------------------------------
资质差,努力学
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2019/8/14 12:54:21
21楼: 秉着“人人为我,我为人人”的思想,具体原因,保密。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2019/8/14 13:10:15
22楼: datasnap的流操作有些问题,建议用datasnap rest则好。
本人一直用datasnap rest进行上传下载,很好。
----------------------------------------------
-
作者:
男 nihaongy (nihao) ★☆☆☆☆ -
普通会员
2019/8/14 14:57:23
23楼: 楼主,解决了,分享一下,那里出问题
----------------------------------------------
-相互学习,共同进步! 努力每一天,不能望山跑死马
发上等愿,结中等缘,享下等福;择高处立,寻平处住,向宽处行
作者:
男 grjs_2004 (grjsITname) ★☆☆☆☆ -
盒子活跃会员
2019/8/14 15:13:35
24楼: 我也想知道哪里的问题!
----------------------------------------------
Everyone will to do best!
作者:
男 grjs_2004 (grjsITname) ★☆☆☆☆ -
盒子活跃会员
2019/8/14 15:48:54
25楼: 这个问题的原因我已经知道了!
TFDTableAdapter  (+ 同一 TFDSchemaAdapter,设置 DatSTableName 为服务端 的 TFDQuery 名 ) 
就是客户端放置的TFDTableAdapter控件的DatSTableName属性要制定服务器端的对应的TFDQuery名,而不是表名!
----------------------------------------------
Everyone will to do best!
作者:
男 hnxxcxg (咏南中间件) ★☆☆☆☆ -
盒子活跃会员
2019/8/16 8:12:06
26楼: 事实上,根本不需要劳什子TFDSchemaAdapter来保存提交的流。官方的一些SAMPLE,无非是误人子弟。
直接TFDQUERY一个控件搞定
FDQuery1.Close;
      FDQuery1.sql.Clear;
      FDQuery1.CachedUpdates := True;
      FDQuery1.sql.Text := 'select * from ' + ATableName + ' where 1=2';
      FDQuery1.LoadFromStream(ms, FFormat);
      if FDQuery1.ApplyUpdates = 0 then
另外,DATASNAP传输流是没有问题的,不要误导群众。
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2019/8/16 23:44:38
27楼: TFDSchemaAdapte没有存在的必要
----------------------------------------------
-
作者:
男 jljaaj (小强) ▲▲▲△△ -
普通会员
2019/8/17 11:32:57
28楼: @zjjtour (zjjtour)楼主,本着“人人为我,我为人人”的思想,可以告诉下是怎么解决的吗?
----------------------------------------------
-
作者:
男 grjs_2004 (grjsITname) ★☆☆☆☆ -
盒子活跃会员
2019/8/20 22:50:37
29楼: 26楼,
楼主的意思是可以上传多个Stream,你给的例子只能传1个Stream,如果两个Stream,又要手工再多设置一个TStream参数,这样不方便!
----------------------------------------------
Everyone will to do best!
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行72.26563毫秒 RSS