DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: hujianan316
今日帖子: 38
在线用户: 18
导航: 论坛 -> 移动应用开发 斑竹:flyers,iamdream  
作者:
男 zhengq_6 (老人) ★☆☆☆☆ -
普通会员
2019/1/17 11:55:58
标题:
access显示数据库中的图片出现错误 浏览:470
加入我的收藏
楼主: DataSnap数据库用的是access  手机在显示图片字段时出现以下错误
      MS := TMemoryStream.Create;
      TBlobField(DataModule1.ClientDataSet2.FieldByName('照片')s).SaveToStream(MS);
      MS.Position:=0;
      if MS.Size >0 then
      Frm_zcrxxsm.Image1.Bitmap.LoadFromStream(MS);
      MS.Free;
此帖子包含附件:
PNG 图像
大小:191.1K
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲▲ -
普通会员
2019/1/17 13:30:24
1楼: 楼主的代码 编译都无法通过。更别说运行了。
假设可以运行。
楼主的代码,是 数据已经下载到 本地后 的代码。
但是 错误是 远程服务器发生的。

https://www.baidu.com/baidu?word=access%20%E9%9D%9E%E6%B3%95%E7%9A%84%E7%B2%BE%E7%A1%AE%E5%BA%A6%E6%95%B0%E5%80%BC&ie=utf-8&tn=maxco3_dg&ch=1
----------------------------------------------
(C)(P)Flying Wang
作者:
男 zhengq_6 (老人) ★☆☆☆☆ -
普通会员
2019/1/17 16:52:58
2楼: 代码可以编译通过 ,数据库(access)是在服务器上
----------------------------------------------
-
作者:
男 nickemma (N.E) ▲▲▲▲△ -
注册会员
2019/1/17 17:19:13
3楼: Access数据库,还把图片放进去?不如直接丢在一个目录里面,用流加载然后下发。
----------------------------------------------
-
作者:
男 zhengq_6 (老人) ★☆☆☆☆ -
普通会员
2019/1/17 17:27:09
4楼: 图片是放在数据库中的,如果把图片放在服务器目录中,怕有人把图片删除了
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲▲ -
普通会员
2019/1/18 9:22:27
5楼: ('照片')s).
这都能编译通过,您水平很高。不应该提出这种问题。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 zhengq_6 (老人) ★☆☆☆☆ -
普通会员
2019/1/18 19:49:44
6楼: 不好意思,('照片')s).没有s,源代码没有s,谢谢wang_80919 (Flying Wang)您能解决这个问题吗?
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲▲ -
普通会员
2019/1/18 20:47:34
7楼: 不能,因为,我认为,你给出的代码,是无法解决这个提示的。能解决的代码,我也不知道你放哪里了。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 vkow (vkow) ▲▲▲▲▲ -
普通会员
2019/1/18 20:50:39
7楼: 我都服了,连基本分析问题的能力都没有么?

你这是服务端发生的错误。你贴出客户端的代码有关系么?

Remote Error这么大的字都看不到??

说问题吧,仅提供一种可能啊。不一定是这个问题。

你这调用,对应的服务端的数据库查询,是不是用到了动态参数??
带动态参数的SQL是在属性面板里写的?
试一试把这个sql写在代码里,看看能不能解决。
类似,
xxx.sql.clear;
xxx.sql.add(........);这样。
----------------------------------------------
-
作者:
男 zhengq_6 (老人) ★☆☆☆☆ -
普通会员
2019/1/19 15:48:21
8楼: 我发服务器的代码,里面基本上会也没写,谢谢各位,
这是客户端代码:
  DataModule1.ClientDataSet2.Close;
  DataModule1.ClientDataSet2.CommandText := Format('Select a.*,b.物资名称 from 发放轮椅明细 as a,物资表 as b where a.物资=b.编号 and a.编号=:bh order by a.编号',[]);
  DataModule1.ClientDataSet2.Params.ParamByName('bh').Value := bh;
  DataModule1.ClientDataSet2.Open;
此帖子包含附件:zhengq_6_2019119154820.rar 大小:4.05M
----------------------------------------------
-
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2019/1/21 15:51:49
9楼: 从你第一张图来看就是服务端报的错,Datasetprovider来提供数据是会在操作过程中把错误向客户端传让客户端体现的,不然服务端报个错服务就挂了。
看了下8楼提供的代码,确实没看到与精度类型相关的字段。又看了下你提供的链接关于精度类型的,才发现原来字符串不对也会报这个。你说是最上面几行执行时报的,但看着不像是这段代码能关联到的。
你服务端代码中长度存疑的代码就是FDConnection1.Params.Values['Database'] := ExtractFilePath(paramstr(0)) + '2018动态资料.mdb',这个看上去是数据库连接的时候会调到的,那么如果是客户端打开或联动打开数据集,造成连接时会不会出问题的。
如果不是,那你就用编程较常用的方法吧,搞个空的程序,把程序里的特征一点点重加,加到哪儿错误又出现了,就知道出在哪儿了。再想法解决。你代码不多,有点耐心。

