还是VB和SQL的问题

stzorro 2009-09-23 06:13:50
我用VB读取WinCC的过程变量A(二进制)到text16 中 ,只要text6中为1,就向SQL数据库做一条记录。
下面的代码是当条件满足时,用按钮command1添加记录的(这个已经实现)。
Private Sub command1_click()
If Text16.Text = "1" Then
Adodc1.Recordset.MoveLast
Adodc1.Recordset.AddNew
Text1.Text = Text19.Text ‘SQL字段1
Text2.Text = Text5.Text ‘SQL字段2
Text3.Text = Text17.Text ‘SQL字段3
Text20.Text = Date ‘SQL字段4
Text4.Text = Time ‘SQL字段5
Adodc1.Recordset.UpdateBatch
Else
End If
End Sub

我的问题是,怎样写,可以让VB根据变量A为1时自动做一条记录。上面的条件语句放到什么样的过程或方法中去?
...全文
153 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
stzorro 2009-09-25
  • 打赏
  • 举报
回复
感谢猴哥
chinaboyzyq 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 stzorro 的回复:]
Text16.Text的值是我通过1秒的时间采样取得的。如果它较长的时间为1的话,Text16.Text 会不会在赋值为0后的1秒钟被改写为1。
[/Quote]
A变量较长时间为1,Text16.Text 会在赋值为0后的1秒钟被改写为1。
stzorro 2009-09-24
  • 打赏
  • 举报
回复
Text16.Text的值是我通过1秒的时间采样取得的。如果它较长的时间为1的话,Text16.Text 会不会在赋值为0后的1秒钟被改写为1。
chinaboyzyq 2009-09-24
  • 打赏
  • 举报
回复
谢谢你,但这样写就会在条件满足(Text16.Text = "1")的情况下1秒钟记录一次,重复记录了。
我现在的思路是,让过程变量置1的保持时间为5秒因为过程变量动作不频繁,几分钟一次
-----------------------------------------------------------------------------
定时器一样可以完成任务,如下:
Private Sub Form_Load()
Timer1.Enabled = 60000
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = False
If Text16.Text = "1" Then
Adodc1.Recordset.MoveLast
Adodc1.Recordset.AddNew
Text1.Text = Text19.Text 'SQL字段1
Text2.Text = Text5.Text 'SQL字段2
Text3.Text = Text17.Text 'SQL字段3
Text20.Text = Date 'SQL字段4
Text4.Text = Time 'SQL字段5
Adodc1.Recordset.UpdateBatch
Else
End If
Timer1.Enabled = True
Text16.Text = "0"'加上这句
End Sub


stzorro 2009-09-23
  • 打赏
  • 举报
回复
Text16.Text = "1" 和 val(Text16.Text)=1 我刚开始就试过,运行结果是一样的。
实际 of123已经帮我解决了这个问题,感谢of123!
也感谢所有帮我的朋友们
ltq88 2009-09-23
  • 打赏
  • 举报
回复
你把 Text16.Text = "1" 改为 val(Text16.Text)=1 试试
stzorro 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 stzorro 的回复:]
of123。谢谢你的提示,但出现的问题是 Text16.Text 从0到1时记录一次,从1到0时又记录一次。
虽然连续为1不会重复。 但在信号的下降沿,还是重复记录了一次。
[/Quote]
还是没重复记录,误会,因为刚调试的时候输11时,有个1,VB很快读进去,所以记录了一次。
stzorro 2009-09-23
  • 打赏
  • 举报
回复
of123。谢谢你的提示,但出现的问题是 Text16.Text 从0到1时记录一次,从1到0时又记录一次。
虽然连续为1不会重复。 但在信号的下降沿,还是重复记录了一次。
of123 2009-09-23
  • 打赏
  • 举报
回复
Adodc1.Recordset.MoveLast 不必要

Adodc1.Recordset.UpdateBatch -> Adodc1.Recordset.Update
of123 2009-09-23
  • 打赏
  • 举报
回复
不需要时钟。

Private Sub Text16_Change()
If Text16.Text = "1" Then
Adodc1.Recordset.MoveLast
Adodc1.Recordset.AddNew
Text1.Text = Text19.Text ‘SQL字段1
Text2.Text = Text5.Text ‘SQL字段2
Text3.Text = Text17.Text ‘SQL字段3
Text20.Text = Date ‘SQL字段4
Text4.Text = Time ‘SQL字段5
Adodc1.Recordset.UpdateBatch
Else
End If
End Sub

当连续为 "1" 时不会重写。
stzorro 2009-09-23
  • 打赏
  • 举报
回复
我现在的思路是,让过程变量置1的保持时间为5秒因为过程变量动作不频繁,几分钟一次)。把你所说的Timer1也设定为5秒。这样当变量A为1时的5秒内,必然有且仅有一次与Timer1同时有效,这样就只记录一次了。
你看行不?
stzorro 2009-09-23
  • 打赏
  • 举报
回复
谢谢你,但这样写就会在条件满足(Text16.Text = "1")的情况下1秒钟记录一次,重复记录了。
chinaboyzyq 2009-09-23
  • 打赏
  • 举报
回复
添加timer控件,然后如下:

Private Sub Form_Load()
Timer1.Enabled = 1000
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = False
If Text16.Text = "1" Then
Adodc1.Recordset.MoveLast
Adodc1.Recordset.AddNew
Text1.Text = Text19.Text 'SQL字段1
Text2.Text = Text5.Text 'SQL字段2
Text3.Text = Text17.Text 'SQL字段3
Text20.Text = Date 'SQL字段4
Text4.Text = Time 'SQL字段5
Adodc1.Recordset.UpdateBatch
Else
End If
Timer1.Enabled = True
End Sub

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