100分求解:DCOM访问实时数据库(Proficy Historian 3.1)报错unknown type

sandon 2008-02-23 08:26:30
请教一个问题:
bcb 6下我写了一个简单的MIDAS应用程序,对实时数据库(Proficy Historian 3.1)进行简单的读访问;

程序开发过程
(1)在服务器端建立remote data module,在其中加入ADOdataset,datasetprovider控件,并将其连接上数据库
(2)在客户端加入tclientdataset,tdatasourse,tdcomconnection,tdbgrid控件,把tdbgrid的datasourse设置为tdatasourse1并且tclientdataset,tdatasourse,tdcomconnection都设置好
(3)实时数据库(Proficy Historian 3.1)中有个表为ihDataRaw,其中有taganame,value,timestamp等字段.

问题:
1 设置服务器端remote data module中ADOdataset1的commandtext为 select * from ihDataRaw,运行客户端报错提示为: error:field 'tagname' is is of an unknown type.
2 设置服务器端remote data module中ADOdataset1的commandtext为 select timestamp from ihDataRaw时一切正常,没有任何问题,客户端tdbgrid中显示数据库中的timestamp值.
3.如果不用remote data module而用data module在本机用ADOdataset连接相同的数据库,ADOdataset的commandtext为 select * from ihDataRaw时,设置tdatasourse和tdbgrid,编译通过,tdbgrid中显示表ihDataRaw中的所有字段,没有问题.

这是为什么呢?希望高手指教,谢谢先.

解决问题的100分贡上,再次谢谢.
...全文
268 9 打赏 收藏 转发到动态 举报
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sandon 2008-03-11
  • 打赏
  • 举报
回复
问题还是没有得到解决,郁闷坏了,不过还是感谢各位,谢谢,结贴!
jxw1987628 2008-03-01
  • 打赏
  • 举报
回复
如果不嫌速度慢的话。可以考虑用OLE操作数据库,不需要用REmote server什么。。

用Varaint数组传递数据,,,可以不必考虑数据库什么的,前提是数据量不是很多的情况下。。。

建议!
JuncoZhan 2008-02-25
  • 打赏
  • 举报
回复
vt_bstr看起来可以转换成string,"把服务端ADOdataset查询的各字段设置为静态数据类型":
双击服务端ADOdataset-》右键菜单选添加所有字段-》删除Tagname-》右键菜单新建字段-》设置新建数据类型为string、字段类型为data、字段名为Tagname-》调整字段顺序和表中一样
如果还是不行,就要考虑ado驱动、或者bcb的版本了。我很久以前用bcb5做dcom应用的时候也是对variant支持不好,后来borland出了补丁解决了,不晓得bcb6是不是有这个毛病
sandon 2008-02-24
  • 打赏
  • 举报
回复
谢谢楼上的大哥,
我在服务端ADOdataset的FieldDefs中查看了一下taganame的Datatype为ftVariant,timestamp的Datatype为ftDataTime,这些字段的数据类型在实时数据库中已经固定死了,不能自己修改,请问一下怎样"把服务端ADOdataset查询的各字段设置为静态数据类型",谢谢
sandon 2008-02-24
  • 打赏
  • 举报
回复

在bcb 6下做多层分布系统有其它方法吗?
sandon 2008-02-24
  • 打赏
  • 举报
回复
JuncoZhan 你好,
实时数据库ProficyHistorian中的ihDataRaw结构是这样的:
ihRawData Table
Column Name Data Type Description

Tagname VT_BSTR Tagname property of the tag.

TimeStamp VT_DBTimeStamp The date and time for the data sample.

我查找了VT_BSTR,没找到什么类型,ihRawData中的这些数据项的类型不能再修改了

-----------------------------------------------
-----------------------------------------------
ydlchina 你好,
我尝试了你的方法,还是上面的错误.

JuncoZhan 2008-02-24
  • 打赏
  • 举报
回复
taganame在数据库中定义的类型是什么?能不能改成比较常见的比如varchar之类的?我对ProficyHistorian不了解
ydlchina 2008-02-24
  • 打赏
  • 举报
回复
你在TClientDataSet中使用select * from ihDataRaw试试,没用过remote data module,如果你直接使用ADODataSet,实际DataSetProvider,ClientDataSet就没有用,用不用都一样。
JuncoZhan 2008-02-23
  • 打赏
  • 举报
回复
从报告的错误信息来看意思是不能识别列tagname的数据类型,但3中说直接访问数据库时能够正确识别,于是分析可能的原因:可能是datasetprovider转换数据集时没有适用正确的数据类型,可能解决的办法:把服务端ADOdataset查询的各字段设置为静态数据类型

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告