我用ADO读取WINCC变量记录得历史数据,我读了2个变量,但是发现返回得记录集只有3字段
第一个是,时间,第二个是变量值,第三个是质量。我读得2个变量都是在第二个字段中,先显示第一个变量的值,然后显示第二个变量得值,第二个变量得值是接在第一个后面的。我觉得不对吧,按照标准ADO返回得记录集,应该每一个变量一个字段吧,怎么会都是在一个字段?
下面是代码,我是用LISTVIEW控件显示得,这个也是西门子得例子
Dim sPro, sDsn, sSer,sCon, sSql,SQL2
Dim sVal, lRet, sRel
Dim V,V1,Sum,Avg,Std
Dim conn, oRs,ORS1, oCom, ocom1,oList, oItem
Dim m,n,s,nRec,m1
Dim Key
Set Key = ScreenItems("Button18")
'Key.Operation = vbFalse 'Bedienung sperren - disable operator control
refresh 'Grafikausgabe erzwingen - force grafic output
' 0.0 Get parameters from picture
sDsn = ScreenItems("laDSN").Text
sSql = ScreenItems("laSql").Text 'max. Zeichenanzahl f黵 Archive: 8 !!!
'SQL2 = ScreenItems("qqq").Text 'max. number of characters for archive name:8 !!!
' 1.1 Make connection string for ADODB as indicated below
'"Provider=WinCCOLEDBProvider.1;Catalog=CC_V6_Demo3_03_02_04_16_19_15R;Data Source=.\WinCC"
' 1.2 Define command text in sSql for WinCC compressed archives, relative time
sPro = "Provider=WinCCOLEDBProvider.1;"
sDsn = "Catalog=" + sDsn + ";"
sSer = "Data Source=.\WinCC"
sCon = sPro + sDsn + sSer
nRec = NMAX
' "TAG:R,1,'0000-00-00 00:05:00.000','0000-00-00 00:00:00.000'"
lRet = MsgBox("Opened with " & vbCr & sCon & vbCr & sSql & vbCr, vbOKCancel)
If lRet <> 1 Then Exit Sub
' 2.1 Make connection
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = sCon
conn.CursorLocation = adUseClient ' 3
conn.Open
' 2.2 Use command text for query
Set oRs = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1 ' adCmdText = 1
Set oCom.ActiveConnection = conn
oCom.CommandText = sSql
' 2.3 Fill the recordset
On Error Resume Next 'Fehlerbehandlung - error handling
Set oRs = oCom.Execute
'Fehlerausgabe - error display
If Err.Number<>0 Then MsgBox "Fehler Nr. " & CStr(Err.Number) & " " & Err.Des cription
Err.Clear
m = oRs.Fields.Count
HMIRuntime.Tags("a1").Write ors.fields(3).value
hmiruntime.Tags("a2").Write oRs.fields(4).value
' 3.0 Fill standard listview object with recordset
Set oList = ScreenItems("ListTable")
oList.ListItems.Clear
If(m>0) Then
oRs.MoveFirst
' ors1.movefirst
n = 0
Sum = 0
Avg = 0
Std=0
Do While Not oRs.EOF
n = n + 1
V = oRs.Fields(2).Value
V1=oRs1.Fields(2).Value
Sum = Sum +V
Std = Std + V ^ 2
If( n < nRec ) Then
s = Left(CStr(oRs.Fields(1).Value), 23)
Set oItem = oList.ListItems.Add()
oItem.Text = Left(CStr(oRs.Fields(1).Value), 23)'Datum/Uhrzeit - Date/Time
oItem.SubItems(1) = FormatNumber(V, 4) 'Wert mit 4 Nachkommastellen anzeigen
' oItem.SubItems(2) = FormatNumber(V1, 4) 'display value with four digits sfter decimal
'oItem.SubItems(2) =FormatNumber(V1, 4)
'oItem.SubItems(2) = Hex(oRs.Fields(4).Value)'Quality Code
End If
oRs.MoveNext
' ors1.movnext
Loop
oRs.Close
' ors1.close
If( n>1) Then Avg = Sum / n
If (n>2) Then Std = Sqr((Std - n * Avg ^ 2) / (n - 1))
HMIRuntime.Tags("Count").Write n
HMIRuntime.Tags("Sum").Write Sum
HMIRuntime.Tags("Avg").Write Avg
HMIRuntime.Tags("Std").Write Std
Else
End If
Set oRs = Nothing
Set ors1= Nothing
conn.Close
Set conn = Nothing
''
Key.Operation = vbTrue 'Bedienung freigeben - enable operator control