我正在尝试将一些Wincc标记值插入到SQL服务器中。为此,我首先定义了一个sql连接,并测试了用一个简单的SQL标记插入粗略的值,如下所示:
strSQL = "INSERT INTO Test (T1,T2) Values (3,4)"我看到可以在这个SQL cmd中使用变量。
const d = 5
strSQL = "INSERT INTO Test (T1,T2) Values (" & d & ",4)"我应该如何使用Wincc标记而不是这个变量?
发布于 2016-02-23 15:39:15
我可以与你分享一些代码,我使用WinCC flexible 2008在工厂完成的任何配方后将一个简单的记录插入数据库中。
'------------------------------------------------------------
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发布于 2015-05-26 04:25:07
尝试使用带参数的参数化SQL查询,并将变量写入此参数中。并检查sql表中变量和数据字段的数据类型-它们必须相同。这是解决你问题的唯一可能的方法。
这是C++示例:
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?
https://stackoverflow.com/questions/29815156
复制相似问题