Dim conodbc As ADODB.Connection
    Dim adoRS As ADODB.Recordset
    Dim STRSQL As String
    Dim LastValue As Integer
    Dim CurValue As Integer
    
   Set conodbc = New ADODB.Connection
    
    On Error Resume Next
    conodbc.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial    
                                 Catalog=HY_tlx;Data Source=10.16.52.1"     '连接字符串
    conodbc.Open        '打开连接
    Set adoRS = New ADODB.Recordset
    STRSQL = "SELECT * FROM HY_digital_data " _
           & "WHERE (HY_digital_data.digital_data_code = strTAG ) ORDER BY HY_digital_data.Time DESC" 
                'SQL语句,查询该标签历史纪录
    adoRS.Open STRSQL, conodbc, adOpenKeyset, adLockOptimistic, adCmdText '打开纪录
    
    LastValue = adoRS.Fields(3).Value  '读取标签上一次的纪录值
    CurValue = System.FindObject("FIX32.FIX." & "D" & strTAG & ".F_CV")  '标签当前值
If CurValue <> LastValue Then     '标签当前值与上一次的值作比较,判断是否相等
      adoRS.AddNew     '增加纪录
      adoRS!digital_data_code = strTAG
      adoRS!digital_data_state = CurValue
      adoRS!Time = Now
      adoRS!ship_code = "001"
      adoRS.Update       '更新纪录
    End If
    adoRS.Close          '关闭纪录
    conodbc.Close         '关闭连接
    Set conodbc = Nothing  '释放对象
    Set adoRS = Nothing程序在执行到if 语句前都可以正常进行,但是就是在增加记录时,增加不了,就是SQL中没有记录。请问这是怎么回事啊? 

解决方案 »

  1.   

    adoRS.AddNew    '增加纪录 
    ***********************
    这里设断点,看能运行到这里不
      

  2.   

    运行到If CurValue <> LastValue 时,没有错误
    然后就不知道怎么回事了 。
    我怀疑
    STRSQL = "SELECT * FROM HY_digital_data " _
              & "WHERE (HY_digital_data.digital_data_code = strTAG ) ORDER BY HY_digital_data.Time DESC" 这样带有 WHERE 打开SQL数据库时,不能进行写操作。不知道这种想法对不对?
      

  3.   

    & "WHERE (HY_digital_data.digital_data_code = strTAG ) ORDER BY HY_digital_data.Time DESC"
    注意,这里的 strTAG 是什么
    System.FindObject("FIX32.FIX." & "D" & strTAG & ".F_CV")  
    这里又是什么呢?我不知道你是什么意思,只是猜测这里有问题!
      

  4.   


      HY_digital_data 是数据库中一个表,digital_data_code是表中某一列名。表一共有四列:
      Time、digital_data_code、digital_data_state 和 ship_code System.FindObject("FIX32.FIX." & "D" & strTAG & ".F_CV")  这条语句可以忽略比如我另外进行了测试,预先存储了一条记录如下:
          adoRS!Time = Now
          adoRS!digital_data_code = “011010”
          adoRS!digital_data_state = 1
          adoRS!ship_code = "001" 
    然后,修改代码如下:
        adoRS.Open STRSQL, conodbc, adOpenKeyset, adLockOptimistic, adCmdText '打开纪录
       
        LastValue = adoRS.Fields(3).Value  '读取标签上一次的纪录值即digital_data_state的值
        CurValue = 0                       '令其值与数据库中值不一样
    If CurValue <> LastValue Then          '标签当前值与上一次的值作比较,判断是否相等
          adoRS.AddNew                     '增加纪录
          adoRS!digital_data_code = “011010”
          adoRS!digital_data_state = CurValue
          adoRS!Time = Now
          adoRS!ship_code = "001"
          adoRS.Update                     '更新纪录
    End If
        adoRS.Close                        '关闭纪录
        conodbc.Close                      '关闭连接
        Set conodbc = Nothing              '释放对象
        Set adoRS = Nothing很明显,CurValue 不等于 LastValue,这是应该在数据库中记录CurValue值了,但是数据库中没有任何变化。不知道为什么
      

  5.   

    STRSQL = "SELECT * FROM HY_digital_data " _ 
              & "WHERE (HY_digital_data.digital_data_code = strTAG ) ORDER BY HY_digital_data.Time DESC"
    ********************************************************************应该改成
    STRSQL = "SELECT * FROM HY_digital_data " _ 
              & "WHERE (HY_digital_data.digital_data_code = '" & strTAG & "' ) ORDER BY HY_digital_data.Time DESC"
      

  6.   

    我改成这样,
     STRSQL = "SELECT * FROM HY_digital_data " _
               & "WHERE (HY_digital_data.digital_data_code = ‘011010’ ) ORDER BY HY_digital_data.Time DESC"然后按照第6楼,我改好的代码进行了测试,还是不行。
    是不是按照这种方式打开的SQL数据库不能进行“写”操作 ?
    因为我直接将STRSQL 换成HY_digital_data 进行“写”操作时,是正常的。
      

  7.   

     LastValue = adoRS.Fields(3).Value  '读取标签上一次的纪录值 
    这一句加断点检查一下那个STRSQL里的内容,和 adoRS.Fields(3).Value  的值
      

  8.   


    试过,不知怎么回事,打印出STRSQL中的值,明显跟所要写进数据库中的值不一样,但是结果就是写不进数据库,真是郁闷。
      

  9.   

    STRSQL = "SELECT * FROM HY_digital_data " _ 
              & "WHERE (HY_digital_data.digital_data_code = strTAG ) ORDER BY HY_digital_data.Time DESC"*********************************************************************这里加where有问题,有条件查询到的数据,以这个为基础再添加记录就有与数据库中现有数据冲突的可能,可能系统不让添加。
    如果把where去掉可能会添加
      

  10.   


    adoRS!digital_data_code = “011010”这句不应该加,看你这里似乎是作为修改条件的。