技术论坛

C脚本使用WinCCOLEDBProvider为何总是报错呢?

作者 主题
至圣

经验值: 11495
发帖数: 1028
精华帖: 39
主题:【求助】C脚本使用WinCCOLEDBProvider为何总是报错呢?
推荐帖


只看楼主 只看精华 楼主 2018-01-31 21:14:16

Provider=WinCCOLEDBProvider.1;Initial Catalog=CC_OS_1__17_10_24_13_39_55R;Data Source=.\WINCC

Tag:R,'SystemArchive\pidLevel/1.MV#Value','0000-00-00 00:10.00.000','0000-00-00 00:00.00.000' 


//报错内容

Microsoft OLE DB Service Components: Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.

ADODB.Recordset: The connection cannot be used to perform this operation. It is either closed or invalid in this context.

property Close not available



//C脚本

#pragma code("kernel32.dll")

#define GetObject GetObject


__object *cn=NULL; 

__object *rs=NULL; 


int i,RsCount;

char sql[256];

char* DataSourceNameRT;

char LocalComputerName[30];

char connstr[256];

//我试过了可以访问SQLOLEDB用户归档,但是过程值归档不行。

DataSourceNameRT = GetTagChar("@DatasourceNameRT");

strcat(connstr,"Provider=WinCCOLEDBProvider.1;Initial Catalog=");

strcat(connstr,DataSourceNameRT);

strcat(connstr,";Data Source=.\\WINCC");

printf("%s",connstr);


cn=__object_create("ADODB.Connection");

rs=__object_create("ADODB.RecordSet");

strcat(sql,"Tag:R,'SystemArchive\\pidLevel/1.MV#Value','0000-00-00 00:10.00.000','0000-00-00 00:00.00.000' ");

printf("%s",sql);

cn->open(connstr);

rs->Open(sql,cn,3,1);

//RsCount=rs->RecordCount;

//rs->MoveFirst();

rs->Close;

cn->Close;


救救我这个小菜鸟吧,不要VBS的脚本。


 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1460272&b_id=5&s_id=0&num=12

侠圣

经验值: 4092
发帖数: 565
精华帖: 4
回复:C脚本使用WinCCOLEDBProvider为何总是报错呢?
推荐帖


只看楼主 只看精华 1楼 2018-01-31 21:28:35

 好像是没有授权。Connectivity Pack是要授权的

用户归档记录是非压缩数据,建立与数据库的连接后,可以直接用SQL查询,等于直接操作数据库。归档数据是压缩数据需要借助Connectivity Pack来提供数据,Connectivity Pack安装授权才能提供服务。


 
以下网友喜欢您的帖子:

  
版主

经验值: 69061
发帖数: 12270
精华帖: 59
回复:C脚本使用WinCCOLEDBProvider为何总是报错呢?
推荐帖


只看楼主 只看精华 2楼 2018-01-31 22:23:59

为啥不用VBS呢,官方的例子都是VBS脚本的啊

c语言表示看不懂啊,不明白


Q群:https://jq.qq.com/?k=9BDuEgf6
以下网友喜欢您的帖子:

  
版主

经验值: 17323
发帖数: 8474
精华帖: 18
回复:C脚本使用WinCCOLEDBProvider为何总是报错呢?
推荐帖


只看楼主 只看精华 3楼 2018-02-01 08:37:48

Provider=WinCCOLEDBProvider.1;Catalog=CC_OS_1__17_10_24_13_39_55R;Data Source=.\WINCC

将连接字符串中的“Initial” 删除。


无论成与败,无论甜与苦,我还是我。
以下网友喜欢您的帖子:

  
至圣

经验值: 11495
发帖数: 1028
精华帖: 39
回复:C脚本使用WinCCOLEDBProvider为何总是报错呢?


只看楼主 只看精华 楼主 4楼 2018-02-01 14:37:25
以下是引用城外之人在2018-02-01 08:37:48的发言 >3楼

Provider=WinCCOLEDBProvider.1;Catalog=CC_OS_1__17_10_24_13_39_55R;Data Source=.\WINCC

将连接字符串中的“Initial” 删除。

向大神磕头。成了。

现在有新问题哦!求大神再伸神奇之手。 

Provider=WinCCOLEDBProvider.1;Catalog=CC_OS_1__17_10_24_13_39_55R;Data Source=.\WinCC

Tag:R,('SystemArchive\pidLevel/1.MV#Value'; 'SystemArchive\pidLevel/1.PV_Out#Value'; 'SystemArchive\pidLevel/1.SP#Value'),'0000-00-00 00:10:00.000','0000-00-00 00:00:00.000' 

0 //返回的数据个数总是0,我用trend控件看了,都有数据哦。难道跟一楼说的那样,需要授权,我记得这个组件好像已经免费了啊!~



 
以下网友喜欢您的帖子:

  
版主

