用wincc怎么实现连接SQL服务器的记录,将数据写入SQL,并在报表中输出SQL相应的数据?最好是提供VC和VB的两种解决方案~~
最佳答案
1wincc怎么实现连接SQL服务器的记录,是要WinCC的归档数据,还是自己用脚本归档,若是自己的脚本归档,是用sqloledb,
若是使用WinCC的归档数据,使用providerole,db.
a使用sqloledb,读用户归档
SubOnClick(ByValItem)
DimsDsn
DimsSer
DimsCon
DimsSql
Dimconn
DimoRs
DimoCom
DimsPro
Dimm,n,s
Dima,b,c
DimLiSTview1
DimoItem
DimxlsApp
DimstrDateTime
DimiMS
SetListview1=ScreenItems("Control1")
sCon="Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurityInfo=False;InitialCatalog=CC_databASe_08_10_20_14_59_38R;DataSourCE=YSY\WINCC"
sSql="Select*fromUA#myua"
MsgBox"Openwith:"&vbCr&sCon&vbCr&sSql&vbCr
Setconn=CreateObject("ADODB.Connection")
conn.ConnectionString=sCon
conn.CursorLocation=3
conn.Open
SetoRs=CreateObject("ADODB.Recordset")
SetoCom=CreateObject("ADODB.Command")
oCom.CommandType=1
SetoCom.ActiveConnection=conn
oCom.CommandText=sSql
SetoRs=oCom.Execute
m=oRs.Fields.Count
SetxlsApp=CreateObject("Excel.Application")
xlsApp.Visible=True
xlsApp.Workbooks.Open"E:\sample.xls"
If(m>0)Then
oRs.MoveFirst
n=1
xlsApp.Cells(1,1).Value=oRs.Fields(0).Name
xlsApp.Cells(1,2).Value=oRs.Fields(1).Name
xlsApp.Cells(1,3).Value=oRs.Fields(2).Name
DoWhileNotoRs.EOF
n=n+1
xlsApp.Cells(n,1).Value=oRs.Fields(0).Value
xlsApp.Cells(n,2).Value=oRs.Fields(1).Value
xlsApp.Cells(n,3).Value=oRs.Fields(2).Value
oRs.MoveNext
Loop
xlsApp.ActiveWorkBook.Save
xlsApp.Workbooks.Close
xlsApp.Quit
SetxlsApp=Nothing
EndIf
oRs.Close
SetoRs=Nothing
conn.Close
Setconn=Nothing
EndSub
b,使用providerole,db读归档数据
SubOnClick(ByValItem)
DimxlsApp
DimsDsn
DimsSer
DimsCon
DimsSql
Dimconn
DimoRs
DimoCom
DimsPro
Dimm,n,s
Dima,b,c
sPro="Provider=WinCCOLEDBProvider.1;"
sDsn="Catalog=CC_vbs_08_05_26_14_56_45R;"//该为自己的数据库名称
sSer="DataSource=.\WinCC"
sCon=sPro+sDsn+sSer
//该为自己的归档名称和变量名称
sSql="Tag:R,(‘ProcESsValueArchive\tag1′;’ProcessValueArchive\tag2′),’2008-07-200:32:00.000’,’2008-07-217:34:00.000’"
MsgBox"Openwith:"&vbCr&sCon&vbCr&sSql&vbCr
Setconn=CreateObject("ADODB.Connection")
conn.ConnectionString=sCon
conn.CursorLocation=3
conn.Open
SetoRs=CreateObject("ADODB.Recordset")
SetoCom=CreateObject("ADODB.Command")
oCom.CommandType=1
SetoCom.ActiveConnection=conn
oCom.CommandText=sSql
SetoRs=oCom.Execute
m=oRs.Fields.Count
SetxlsApp=CreateObject("Excel.Application")
xlsApp.Visible=True
xlsApp.Workbooks.Open"E:\sample.xls"
xlsApp.Cells(10,2).Value=6
If(m>0)Then
oRs.MoveFirst
n=1
xlsApp.Cells(1,1).Value=oRs.Fields(0).Name
xlsApp.Cells(1,2).Value=oRs.Fields(1).Name
xlsApp.Cells(1,3).Value=oRs.Fields(2).Name
xlsApp.Cells(1,4).Value=oRs.Fields(3).Name
xlsApp.Cells(1,5).Value=oRs.Fields(4).Name
DoWhileNotoRs.EOF
n=n+1
xlsApp.Cells(n,1).Value=oRs.Fields(0).Value
xlsApp.Cells(n,2).Value=oRs.Fields(1).Value
xlsApp.Cells(n,3).Value=FormatNumber(oRs.Fields(2).Value,2)
xlsApp.Cells(n,4).Value=Hex(oRs.Fields(3).Value)
xlsApp.Cells(n,5).Value=Hex(oRs.Fields(4).Value)
oRs.MoveNext
Loop
xlsApp.ActiveWorkBook.Save
xlsApp.Workbooks.Close
xlsApp.Quit
SetxlsApp=Nothing
EndIf
oRs.Close
SetoRs=Nothing
conn.Close
Setconn=Nothing
EndSub
提问者对于答案的评价:
可以