wincc 日报表(带注释)
1.先點VB許可注冊MSFLEXGRID這個控件,然后再解壓baobiao這個文件。
2.打開baobiao項目,將計算機名改為本機計算機名,就可以運行項目
3.在全局腳本里建立起與數據庫的連接,通過定時整點觸發腳本,把變量寫到數據庫。WINCC里全局腳本觸發定時器設定是每小時整點觸發。
4.在月,年,班月,班年報表畫面屬性里,定義了打開畫面執行的VB程序,用于顯示選擇年月日,以及畫面其他顯示,比如記錄的條數,系統時間
5.在主畫面,第一次運行時要按“添加數據庫”按鈕,這樣就在SQL2005里建立baobiao1數據庫,打開SQL Server Management Studio,點Connect,在Databases目錄下可以看到baobiao1數據庫文件,在tables下面有建立好的ribao表,打開表,在Columns里可以看到在WINCC里建立的變量。如果不需要做報表記錄,點“分離數據庫”旋鈕。
6.在日報表中,顯示的列數為8列,編號0-7,顯示的行數為oRs.Recordcount+6,也就是查詢到的記錄數+6,第一行用來顯示報表標題,第二行顯示“編號”,“日期”,一直到“速度”。
從第三行開始顯示查詢到的記錄,包括記錄的編號,記錄時間,記錄值。oRs.Recordcount+3行顯示最大值,oRs.Recordcount+4行顯示最小值,oRs.Recordcount+5顯示平均值,oRs.Recordcount+2用來顯示查到的每個記錄總和,程序里注釋掉了,就沒顯示。
7.統計查詢記錄最大值,最小值,平均值是在SQL數據庫里完成的,通過max,min,avg函數完成的
8. 將第一行8列合為一列
MSFlexGrid1.Row = 0’選中第一行。注意第一行,或者是第一列都從0開始
For z = 0 To 7
MSFlexGrid1.Col = z
MSFlexGrid1.Text = “R980履帶式布料機日報表"通過FOR,NEXT操作,將8列內容都顯示為"R980履帶式布料機日報表”
Next
MSFlexGrid1.MergeCells = 4設置一個值4表明如何及何時將有相同內容的記錄進行合并
MSFlexGrid1.MergeRow(0) = True設置將0行內容合并
9. MSFlexGrid1.Rows = oRs.RecordCount + 6’顯示的行數為查詢到數據數目+6
MSFlexGrid1.ColWidth(0) = 800’第一列寬度
MSFlexGrid1.ColWidth(1) = 2100’第二列寬度
MSFlexGrid1.ColWidth(2) = 1000’第三列寬度
MSFlexGrid1.ColWidth(3) = 1000’第四列寬度
MSFlexGrid1.ColWidth(4) = 1000’第五列寬度
MSFlexGrid1.ColWidth(5) = 1000’第六列寬度
MSFlexGrid1.ColWidth(6) = 1000’第七列寬度
MSFlexGrid1.ColWidth(7) = 1000’第八列寬度
MSFlexGrid1.TextMatrix(1, 0) = "編號"設置某個選定行,列的單元的文本內容
MSFlexGrid1.ColAlignment(0) = 4設置當前列的對齊方式
MSFlexGrid1.ColAlignment(1) = 4
MSFlexGrid1.ColAlignment(2) = 4
MSFlexGrid1.ColAlignment(3) = 4
MSFlexGrid1.ColAlignment(4) = 4
MSFlexGrid1.ColAlignment(5) = 4
MSFlexGrid1.ColAlignment(6) = 4
MSFlexGrid1.ColAlignment(7) = 4設置當前列的對齊方式
For i = 1 To oRs.RecordCount第一列顯示每條記錄編號
MSFlexGrid1.TextMatrix(i + 1, 0) = i
Next
10. Sql = “SELECT CONVERT(char(19), riqi, 20) AS riqi, yali, wendu, liuliang, zhongliang, dianya, sudu FROM ribao WHERE riqi BETWEEN '” & BeginDate & “’ and’” & EndDate & “'ORDER BY riqi” SELECT CONVERT(char(19), riqi, 20) AS riqi,其中CONVERT(CHAR(19), CURRENT_TIMESTAMP, 20)為定義的顯示日期格式,如2006-02-22 16:26:08。按照起始,結束時間查詢記錄。Select From,為查詢語句標準格式,FROM后面是表名,本例表名為ribao
sql1 = “select avg(yali)as ylp,avg(wendu)as wdp,avg(liuliang)as llp,avg(zhongliang)as zlp,avg(dianya)as dyp,avg(sudu)as sdp,min(yali)as ylx,min(wendu)as wdx,min(liuliang)As llx,min(zhongliang)As zlx,min(dianya)As dyx,min(sudu)As sdx,max(yali)As yld,max(wendu)As wdd,max(liuliang)As lld,max(zhongliang)As zld,max(dianya)As dyd,max(sudu)As sdd from ribao where riqi between '” & BeginDate & “’ and’” & EndDate & "'"數據庫支持SQL查詢語言,用函數AVG,MIN,MAX對列求平均,最小,最大值。
11.從WINCC訪問sql2005數據庫步驟:
1) 創建一個到數據庫的 ADO 連接
2) 打開數據庫連接
3) 創建ADO記錄集
4) 從記錄集提取你想要的數據,在表格顯示出來
5) 關閉記錄集
6) 關閉連接
ADO有三個主要對象,connection,Recordset,Command,通過這三個對象完成對數據庫操作
strcn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog=baobiao1;Data Source=.\wincc"創建一個ADO連接,連接運行數據庫baobiao1
Set conn = CreateObject(“ADODB.Connection”)創建ADO連接對象,對數據庫操作
conn.ConnectionString = strcn
conn.CursorLocation = 3
conn.Open 打開數據庫連接
Set oRs = CreateObject(“ADODB.Recordset”)讀取數據庫的數據,那么其中的數據必須首先被載入一個記錄集中。ADO連接創立后,就可以創建一個ADO記錄集了。
Set oCom = CreateObject("ADODB.Command")創建一個ADO.Command對象。該查詢用于取回數據,此數據將以一個 RecordSet 對象返回。這意味著被取回的數據能夠被 RecordSet 對象的屬性、集合、方法或事件進行操作 oCom.CommandType = 1返回一個 Command 對象的類型 Set oCom.ActiveConnection = conn返回包含了定義連接或 Connection 對象的字符串。 oCom.CommandText = Sql設置或返回包含提供者(provider)命令的字符串Set oRs = oCom.Execute Execute 是方法,執行 CommandText 屬性定義的Sq1定義查詢、SQL 語句或存儲過程,是按時間條件查詢到的riqi,yali,wendu, liuliang, zhongliang, dianya, sudu記錄值
n = oRs.RecordCount’查詢到的記錄數目
Text2.Text = n
Set oCom1 = CreateObject(“ADODB.Command”)
oCom1.CommandType = 1’ors1是記錄平均,最小,最大值
Set oCom1.ActiveConnection = conn
oCom1.CommandText = sql1
Set oRs1 = oCom1.Execute執行 CommandText 屬性定義的Sq11定義查詢、SQL 語句或存儲過程,是按時間條件查詢到的riqi,yali,wendu, liuliang, zhongliang, dianya, sudu的各個最大,最小,平均值記錄值
n1 = oRs1.RecordCount n1為1,
ylp = oRs1(“ylp”): wdp = oRs1(“wdp”): llp = oRs1(“llp”): ylx = oRs1(“ylx”): wdx = oRs1(“wdx”): llx = oRs1(“llx”): yld = oRs1(“yld”): wdd = oRs1(“wdd”): lld = oRs1(“lld”)
zlp = oRs1(“zlp”): dyp = oRs1(“dyp”): sdp = oRs1(“sdp”): zlx = oRs1(“zlx”): dyx = oRs1(“dyx”): sdx = oRs1(“sdx”): zld = oRs1(“zld”): dyd = oRs1(“dyd”): sdd = oRs1(“sdd”)
oRs.Requery Requery的作用是:通過重新執行對象所基于的查詢語句,更新Recordset[記錄集]對象中的數據。
提示:適用這個方法可以刷新記錄集的所有內容。
Do While Not oRs.EOF
'n = n + 1這句我給刪掉了,程序可以運行
ylp = Int(ylp * 10 ^ 3 + 0.5) / (10 ^ 3)
wdp = Int(wdp * 10 ^ 3 + 0.5) / (10 ^ 3)
llp = Int(llp * 10 ^ 3 + 0.5) / (10 ^ 3)
zlp = Int(zlp * 10 ^ 3 + 0.5) / (10 ^ 3)
dyp = Int(dyp * 10 ^ 3 + 0.5) / (10 ^ 3)
sdp = Int(sdp * 10 ^ 3 + 0.5) / (10 ^ 3)
a1 = CStr(oRs.Fields(1).Value)取第一條記錄的值。ADO Field 對象包含有關 Recordset 對象中某一列的信息。Recordset 中的每一列對應一個 Field 對象
b1 = CStr(oRs.Fields(2).Value)
c1 = CStr(oRs.Fields(3).Value)
d1 = CStr(oRs.Fields(4).Value)
e1 = CStr(oRs.Fields(5).Value)
f1 = CStr(oRs.Fields(6).Value)
a1 = Int(a1 * 10 ^ 3 + 0.5) / (10 ^ 3)
b1 = Int(b1 * 10 ^ 3 + 0.5) / (10 ^ 3)
c1 = Int(c1 * 10 ^ 3 + 0.5) / (10 ^ 3)
d1 = Int(d1 * 10 ^ 3 + 0.5) / (10 ^ 3)
e1 = Int(e1 * 10 ^ 3 + 0.5) / (10 ^ 3)
f1 = Int(f1 * 10 ^ 3 + 0.5) / (10 ^ 3)
MSFlexGrid1.TextMatrix(i + 1, 2) = a1’第三行開始顯示第一條記錄值
MSFlexGrid1.TextMatrix(i + 1, 3) = b1
MSFlexGrid1.TextMatrix(i + 1, 4) = c1
MSFlexGrid1.TextMatrix(i + 1, 5) = d1
MSFlexGrid1.TextMatrix(i + 1, 6) = e1
MSFlexGrid1.TextMatrix(i + 1, 7) = f1
oRs.MoveNext
Loop
oRs.close’這是后加的,退出程序前,關閉與數據庫,記錄集的連接
ors1.close’這是后加的
conn.close’這是后加的
注意,所有報表源碼執行完,最后都添加關掉連接的代碼,即
oRs.close
ors1.close
conn.close
總結
以上是生活随笔為你收集整理的wincc 日报表(带注释)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 代码设置 键盘适应_详细
- 下一篇: HTML显示JSON数据格式