经验值: 17323
发帖数: 8474
精华帖: 18
回复:C脚本使用WinCCOLEDBProvider为何总是报错呢?


只看楼主 只看精华 5楼 2018-02-02 08:43:27


我怀疑是你的归档变量名中的"#"惹的祸。

用ValueID代替ValueName吧。不过这又牵涉到运行数据库中的归档表(Archive)了。

这个表中,有ValueID,ValueName字段,需要你用ValueName来查找到ValueID。


无论成与败,无论甜与苦,我还是我。
以下网友喜欢您的帖子:

  
至圣

经验值: 11495
发帖数: 1028
精华帖: 39
回复:C脚本使用WinCCOLEDBProvider为何总是报错呢?


只看楼主 只看精华 楼主 6楼 2018-02-02 15:38:57
以下是引用城外之人在2018-02-02 08:43:27的发言 >5楼


我怀疑是你的归档变量名中的"#"惹的祸。

用ValueID代替ValueName吧。不过这又牵涉到运行数据库中的归档表(Archive)了。

这个表中,有ValueID,ValueName字段,需要你用ValueName来查找到ValueID。

我之前试过了,我直接用sql, select * from archive 里查到了这些id, 不幸的是依然返回的是0。
 
以下网友喜欢您的帖子:

  
版主

经验值: 17323
发帖数: 8474
精华帖: 18
回复:C脚本使用WinCCOLEDBProvider为何总是报错呢?


只看楼主 只看精华 7楼 2018-02-03 09:31:08

你的WinCC版本是多少?

我记得WinCC V6.0 SP1只支持单变量查询;从WinCC V6.0 SP3开始吧,才支持多变量查询。

你再试试单变量查询,看看能不能查询到数据。


无论成与败,无论甜与苦,我还是我。
以下网友喜欢您的帖子:

  
至圣

经验值: 11495
发帖数: 1028
精华帖: 39
回复:C脚本使用WinCCOLEDBProvider为何总是报错呢?
精华帖精华帖星级1级 推荐帖


只看楼主 只看精华 楼主 8楼 2018-02-06 05:03:17
以下是引用城外之人在2018-02-03 09:31:08的发言 >7楼

你的WinCC版本是多少?

我记得WinCC V6.0 SP1只支持单变量查询;从WinCC V6.0 SP3开始吧,才支持多变量查询。

你再试试单变量查询,看看能不能查询到数据。

找到原因了。连接数据库时cn->cursorlocation=3就返回了数据。仔细上网百度了ADO的接口才发现是少组态了接口数值。其实对比:vbs连接数据库的代码就应该发现这个问题的。唉,菜鸟路多坎坷
 
精华帖版主置评: 相信经过这一系列的折腾,对数据库的操作应该是熟练了。
以下网友喜欢您的帖子:

  
奇侠

经验值: 7985
发帖数: 346
精华帖: 1
回复:C脚本使用WinCCOLEDBProvider为何总是报错呢?


只看楼主 只看精华 9楼 2018-03-06 06:59:20
以下是引用宁超在2018-02-06 05:03:17的发言 >8楼:找到原因了。连接数据库时cn->cursorlocation=3就返回了数据。仔细上网百度了ADO的接口才发现是少组态了接口数值。其实对比:vbs连接数据库的代码就应该发现这个问题的。唉,菜鸟路多坎坷
以下是引用城外之人在2018-02-03 09:31:08的发言 >7楼:你的WinCC版本是...

引用7楼详细内容:

你的WinCC版本是多少?

我记得WinCC V6.0 SP1只支持单变量查询;从WinCC V6.0 SP3开始吧,才支持多变量查询。

你再试试单变量查询,看看能不能查询到数据。

宁工,您好,可不可以将您C脚本代码共享一下,让我学习学习,先谢谢啦!


^_^o~ 努力!
以下网友喜欢您的帖子:

  
侠圣

经验值: 3886
发帖数: 556
精华帖: 1
回复:C脚本使用WinCCOLEDBProvider为何总是报错呢?


只看楼主 只看精华 10楼 2018-03-06 07:55:34
学习了,这个非常好!
精益求精
以下网友喜欢您的帖子:

  
侠士

经验值: 1413
发帖数: 157
精华帖: 6
回复:C脚本使用WinCCOLEDBProvider为何总是报错呢?


只看楼主 只看精华 11楼 2018-05-16 14:56:38

学习一下………………


活到老,学到老。
以下网友喜欢您的帖子:

  
侠圣

经验值: 3723
发帖数: 486
精华帖: 1
回复:C脚本使用WinCCOLEDBProvider为何总是报错呢?


只看楼主 只看精华 12楼 2018-05-28 22:00:50

宁工太谦虚。


永无止境!
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
C脚本使用WinCCOLEDBProvider为何总是报错呢?
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。