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 |