我用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时自动做一条记录。上面的条件语句放到什么样的过程或方法中去?

解决方案 »

  1.   

    添加timer控件,然后如下:Private Sub Form_Load()
    Timer1.Enabled = 1000
    End SubPrivate 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
      

  2.   

    谢谢你,但这样写就会在条件满足(Text16.Text = "1")的情况下1秒钟记录一次,重复记录了。
      

  3.   

    我现在的思路是,让过程变量置1的保持时间为5秒因为过程变量动作不频繁,几分钟一次)。把你所说的Timer1也设定为5秒。这样当变量A为1时的5秒内,必然有且仅有一次与Timer1同时有效,这样就只记录一次了。 
    你看行不?
      

  4.   

    不需要时钟。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" 时不会重写。
      

  5.   

    Adodc1.Recordset.MoveLast 不必要Adodc1.Recordset.UpdateBatch -> Adodc1.Recordset.Update
      

  6.   

    of123。谢谢你的提示,但出现的问题是 Text16.Text 从0到1时记录一次,从1到0时又记录一次。
    虽然连续为1不会重复。 但在信号的下降沿,还是重复记录了一次。
      

  7.   

    你把  Text16.Text = "1"  改为  val(Text16.Text)=1  试试
      

  8.   

    Text16.Text = "1"  和 val(Text16.Text)=1  我刚开始就试过,运行结果是一样的。
    实际 of123已经帮我解决了这个问题,感谢of123!
    也感谢所有帮我的朋友们
      

  9.   

    谢谢你,但这样写就会在条件满足(Text16.Text = "1")的情况下1秒钟记录一次,重复记录了。
    我现在的思路是,让过程变量置1的保持时间为5秒因为过程变量动作不频繁,几分钟一次
    -----------------------------------------------------------------------------
    定时器一样可以完成任务,如下:
    Private Sub Form_Load()
    Timer1.Enabled = 60000
    End SubPrivate 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
      

  10.   

    Text16.Text的值是我通过1秒的时间采样取得的。如果它较长的时间为1的话,Text16.Text 会不会在赋值为0后的1秒钟被改写为1。
      

  11.   

    A变量较长时间为1,Text16.Text 会在赋值为0后的1秒钟被改写为1。