VBS脚本数据SQLServer,入库后触发更新库

2023-02-03 15:04:54
微图
737
最后编辑:微图 于 2024-11-15 09:48:30
分享链接

存库脚本

'Sub cunNX( 表名 , RecordID , 设备名 , 时间 , 开度 , 电量 , 电流 , 风压, 速度 , 到PLC通断 )
Sub cunNX( tableN , RecordID , S_Bei_M , s_Jian , k_Du , d_Liang , d_Liu , f_Ya , s_Du , toPLC_T_D )

'vbs通过OLEDB连接SQL
'1.创建一个到数据库的 ADO 连接
Dim oConn
Set oConn = CreateObject("ADODB.Connection")
'连接本地SQL服务器
'Provider:指定驱动程序。integrated security=sspi:Windows身份认证。Persist Security Info:是否保存登录信息。Initial Catalog=库名:Data Source=数据库所在电脑名。
'oConn.ConnectionString="Provider=SQLOLEDB.1;integrated security=sspi ;Persist Security Info=false; Initial Catalog=SWJ; Data Source=2012R2FR"
'oConn.CursorLocation=3


'连接网络(或本地)SQL服务器
'Provider=指定驱动程序.1;Persist Security Info=False;data source=服务器IP地址 ;User ID=用户名;Password=密码;Initial Catalog=数据库名
oConn.ConnectionString="Provider=SQLOLEDB.1; Persist Security Info=False;data source=GUANLONG\WINCC ; User ID=sa; Password=22Rsgzyzq; Initial Catalog=NXCC"


'2.打开数据库连接
oConn.Open


'提示是否连接成功,打开后,oConn.state=1成功,=0失败
'MsgBOx oConn.state


'3.创建记录集
Dim oRecordSet
Set oRecordSet=CreateObject("ADODB.Recordset")


Dim strSQL

'计算明细即将插入行的本单序
strSQL ="with t as ( select 本单序=MAX(本单序)+1 from " &tableN &" where RecordID = " &RecordID &" ) "
'待插入的表和字段
strSQL = strSQL &" insert into " &tableN &" ( RecordID , Sequence , 本单序 , 设备名 , 时间 , 开度 , 电量 , 电流 , 风压 , 速度 , 到PLC通断 ) "
'插入的数据
strSQL = strSQL &" ( select " &RecordID &" , isnull(t.本单序,1) , isnull(t.本单序,1) , '" &S_Bei_M &"' , '"&s_Jian &"' , " &k_Du &" , " &d_Liang &"  , " &d_Liu &"  , " &f_Ya &" , " &s_Du &" , " &toPLC_T_D &" from t) "

Set oRecordSet=oConn.Execute(strSQL)


'4.从记录集提取您需要的数据
'5.关闭记录集


Set oRecordSet=Nothing
'6.关闭连接
oConn.Close
Set oConn=Nothing

End Sub

调用测试

Dim s_Jian '现在时间

Dim y_Shu_RID1 '改造前运数RecordID
Dim y_Shu_RID2 '改造后运数RecordID
Dim d_Cai_RID1 '改造前运数RecordID
Dim d_Cai_RID2 '改造后运数RecordID

y_Shu_RID1 = 101
y_Shu_RID2 = 106
d_Cai_RID1 = 105
d_Cai_RID2 = 107

Dim S_Bei_M
Set S_Bei_M = HMIRuntime.Tags("设备名")

Dim k_Du
Set k_Du = HMIRuntime.Tags("数据_开度")

Dim d_Liang
Set d_Liang = HMIRuntime.Tags("数据_电量")

Dim d_Liu
Set d_Liu = HMIRuntime.Tags("数据_电流")

Dim f_Ya
Set f_Ya = HMIRuntime.Tags("数据_风压")

Dim s_Du
Set s_Du = HMIRuntime.Tags("速度")

Dim k_Du_D1
Set k_Du_D1 = HMIRuntime.Tags("开度段")
Dim k_Du_D2 '开度段2

Dim toPLC_T_D
Set toPLC_T_D = HMIRuntime.Tags("@S7315@ConnectionStateEx")