我前天写个代码,给我用了几年的泛型容器加了一个初始化的事件,把容器改了,把调用到容器的程序改完了,结果调到自己给泛型容器加的一个NewItem方法就报空指针访问错,我一下懵了,查了两个小时,用版本库反复取回原版本恢复代码发现还是报错,最后发现原来我没实例化调用容器的程序里的变量,多SB的问题啊,多简单啊,我搞了两个小时,一脸懵B。

唉~大家都有这时候啊!耐心点查吧。
----------------------------------------------
-
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2019/1/21 15:55:42
10楼: 就这一段SB代码

function TBFEntityList<T>.ReadFromDataSet(ADataSet: TDataSet;
  AInitProc: TBFEtyInitProc; ACascadeProc: TBFEtyCascadeProc): Integer;
var lEty: T;
begin
  Assert(Assigned(ADataSet), 'TBFEntityList<T>.ReadFromDataSet' + #10#13 + errBFDataSetLost);
  Result := 0;
  if not ADataSet.Active then
    raise  EBFPacked.Create('试图从一个关闭的数据集中取得实体列表信息!',
      'EntityListName:' + ClassName, [edShow, edRecord], elImportant,
      'TBFEntityList<T>.ReadFromDataSet', etDBOperation,
      '524AF6C5-A713-4AEA-9570-812C8F1B1A8B', False);
  while not ADataSet.Eof do
  begin
    lEty := NewItem;
    lEty.ReadFromDataSet(ADataSet, AInitProc, ACascadeProc);
    Inc(Result);
    //上面NewItem时跳过了Notify中的AutoNotifyChange,这里补调一下
    Notify(lEty, cnAdded);
    ADataSet.Next;
  end;
end;
----------------------------------------------
-
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2019/1/21 16:05:46
11楼: 想想看,实体列表从直接读数据库,中间本来有ACascadeProc的入参用于级联子实体操作,想想又加了个AInitProc用以初始化本层实体。
改这个代码时是在增补一个程序的功能,一个程序里要从数据库里取多少实体列表,为了进入调试,要把所有调到这个的代码全改了加AInitProc参数。改完了一测,代码运行到lEty := NewItem;报错,怎么都查不出来,大多数实体列表的变量都是放在一个控制器单元的,我怎么都没想到我会在写新程序的时候在那儿漏了实例化。
可怜我头昏昏的把代码备份了又用版本管理器把代码恢复了一点点加,最后发现没实例化。我写代码现在真的是头昏昏的,对于写代码来说真的年纪大了。说了你们一定不信,我用版本管理器恢复了应该是三到四次,重写了应该是两次才发现这个简单问题。
唉~
祝愿大家在年纪到了之前找到比做程序员更轻松的工作。对犯错的朋友不要太苛求了,有人会经验不足,有时人会头昏。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲▲ -
普通会员
2019/1/21 16:13:07
13楼: 楼上的 你的 举例  只会让 楼主 更懵。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2019/1/21 16:35:27
14楼: 帖了这么多垃圾代码,让大家看了希望能对大家有一点点帮助,就是这个代码里有一个小东东,现在看上去当时的想法还挺有趣的。就是下面这段。
raise  EBFPacked.Create('试图从一个关闭的数据集中取得实体列表信息!',
      'EntityListName:' + ClassName, [edShow, edRecord], elImportant,
      'TBFEntityList<T>.ReadFromDataSet', etDBOperation,
      '524AF6C5-A713-4AEA-9570-812C8F1B1A8B', False);
这个代码里有个GUID:'524AF6C5-A713-4AEA-9570-812C8F1B1A8B'。大家能猜到是做什么的吗?
就是这个报错信息最后会在附加信息里显示这个串。这个串是在delphi中用
Ctrl+shift+G生成的。
有了这个报错你把这个串复制过来,在delphi中用 search in files一查找,delphi直接就把定位给找到了,一点就切过去了,爽不爽?
有的时候你发现报错了,项目中单元太多,又忘了在哪儿,找半天,这样找好不好?
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行39.0625毫秒 RSS