请教:在WINCC VBS中使INSERT INTO 语句不能插入字符串数据 点击:3599 | 回复:6



dxw

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:6帖 | 25回
  • 年度积分:0
  • 历史总积分:98
  • 注册:2004年6月28日
发表于:2009-04-15 12:35:15
楼主

请教:在WINCC VBS中使INSERT INTO 语句不能插入字符串数据,而插入数字字符则可以, 而在VB6中则都可以,是不是引号的问题,单请大侠们帮忙!谢谢!

程序采用WINCC帮助里的例子如下:

Private Sub Command2_Click()


Dim objConnection

Dim strConnectionString

Dim lngValue

Dim strSQL

Dim objCommand

strConnectionString = "Provider=MSDASQL;DSN=YY;UID=;PWD=;"

lngValue = "dxws"

strSQL = "INSERT INTO WINCC_DATA (mz) 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
End Sub

以上在VB6中通过,但在WINCC中不行

lngValue = "dxws" 换成lngValue = "1234" 则可在WINCC中通过

strSQL = "INSERT INTO WINCC_DATA (mz) VALUES(‘" & lngValue & " ‘);" 这句话在WINCC VBS里应如何写?请详细说明呀,多谢!




dxw

  • 精华:0帖
  • 求助:1帖
  • 帖子:6帖 | 25回
  • 年度积分:0
  • 历史总积分:98
  • 注册:2004年6月28日
发表于:2009-04-15 12:45:55
1楼
呵呵,搞了很久了,原来以上的程序在WINCC中也没有问题,,呵呵,如果变量是日期,等其它类型的呢,是否还会出现问题呢?呵呵, 有谁能说说 &号,‘号" 在使用中应注意哪些问题?

dxw

  • 精华:0帖
  • 求助:1帖
  • 帖子:6帖 | 25回
  • 年度积分:0
  • 历史总积分:98
  • 注册:2004年6月28日
发表于:2009-04-15 13:15:41
2楼
http://www.ad.siemens.com.cn/club/bbs/post_elite.asp?b_id=5&a_id=530192看了这里的程序,也有关于这方面的疑问


在全局动作中写入如下代码:

Function action

Dim objConnection

Dim strConnectionString

Dim P1101VALUE,P1102VALUE,P1103VALUE,T1101VALUE,T1102VALUE,T1103VALUE

Dim strSQL

Dim objCommand

Dim DsnStr

Dim dt

Dim UserName

DsnStr=HMIRuntime.Tags("@DatasourceNameRT").Read ‘取当前的DSN值


strConnectionString = "Provider=MSDASQL;DSN="&DsnStr&";UID=;PWD=;"

HMIRuntime.Trace strConnectionString


dt=Now()


P1101Value = HMIRuntime.Tags("P1101_PV").Read

P1102Value = HMIRuntime.Tags("P1102_PV").Read

P1103Value = HMIRuntime.Tags("P1103_PV").Read

T1101Value = HMIRuntime.Tags("T1101_PV").Read

T1102Value = HMIRuntime.Tags("T1102_PV").Read

T1103Value = HMIRuntime.Tags("T1103_PV").Read

UserName = HMIRuntime.Tags("@CurrentUserName").Read ‘取当前操作员


HMIRuntime.Trace p1101value

strSQL = "INSERT INTO WINCC_DATA (OP,DT,P1,P2,P3,T1,T2,T3) VALUES ("

strsql=strsql+"‘"& UserName &"‘"

strsql=strsql+",‘"&dt&"‘"

strSql=StrSql+","& P1101Value &""

strSql=StrSql+"," & P1102Value &""

strsql=strsql+","& P1103Value &""

strsql=strsql+","& T1101Value &""

strsql=strsql+","& T1102Value &""

strsql=strsql+","& T1103Value &")"

Set objConnection = CreateObject("ADODB.Connection")

objConnection.ConnectionString = strConnectionString

objConnection.Open

Set objCommand = CreateObject("ADODB.Command")

HMIRuntime.Trace "Ok"

HMIRuntime.Trace strsql

objCommand.ActiveConnection = objConnection

objCommand.CommandText = strSQL

HMIRuntime.Trace "Ok1"

objCommand.Execute

Set objCommand = Nothing

objConnection.Close

Set objConnection = Nothing


End Function

设置每30秒触发一次。把数据写入数据库中。接下来是如何实现报表的格式,采用EXECL不是一个好方法,因为对于求平均值和最大值/最小值来说,要先把数据写入EXECL中,然后才能再EXECL中做统计计算。在这里我们使用SQL语句的强大的数据统计功能,在WINCC的报表编辑器中有一个动态对象:ODBC数据库域。这个对象是WINCC5.1所没有的。这个对象中可以使用标准SQL语句。

strSQL = "INSERT INTO WINCC_DATA (OP,DT,P1,P2,P3,T1,T2,T3) VALUES ("

strsql=strsql+"‘"& UserName &"‘"

strsql=strsql+",‘"& dt &"‘"

strSql=StrSql+","& P1101Value &""

strSql=StrSql+"," & P1102Value &""

strsql=strsql+","& P1103Value &""

strsql=strsql+","& T1101Value &""

strsql=strsql+","& T1102Value &""

strsql=strsql+","& T1103Value &")"

这个数据库中有8个字段,而在赋值语句strsql=strsql+"‘"& UserName &"‘" 可以这样分行写吗?没有,号分隔。请解读一下意思,

我想这句话也可以写成strSQL = "INSERT INTO WINCC_DATA (OP,DT,P1,P2,P3,T1,T2,T3) VALUES (‘‘"& UserName &"‘‘,‘"& dt &"‘,"& P1101Value &"," & P1102Value &","& P1103Value &","& T1101Value &","& T1102Value &","& T1103Value &")"
这样是不是好理解些呢?

tigermu

  • 精华:6帖
  • 求助:0帖
  • 帖子:175帖 | 5410回
  • 年度积分:0
  • 历史总积分:19807
  • 注册:2003年1月19日
发表于:2009-04-15 19:24:03
3楼

感觉单引号应该是 ‘  这个啊,你是不是汉语输入法下的单引号啊?

tigermu

  • 精华:6帖
  • 求助:0帖
  • 帖子:175帖 | 5410回
  • 年度积分:0
  • 历史总积分:19807
  • 注册:2003年1月19日
发表于:2009-04-15 19:27:04
4楼
天啊,原来是网站发布的是,单引号变成这样了。第一个字段不用,分隔,后面的才用。你改成后面的也可以,不过在阅读上不如上边的方便,不利于维护。

dxw

  • 精华:0帖
  • 求助:1帖
  • 帖子:6帖 | 25回
  • 年度积分:0
  • 历史总积分:98
  • 注册:2004年6月28日
发表于:2009-04-18 00:24:46
5楼

呵呵,多谢回复,只是strsql=strsql+","& T1103Value &")" 给人的感觉是一个赋值的公式,我是见得少了

andlu

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 107回
  • 年度积分:0
  • 历史总积分:333
  • 注册:2004年9月03日
发表于:2021-09-04 13:47:03
6楼

字符串需要加单引号外加双引号才能写入数据库.如"'a'"


热门招聘
相关主题

官方公众号

智造工程师