Dim t_Zhi
Set t_Zhi = HMIRuntime.Tags("停止采集")

s_Jian = Now
S_Bei_M.Read
k_Du.Read
toPLC_T_D.Read
k_Du_D1.Read
d_Liang.Read
d_Liu.Read
f_Ya.Read
s_Du.Read
t_Zhi.Read

'开度段2
k_Du_D2 = Int((k_Du.value/5)+0.89) 'Int是去尾,+0.89再去尾相当于进1   MsgBOx "开度段1:" &k_Du_D1.Value &"  开度: " &k_Du.value &"  开度段2:" &k_Du_D2 


'If t_Zhi.Value<>1 Then    '开度段2<>开度段1
' If k_Du_D2 <> k_Du_D1.value Then    '有新的开度往库里存入1行  'd_Cai_RID*,1改造前,2改造后
        cunNX  "段采表m" , d_Cai_RID2 , S_Bei_M.value , s_Jian , k_Du.value , d_Liang.Value , d_Liu.Value , f_Ya.Value , s_Du.Value , toPLC_T_D.value      k_Du_D1.Write k_Du_D2 '记录上次采集开度段
' T_cunNX  "段采表m" , 112 , S_Bei_M.value , s_Jian , k_Du.value , d_Liang.Value , d_Liu.Value , f_Ya.Value , s_Du.Value , toPLC_T_D.value    MsgBOx "插入成功"    ' End If


' Sub cunNX( tableN , RecordID , S_Bei_M , s_Jian , k_Du , d_Liang , d_Liu , f_Ya , s_Du , toPLC_T_D )
' cunNX  "运数表m" , y_Shu_RID2 , S_Bei_M.value , s_Jian , k_Du.value , d_Liang.Value , d_Liu.Value , f_Ya.Value , s_Du.Value , toPLC_T_D.value    
' T_cunNX  "运数表m" , 111 , S_Bei_M.value , s_Jian , k_Du.value , d_Liang.Value , d_Liu.Value , f_Ya.Value , s_Du.Value , toPLC_T_D.value  
' MsgBOx "插入成功"   'End If


SQLServer触发器

每插入1行,更新1行的时间间隔,电表差,以方便快速统计报表

create trigger 更新运数间隔秒电量差 on 运数表m
for insert
as
begin
--插入时执行条件
if(  --数行  select count(*)   from 运数表m   where   本单序=(select max(本单序)-1 from 运数表m where RecordID=(select RecordID from inserted))   and RecordID=(select RecordID from inserted)   and 间隔秒 is null)=1  begin  --更新上一行间隔秒,电量差,inserted存插入的数,系统自带的表  update   运数表m   set   间隔秒=Datediff( SS , 时间 , (select 时间 from inserted))   ,电量差=(select 电量 from inserted) - 电量  where   本单序=(select max(本单序)-1 from 运数表m where RecordID=(select RecordID from inserted))   and RecordID=(select RecordID from inserted)   and 间隔秒 is null  end
end
create trigger 更新段采间隔秒电量差 on 段采表m
for insert
as
begin
--插入时无条件执行
if( --数行  select count(*)   from 段采表m   where   本单序=(select max(本单序)-1 from 段采表m where RecordID=(select RecordID from inserted))   and RecordID=(select RecordID from inserted)   and 间隔秒 is null)=1  begin  --更新上一行间隔秒,电量差,inserted存插入的数,系统自带的表  update   段采表m   set   间隔秒=Datediff( SS , 时间 , (select 时间 from inserted))   ,电量差=(select 电量 from inserted) - 电量  where   本单序=(select max(本单序)-1 from 段采表m where RecordID=(select RecordID from inserted))  and RecordID=(select RecordID from inserted)   and 间隔秒 is null  end
end  

第三方工具链接winCC默认数据库

以帆软为例

(主机\WINCC,端口号空)

发表评论
评论通过审核后显示。
  • 在线客服
  • 关注微信
    • 客服帆帆
    • 客服娜娜
    • 客服美美
    • 客服龙龙
  • 扫一扫关注微信