我想通过VB脚本建立与数据库关联,将数据存入。
1、西门子技术人员曾经暗示通过ODBC或ADO打开或关闭数据库的执行时间很长。因为我信息存储的时间间隔最短2S,所以想问一下能不能通过这个方式将数据存入。
2、西门子技术人员提供的程序如下:
ODBC:
'VBS108
Dim objConnection
Dim objCommand
Dim objRecordset
Dim strConnectionString
Dim strSQL
Dim lngValue
Dim lngCount
strConnectionString = "Provider=MSDASQL;DSN=riqi;UID=;PWD=;"
lngValue = Now ’ Date/Time/Now
strSQL = "INSERT INTO Table1 (riqi) VALUES ('" & lngValue & "')" ’字符型
Set objConnection = CreateObject("ADODB.Connection")
objConnection.ConnectionString = strConnectionString
objConnection.Open
Set objRecordset = CreateObject("ADODB.Recordset")
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = strSQL
objCommand.Execute
Set objCommand = Nothing
objConnection.Close
Set objRecordset = Nothing
Set objConnection = Nothing
或ADO:
Dim objConnection
Dim strConnectionString
Dim lngValue
Dim strSQL
Dim objCommand
strConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=WinCC;Data Source=LEMONVISTA"
lngValue = HMIRuntime.Tags("AccessTag").Read
strSQL = "INSERT INTO WINCC_DATA (TagValue) VALUES (" & lngvalue & ")" ’数值
Set objConnection = CreateObject("ADODB.Connection")
objConnection.ConnectionString = strConnectionString
objConnection.Open
Set objCommand = CreateObject("ADODB.Command")
With objCommand
.ActiveConnection = objConnection
.CommandText = strSQL
End With
objCommand.Execute
Set objCommand = Nothing
objConnection.Close
Set objConnection = Nothing
3、我的程序是:
Dim objConnection
Dim objCommand
Dim objRecordset
Dim strConnectionString
Dim strSQL
Dim lngValue
Dim lngCount
Dim zhi
Dim G
Set zhi =HMIRuntime.Tags ("值")
Set G =HMIRuntime.Tags ("归档")
G.Read
If G.Value=1 Then
Set objConnection =CreateObject("ADODB.Connection")
strConnectionString = "Provider=WINCCOLEDBProvider.1;Catalog = CC_TEST_11_01_05_14_55_59R;Data Source=.\WINCC"
MsgBox("00000")
lngValue = HMIRuntime.Tags ("名称").read
objConnection.ConnectionString = strConnectionString
MsgBox("11111")
objConnection.Open
strSQL = "INSERT INTO Table_2 (MC) VALUES ('" & lngValue & "')" '字符型
Set objRecordset = CreateObject("ADODB.Recordset")
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = strConnectionString
objCommand.CommandText = strSQL
MsgBox("66666")
objRecordset=objCommand.Execute
MsgBox("77777")
Set objCommand = Nothing
objConnection.Close
Set objRecordset = Nothing
Set objConnection = Nothing
MsgBox("55555")
zhi.Read
zhi.Value =zhi.Value+1
zhi.Write
End If
在调试中“objRecordset=objCommand.Execute”后不能往下执行,不能弹出77777的窗口。
我看过很多通过ODBC建立与数据库链接的程序,大体上都是一样的,ADO的程序跟ODBC的差不多
能详细说明链接和调试方法吗?
问题补充:
我建立与数据库的链接,目的是要向数据库中写入数据,当新的数据来时自动添加一行,一直就这么存储下去。
我并不需要查询数据库里面的数据,然后写入EXCEL表格。
能不能确认几个信息:
1、与数据库链接时,用户名,密码的表达方式。
2、数据库链接的名字,表名等的表达方式(这个表格是在数据库里单独建立吗?我是单独先建了一个),如:CC_test110_11_01_20_10_33_36R,Table_2。
3、变量的链接或表达方式,如字符串或数值的表达方式。
4、ODBC等有关的操作信息
等等我没考虑到的关键信息?
非常感谢
最佳答案
可以参考:
http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_id=62690&cid=1032
问题补充:
一般数据库的ADO操作代码如下:
Dim cnn As String
cnn = "Provider=SQLOLEDB.1;Password=3333;Persist Security Info=True;User ID=sa;Initial Catalog=dbuser;Data Source=VECTRON11\WINCC"
Set cc1 = CreateObject("adodb.connection")
cc1.ConnectionString = cnn
cc1.CursorLocation = 3
cc1.Open
Dim rst As Object
Set rst = CreateObject("adodb.recordset")
Dim ssql As String
ssql = "select * from TagUncompressed where ValueID=" & txtid.Text & " and TimeStamp between '" & txtstime.Text & "' and '" & txtetime.Text & "'"
rst.Open ssql, cc1
1、与数据库连接时用户名和密码看cnn字符串中的password、user id等信息。
2、数据库的名字看cnn字符串中Initial Catalog,而表名从ssql字符串中看得到,比如查询语句是from后面的就是表名(数据库和表你可以自己新建一个,也可以用系统自带的;数据库我一般都用dbuser,表一般都是用自己建的)
3、变量的表达式主要体现在ssql字符串中,主要是对数据库操作
4、数据库的住哟操作:
查询语句:
ssql =select * from infor where ValueID=" & txtid.Text & " and TimeStamp between '" & txtstime.Text & "' and '" & txtetime.Text & "'"
插入一行:
ssql ="INSERT INTO infor " _
& "(FirstName,LastName, Title) VALUES " _
& "('Harry', 'Washington', 'Trainee');"
修改值:
ssql ="UPDATE infor " _
& "SET ReportsTo = 5 " _
& "WHERE ReportsTo = 2;"
其中infor为表名,ssql中的信息比如表名和字段可以固定也可以用变量连接。另外数据库操作完成以后cc1,rst等数据库都得释放,如Set cc1 = Nothing
Set rst = Nothing
cc1.Close
提问者对于答案的评价:
其实我看的很晕菜。
一个小问题让大家费心了。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc266832.html