发布于 2007-09-20 22:33:38
0楼
发个正确的代码 已经测试过了:
Dim sPro
Dim sDsn
Dim sSer
Dim sCon
Dim sSql
Dim oRs
Dim conn
Dim oCom
Dim oItem
Dim m, n, s
Dim hourdate
Dim secdate
Dim k
Dim oList
//定义变量,VBS使用变体类型,无需指定数据类型,否则编译出错
Set oList = ScreenItems("listview1")//使用Listview控件
oList.View =3
oList.ListItems.Clear
//定义控件属性
sPro = "Provider=WinCCOLEDBProvider.1;"//定义服务提供者
sDsn = "Catalog=CC_test_06_03_29_12_38_33R;"
sSer = "Data Source=.\WinCC"
sCon = sPro + sDsn + sSer
//定义连接字符串
sSql = "TAG:R,'ProcessvalueArchive\NewTag','0000-00-00 00:00:00.000','0000-00-01 00:00:00.000'"
//访问压缩归档的SQL语句,非压缩归档使用SELECT语句,用法见SQL
MsgBox "Open with:" & vbCr & sCon & vbCr & sSql & vbCr
//出提示框,也可以不用
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = sCon
conn.CursorLocation = 3
conn.Open
Set oRs = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1
Set oCom.ActiveConnection = conn
oCom.CommandText = sSql
Set oRs = oCom.Execute
//标准的ADO访问,下面是输出到Listview的代码
m = oRs.RecordCount
With oList
.ColumnHeaders.Clear
.ColumnHeaders.Add , , CStr(oRs.Fields(1).Name), 780
.ColumnHeaders.Add , , CStr(oRs.Fields(2).Name), 900
.ColumnHeaders.Add , , CStr(oRs.Fields(3).Name), 1050
.ColumnHeaders.Add , , CStr(oRs.Fields(4).Name), 1200
End With
If (m > 0) Then
oRs.MoveFirst
n = 0
Do While Not oRs.EOF
n = n + 1
's = Left(CStr(oRs.Fields(1).value), 23)
s = CDate(oRs.Fields(1).value)
k = DateAdd("h", 8, s)
Set oItem = oList.ListItems.Add()
oItem.Text = k
oItem.SubItems(1) = FormatNumber(oRs.Fields(2).value, 1)
oItem.SubItems(2) = Hex(oRs.Fields(3).value)
oItem.SubItems(3) = FormatNumber(oRs.Fields(4).value, 1)
oRs.MoveNext
Loop
oRs.Close
Else
End If
Set oRs = Nothing
conn.Close
Set conn = Nothing