首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Simatic WinCC灵活的VB脚本中使用标签

如何在Simatic WinCC灵活的VB脚本中使用标签
EN

Stack Overflow用户
提问于 2015-04-23 14:14:00
回答 2查看 3.2K关注 0票数 0

我正在尝试将一些Wincc标记值插入到SQL服务器中。为此,我首先定义了一个sql连接,并测试了用一个简单的SQL标记插入粗略的值,如下所示:

代码语言:javascript
复制
strSQL = "INSERT INTO Test (T1,T2) Values (3,4)"

我看到可以在这个SQL cmd中使用变量。

代码语言:javascript
复制
const d = 5
strSQL = "INSERT INTO Test (T1,T2) Values (" & d & ",4)"

我应该如何使用Wincc标记而不是这个变量?

EN

回答 2

Stack Overflow用户

发布于 2016-02-23 15:39:15

我可以与你分享一些代码,我使用WinCC flexible 2008在工厂完成的任何配方后将一个简单的记录插入数据库中。

代码语言:javascript
复制
'------------------------------------------------------------
Dim sServer,sDataBaseName ,sConn,oConn,oRS, FetchData
Dim sUserName,sPassWord
Dim adOpenKeyset, adLockOptimistic, adCmdTable
Dim mRecordstr, tableName
Dim field


Dim loc_PRESSURE
Dim loc_ENDDATETIME
Dim loc_RECEIPE
Dim loc_BEGINDATETIME
Dim loc_USER
Dim loc_TEMPERATURE

loc_USER = SmartTags("DatabaseSQL\var_USER")
loc_BEGINDATETIME = CDate(SmartTags("DatabaseSQL\var_BEGINDATETIME"))
loc_ENDDATETIME = CDate(SmartTags("DatabaseSQL\var_ENDDATETIME"))
loc_RECEIPE = SmartTags("DatabaseSQL\var_RECEIPE")
loc_PRESSURE = SmartTags("DatabaseSQL\var_PRESSURE")
loc_TEMPERATURE = SmartTags("DatabaseSQL\var_TEMPERATURE")



sServer = "192.168.40.3" 'e.g
sDataBaseName = "DBPLC"
sUserName = "USER"'INSERT USER NAME ENABLED IN DATABASE
sPassWord = "SECRETPASSWORD" '
tableName = "TABLE_PLC"

adOpenKeyset = 1
adLockOptimistic = 3
adCmdTable = 2

sConn="DRIVER={SQL Server};SERVER=" & sServer & ";DATABASE=" & sDataBaseName & ";Encrypt=NO;"
Set oConn = CreateObject("ADODB.Connection")
oConn.CommandTimeout = 36000
oConn.Open sConn, sUserName, sPassWord


Set FetchData = CreateObject("ADODB.Recordset")

'FetchData.open "SELECT * FROM TABLE_PLC", oConn, 3
FetchData.Open tableName, oConn, adOpenKeyset, adLockOptimistic, adCmdTable

FetchData.AddNew

FetchData.Fields("USER").Value = loc_USER
FetchData.Fields("BEGINDATETIME").Value = loc_BEGINDATETIME
FetchData.Fields("ENDDATETIME").Value  = loc_ENDDATETIME
FetchData.Fields("RECEIPE").Value  = loc_RECEIPE
FetchData.Fields("PRESSURE").Value  = loc_PRESSURE
FetchData.Fields("TEMPERATURE").Value  = loc_TEMPERATURE


FetchData.Update

FetchData.Close
oConn.Close
票数 0
EN

Stack Overflow用户

发布于 2015-05-26 04:25:07

尝试使用带参数的参数化SQL查询,并将变量写入此参数中。并检查sql表中变量和数据字段的数据类型-它们必须相同。这是解决你问题的唯一可能的方法。

这是C++示例:

代码语言:javascript
复制
ADOQuery1->SQL->Add("INSERT INTO Your_table (field1, field2, field3, field4, field5, field6, field7, field8) VALUES (:param1,'"+Name_text->Text+"', '"+Type_text->Text+"', :param5, :param4, :param3, :param2, '"+Comment_text->Text+"')");
ADOQuery1->Parameters->ParamByName("param5")->Value= StrToFloat(edit1_text->Text);
ADOQuery1->Parameters->ParamByName("param4")->Value= StrToFloat(edit2_text->Text);
ADOQuery1->Parameters->ParamByName("param3")->Value= StrToFloat(edit3_text->Text);
ADOQuery1->Parameters->ParamByName("param2")->Value= StrToFloat(edit4_text->Text);
ADOQuery1->Parameters->ParamByName("param1")->Value= StrToInt(edit5_text->Text);
ADOQuery1->ExecSQL();

你可以在VBS上重写类似这样的东西。

看这里(看起来像是vbs代码):How do I create a parameterized SQL query? Why Should I?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29815156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档