工控编程吧

标题: 用VB编写程序将WINCC归档数据导入表格中,数据库无法连接 [打印本页]

作者: baikhgmv    时间: 2016-9-9 21:13
标题: 用VB编写程序将WINCC归档数据导入表格中,数据库无法连接
用VB编写程序将WINCC归档数据导入表格中,数据库无法连接用VB编写程序将WINCC归档数据导入表格中,adodb.connection的err.number不为0,用GetConState测试数据库连接状态为关闭。搜索了很多网页,代码没有问题,就是无法连接数据库,这个项目是复制过来的,已经更改了项目的计算机名,跟这个有关系吗?希望有人能解答,万分感激!


-------有关系。 关系很大。




----谢谢万斑竹,这种情况可以重新安装数据库来解决吗?


-------补充一下:读取内部变量@DatasourceNameRT的值,作为连接数据库的DSN。


------- sPro = "Provider=WinCCOLEDBProvider.1;"

  Set DSNname=HMIRuntime.Tags("@DatasourceNameRT")
    DSNname.Read
sDsn= "Catalog="&DSNname.value&";"
sSer = "Data Source=.\WinCC"
sCon = sPro + sDsn + sSer

这是连接字符串,用的内部变量,commandType=1。用内部变量测试,手动更改内部变量的值,WINCC的归档数据有变化,但EXCLE表格不输出,程序显示数据库没有连接。


------请大神看看哪里有错,如果是因为项目复制过来的问题,应该怎么解决呢?重新安装数据库,还是用WINCC项目复制器重新复制呢?在WINCC工具里边没有找到项目复制器。

sPro = "Provider=WinCCOLEDBProvider.1;"

sDsn = "Catalog=CC_mm_WinC_11_09_02_11_26_33R;"
sSer = "Data Source=.\WinCC"
sCon = sPro + sDsn + sSer


Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = sCon
conn.CursorLocation = 3
conn.Open

If err.number<>0 Then
   MsgBox "打开连接错误!"
   End If
   err.clear

sSql = "TAG:R,'bm\Number_b','"+StrBtime+"','"+StrEtime+"'“

Set oRs = CreateObject("ADODB.Recordset")

Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1
Set oCom.ActiveConnection = conn
oCom.CommandText = sSql
Set oRs = oCom.Execute

If GetConState(conn.State) = "adStateClosed" Then  
      MsgBox "数据库连接失败"

End If


-------第二行应该有问题。


-------谢谢您~改成这样也无法连接:

Set DSNname=HMIRuntime.Tags("@DatasourceNameRT")
    DSNname.Read
sDsn= "Catalog="&DSNname.value&";"


------你把你读出的在界面上做个变量显示出来看对不对,用数据库读的时候必须在运行wincc.


---------定义了几个变量进行测试,改变变量的值,归档表格控件中变量值也跟着改变,但是导不出表格。

SQL项目数据库bdo.archive 可以正常显示最后一次操作的时间,但是看不到值,可能SQL对这些值是隐藏的。

程序中,adodb.connection的err.number不为0,用GetConState测试数据库连接状态为关闭,不能成功连接数据库,但是激活WINCC之后没有不能连接数据库的提示框,我是通过测试adodb.connection的err.number和GetConState,并用msg显示数据库连接状态的。感觉是因为项目复制到新电脑,更改项目的计算机名称导致的,但是怎么解决呢?我可以删除项目中的数据库文件,重新生成吗?


--------1、用WinCC项目复制器拷贝出来,再打开拷贝的项目文件。

2、sDsn= "Catalog=" & HMIRuntime.Tags("@DatasourceNameRT").Read & ";"

这样,连接部分应该没问题。

-------sSql = "TAG:R,'bm\Number_b','"+StrBtime+"','"+StrEtime+"'“

这行最后的双引号,是中文的双引号,肯定是不行的,你查查。




----问题解决了!谢谢各路大神的帮助!数据库的连接和命令的执行都没有问题,可能就是因为WINCC项目是复制过来的,导致数据库无法导通。用OLE.DB Tag and Alarm Expert . xls 试了一下,可以成功导出数据,再运行程序,就能连接了,问题解决得有点莫名其妙、、


------自己编写的程序,查询到open(打开)adodb.connection的err.number不为0,说明数据库连接没有打开,是有错误的。但是用西门子自己的OLE.DB Tag and Alarm Expert . xls 可以导出归档数据,之后再运行自己的程序,查询open(打开)adodb.connection的err.number为0,说明数据库连接打开正常。貌似西门子自己的OLE.DB Tag and Alarm Expert . xls访问权限高。

没有找到大神们说的项目复制器,可能一开始装WINCC的时候没有安装,可能这是一个简便的解决方法。



-------第一个&的后边和第二个&的前边是有空格的,这个刚检查出来,谢谢啦






欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4