clientdataset不能操作blob字段

ffanpeng 2005-08-18 09:30:17
xh(number)
username(varchar2(18))
vvernumber(varchar2(8))
newfile(blob)
只有这四个字段,数据库是oracle
dm.ClientDataSet7.Close;
dm.ClientDataSet7.CommandText:='select * from Yl_xx_userinf';
dm.ClientDataSet7.Open;//到这老报错
数据类型不支持



...全文
201 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ffanpeng 2005-08-18
  • 打赏
  • 举报
回复
poFetchBlobsOnDemand是不是把这个改成true
ffanpeng 2005-08-18
  • 打赏
  • 举报
回复
to cncharles(旺仔)
poAllowCommandText是不是表示客户端可以重载相关数据集的SQL语句、表的名字或存储过程
cncharles 2005-08-18
  • 打赏
  • 举报
回复
DataProvider中的Opions.poAllowCommandText要为true
ffanpeng 2005-08-18
  • 打赏
  • 举报
回复
我只拿这个处理blob字段
xiaocuo_zrf 2005-08-18
  • 打赏
  • 举报
回复
很多资料都介绍过如果用ADO处理数据会出现各种各样的问题, 如果是
Microsoft ADO Driver For Oracle 那么不能处理blob字段
如果是Oracle ADO Driver 那么处理浮点数有问题 !
很吐血的。哎。。。。。。。。。
ffanpeng 2005-08-18
  • 打赏
  • 举报
回复
必须用ado要不改得太多了
fjx99 2005-08-18
  • 打赏
  • 举报
回复
你难道是用ADO连接oracle?最好改为ODAC连接,ADO操作oracle有些麻烦

问题:Oracle中对Blob的操作不能像正常的操作,需作如下调整
增加:
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('INSERT INTO myimages(FileName,pic) VALUE(''Image1'',:pic)');
Query.ParamByName('pic').LoadFromFile('D:\Hasd.bmp',ftBlob);
Query.ExecSQL;

修改:
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('UPDATE myimages SET pic=:pic WHERE filename=''Image1''');
Query.ParamByName('pic').LoadFromFile('D:\Hasd2.bmp',ftBlob);
Query.ExecSQL;

ffanpeng 2005-08-18
  • 打赏
  • 举报
回复
问题已经解决,换了一个驱动
但是又有新的问题了
dm.ClientDataSet9.Close;
dm.ClientDataSet9.CommandText:='';
dm.ClientDataSet9.CommandText:='select xh,newfile from yL_XX_userinf';
dm.ClientDataSet9.Open;
dm.ClientDataSet9.Edit;
mystream := TMemoryStream.Create;
mystream.loadfromfile(GetCurrExeDIR+'TCKWJ_YL.exe');
mystream.seek(0,soFromBeginning);
UpdataNewFile.LoadFromStream(myStream);//在这里又出错了不能加载进数据库
dm.ClientDataSet1.FieldByName('VerNumber').asCurrency := (VerServer+0.1);
dm.ClientDataSet1.ApplyRange;
ffanpeng 2005-08-18
  • 打赏
  • 举报
回复
还是数据类型不支持
ffanpeng 2005-08-18
  • 打赏
  • 举报
回复
还是不行
cncharles 2005-08-18
  • 打赏
  • 举报
回复
还有DataProvider中的Opions.poAllowCommandText要为true, 理由如下

By default FetchOnDemand is true, meaning that the client dataset fetches additional packets of data as needed (for example, as a user scrolls through data, or conducts a search). If the provider does not automatically include BLOB fields or nested detail sets in data packets, setting FetchOnDemand to true causes the client dataset to fetch these values when needed as well.

