在wincc 想通过时间条件来查询,通过 data time picker控件获取系统时间,或者是通过脚本将系统时间赋值给了一个内部变量。然后想通过数据库查询语言将时间变量值与后天数据库数据时间值比较来查询数据,但是怎么也实现不了,我做的有一下2种方法,请各位大神给我看一下:
1、sql="select * from Table_5 where timer between '"& StartData &"' and '"& StopData &"'
2、TAG:R方式来查询
时建类型为datatime,不知道如何可以实现这种类型的数据比较,各位大神有没有好的建议,谢谢。
最佳答案
查询语句应该是
sql="select * from Table_5 where timer between ''"& StartData &"'' and ''"& StopData &"''ORDER BY timer "
下面是我做的一个类似的时间查询画面
其中查询按钮下面的脚本为
Dim i, n, k, n1, a1, b1, c1,e1, f1,h1,j1
Dim Sql, oCom, conn, sql1, oCom1,oItem
Dim j, b, z
Dim ylp, wdp, llp, ylx, wdx, llx, yld, wdd, lld
Dim zlp, dyp, sdp, zlx, dyx, sdx, zld, dyd, sdd
Dim strcn, cn
Dim a, shi, t, x
Dim oRs, oRs1
Dim Text2
Dim BeginDate
Dim EndDate
Dim By, Bm, Bd
Dim Ny, Nm, Nd, c, e, f
Dim Date1,Date2
Dim t31,y1,m1,d1,s1,y2,m2,d2,s2
Set y1=ScreenItems("控件1")
Set m1=ScreenItems("控件4")
Set d1=ScreenItems("控件6")
Set s1=ScreenItems("控件7")
Set y2=ScreenItems("控件10")
Set m2=ScreenItems("控件11")
Set d2=ScreenItems("控件12")
Set s2=ScreenItems("控件13")
Set dyx = ScreenItems("控件19")
dyx.ListItems.Clear
By=y1.Text
Bm=m1.Text
Bd=d1.Text
Ny=y2.Text
Nm=m2.Text
Nd=d2.Text
If By > Ny Or By = Ny And Bm > Nm Or By = Ny And Bm = Nm And Bd > Nd Or Bd=Nd And s1.Text>s2.Text Then
MsgBox "输入的时间不正确", vbOK, "错误的起始时间"
Else
BeginDate = By&"/"&Bm&"/"&Bd&" "&s1.Text&":00:00"
EndDate = Ny&"/"&Nm&"/"&Nd&" "&s2.Text&":59:59"
''CONVERT(char(19),shijian, 20) AS
''建立连接
Sql = "SELECT * FROM 一楼温度记录 WHERE shijian BETWEEN ''" & BeginDate & "'' and ''" & EndDate & "'' ORDER BY shijian "
strcn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog=wanda;Data Source=.\wincc"
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = strcn
conn.CursorLocation = 3
conn.Open
''使用命令文本查询
Set oRs = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1
Set oCom.ActiveConnection = conn
oCom.CommandText = Sql
Set oRs = oCom.Execute
n = oRs.RecordCount
If n = 0 Then
MsgBox "对不起,没有找到符合条件的数据", vbOK, "没有相关数据"
End If
oRs.Requery
If (n > 0) Then
oRs.MoveFirst
i = 0
End If
Do While Not oRs.EOF
Set oItem = dyx.ListItems.Add()''添加新行
oItem.Text=CStr(oRs.Fields(0).Value)
oItem.SubItems(1)=CStr(oRs.Fields(1).Value)
oItem.SubItems(2)=CStr(oRs.Fields(2).Value)
oItem.SubItems(3)=Formatnumber((oRs.Fields(3).Value),2)
oItem.SubItems(4)=Formatnumber((oRs.Fields(4).Value),2)
oItem.SubItems(5)=Formatnumber((oRs.Fields(5).Value),2)
oItem.SubItems(6)=CStr(oRs.Fields(6).Value)
oItem.SubItems(7)=CStr(oRs.Fields(7).Value)
oRs.MoveNext
Loop
End If
oRs.close''这是后加的,退出程序前,关闭与数据库,记录集的连接
''ors1.close''这是后加的
conn.close''这是后加的
希望对你有所帮助
图片说明:
提问者对于答案的评价:
对于时间查询,我选择data timepicker 将系统时间赋值给内部变量,时间值为字符串,用数据库语句就可以实现了,不需要TAG:R的方式来实现查询。谢谢各位的答复,谢谢。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc361756.html