Set FetchOnDemand to false only if your application contains code that explicitly fetches data packets as needed using the GetNextPacket method. Similarly, if FetchOnDemand is false and the provider does not include BLOB data by default (Options includes poFetchBlobsOnDemand), the application must fetch BLOB fields explicitly using the FetchBlobs method. If the provider does not include nested detail sets (Options includes poFetchDetailsOnDemand) and FetchOnDemand is false, the application must fetch nested details explicitly using the FetchDetails method.
cncharles 2005-08-18
  • 打赏
  • 举报
回复
是的,简单说就是否允许数据集(ClieDataSet)执行语句, 还有你的表要有一个主键.
ffanpeng 2005-08-18
  • 打赏
  • 举报
回复
还有谁知道,大家一起讨论
分不够可以在家
2.35.0.12 26-Dec-02 打开小型查询的速度优化(2378) MSConnection.Options已添加(2454) 添加了有限的MSConnection.ConnectString支持(2356) 现在从服务器获取输出字符串和(var)字节参数 最大长度不依赖于设置Param.Size(2355) DBMonitor客户端实现已移至COM服务器 修复了复杂表名的错误 修复了DT编辑器中丢失数据的常见错误(D2137) 修复了DataModule中设计时MSConnection的错误(O2290) 修复MSTable错误的设计时编辑器(2433) 优化服务器游标的BLOB字段发布(2117) 修复ClientDataSet的主/明细关系的错误(O2423) 修复了OutOfMem(1979)的一些错误 2.30 30-Sep-02 Delphi 7支持 ftString和ftVarBytes类型的新内存管理模型。允许显着减少大型表提取时的内存使用量。由FlatBuffers数据集选项控制 在CachedUpdates模式下支持blob字段 2.05 09-Aug-02 DBMonitor支持 2.00 18-Jul-02 支持服务器游标 支持多个结果集的查询 性能提升 打开查询而不支持将所有行提取到客户端(FetchAll = False) 增加了单向支持 快速获取身份价值 StoredProc支持刷新 FullRefresh支持 执行更新和删除时检查旧行值 在从提交到回滚的打开事务的关闭连接上更改了行为 1.30 21-Mar-02 支持C ++ Builder 6 1.20 08-Nov-01 添加了TMSParam类来表示参数 添加了查询分析器和企业管理器集成 在刷新时加速获取身份值 1.00 26-Aug-01 SDAC的第一个版本
很久没有发布东东了,今天看到盒子上有朋友发布了个三层的东东, 下来大概看了看,貌似使用起来不太方便,曾经用过ASTA和RmoObject,都不是那么让人满意,BUG多,并且庞大需要安装,使用十分不方便。 为了继续支持我喜欢的DELPHI和可爱的盒子, 特发布个自己写的远程数据库对象希望能给大家平常的工作带来便利和高效(偶自己和同事们都用了挺长时间,十分稳定易用)。 用DELPHI的朋友少不了要和数据库打交道,一般小程序都使用ACCESS或者SQLLITE做数据库感觉十分方便,不用装数据库服务端,客户端不用单独装驱动, 发布程序时直接目录一拷贝就完事,但缺点是不方便从其它计算机对它进行访问, 有了偶这个东东,就可以很方便容易的实现咯。 ps : 就是连接Oracle和mysql,也可以不用装驱动或少附带发布多余的DLL。 当前版本 mmzmagicrmo v1.8 更新历史 v1.0 单元实现 v1.1 解决不支持自增长字段的问题 v1.2 解决id号必须是第1个字段的问题 v1.3 为增加速度,做缓冲不用每次生成语句 ,改变自动更新时导致filter属性暂用的方式 v1.4 在sabason 兄的热心帮助下,解决了流试传输存在的问题,大大提高了传输效率 20100413 v1.5 全面修改为支持高效率的UniDAC数据库驱动套件 和ClientDataset (原来是ADO方式)支持所有主流数据库,大幅提高传输效率,且使用方法没有改变 v1.6 解决流传输存在的BUG ,修正最后一个字段blob字段导致语句生成错误的BUG v1.7 增加服务端sys.ini文件配置客户端登陆权限,增加批量执行SQL语句接口 v1.8 增加服务端提供自动升级功能,可以升级多个文件或者目录,可选择强制升级或者客户端可选升级 使用步骤 解压后找个地方存放 将GobUnit目录添加到delphi的搜索路径 将DXSockEnt30(我改过bug的版本)的3个子目录也添加到delphi的搜索路径 即可使用和编译所有偶提供的代码 FAQ: 这个东东都提供什么功能? 答:提供最简单方便高效的方式,通过CDS+UniDAC实现远程数据库 这个东东为什么不封装成控件? 答:本类以单元形式封装,只要加到搜索路径后直接引用即可,无需经过安装等麻烦的步骤。 这个东东适合应用在什么场合? 答:适合应用于小型分布式程序。 这个东东掌握起来有难度吗? 答:没有任何难度,就和你开发本地数据程序一样简单。 这个东东可以应用在我已有的程序里吗? 答:由于我使用的是TClientDataset作为数据集载体,所以无需更改为其他控件,现有的本地数据库程序也可以非常容易的改造为支持分布式数据库。 这个东东稳定吗? 答:经自己长期做小白鼠广泛的实际应用实践,发现方便,稳定。 服务端的端口号是多少? 答:服务端的端口号可以随意设置,只要不和其他程序冲突就可以,并且客户端连接服务端时必须端口一致. 如果服务端重启了客户端需要重启吗? 答:不用,客户端只要连接上服务端以后就有自动断线重连的功能。 我在使用时要注意什么? 答:如果你要用TClientDataset对象的Insert,Edit,Append,Post方法新增数据时,我会占用这个对象的BeforePost和BeforeDelete事件。 这个东东免费吗? 答:完全免费,并且开放所有源代码,你可以随意改进,传播它,当然如果更好用了,记得给我也发一份 :)(要保留偶的版权和注释信息哦) 这个东东使用到了那些控件? 答:第3方Dxsock,TClientDataset,UniDAC 同时发布的还有我自己积累的几个常用单元,有日志,调试,tcp的通用服务和客户端模块等,同样都是十分有用的东东。 这个东东有demo程序吗? 答:有最简单的示范程序,但时间关系只写了最简单的演示代码,还有很多值得你去挖掘的实用接口和单元。 我有了改进版本,怎么联系这个东东的作者? 答:QQ 22900104 ,Email 22900104@qq.com 马敏钊 发布这个东东的目的是什么? 答:好用的东东大家分享,共同学习,共同进步,希望大家都能发扬开源精神。 构架说明: 大概是这样的,偶有一个服务器对象,负责提供数据库服务,在需要提供数据服务的程序里创建它即可。 使用起来十分简单 首先引用服务端单元 uses UntRmodbSvr; //创建远程服务对象 (参数1 服务端口号 日志对象,如果不需要记录日志请填nil) Gob_RmoDBsvr := TRmodbSvr.Create(FSvrPort, nil); //连接数据库 可以是ADO支持的所有数据库 调用TDBMrg提供的获取各种数据库的链接字符串即可,这里连接Access数据库 Gob_RmoDBsvr.ConnToDb(TDBMrg.GetAccessConnStr('cfg.mdb')); 到此为止,2行代码使你的这个程序具有了将数据库发布出去的能力,其它机器的程序可以方便的通过它访问到数据库,像使用本地数据库一样。 客户端只需连接服务端即可,不管服务端是什么样的数据库,无需安装任何数据库驱动。 uses UntRemSql; //创建客户端对象 RmoClient := TRmoHelper.Create(); //连接服务端 填入服务端地址和端口(与服务端端口一致即可) Result := RmoClient.ReConnSvr(ISvrIP, Iport); 2行代码使你的客户端程序具有了方便的访问到远端的数据库,像使用本地数据库一样,并且你原有的单机数据库程序可以很方便改为远程数据库。 具体使用方法可以查看DEMO程序

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