电解?
                                Set rs = Nothing
                                rs.CursorType = adOpenKeyset
                                rs.LockType = adLockOptimistic
                                rs.Open "select *  from " + STR_SQL_FIELD + " where 发布中心='" + str_text(1) + "'and 发布时间='" + str_text(2) + "'and  TC本科编号='" + str_text(3) + "' and id=1 ", cn
                                For j = 1 To int_sum
                                    If str_text(j) <> "9999" Then rs!str_name(j) = str_text(j)
                                Next
                                rs.Update
                                rs.Close
数据写不进去?
我是要把一条记录写到SQL数据库里,如果是新记录ADDNEW写进去了,但如果记录已存在,我要覆盖它,上面语句写不进去,急!

解决方案 »

  1.   

    电解? 
                                    Set rs = Nothing 
                                    rs.CursorType = adOpenKeyset 
                                    rs.LockType = adLockOptimistic 
                                    rs.Open "select *  from " + STR_SQL_FIELD + " where 地点= '" + str_text(1) + " 'and 时间= '" + str_text(2) + " 'and  号码= '" + str_text(3) + " ' and id=1 ", cn 
                                    For j = 1 To int_sum 
                                        rs!str_name(j) = str_text(j) 
                                    Next 
                                    rs.Update 
                                    rs.Close 
    数据写不进去? 
    我是要把一条记录写到SQL数据库里,如果是新记录ADDNEW写进去了,但如果记录已存在,我要覆盖它,上面语句写不进去,急!
    如何确定一条记录?
      

  2.   

    Set rs = Nothing ????
    如果这一句话存在,不就把rs指向一个空地址了吗?
    后面的代码难道不提示“对象或者变量名未设置”之类的错误?
      

  3.   

    同意楼上.
    Set rs = Nothing
    之后
    set rs=new adodb.Recordset
      

  4.   

    第一句:"Set rs = Nothing"
    改成
    if rs.state=1 then
      rs.close
      Set rs = Nothing 
    endif
      

  5.   


    Set rs = Nothing
    修改为:
    Set rs = new adodb.recordset如果一定要清除原来数据
    可以
    if not rs is nothing then
       if rs.state<>0 then
          rs.close
       end if
    set rs=nothing
    end if还有,建议在连接string的时候,使用&而不是+
      

  6.   

    For j = 1 To int_sum 
    If str_text(j)  < > "9999" Then rs!str_name(j) = str_text(j) 
    Next 还有,
    这里你需要考虑rs的容量,是不是有int_sum那么多
    否则会出错
    最好做一个判断
      

  7.   

    谢谢各位大虾!
    处理ACCESS数据库就很简单,直接EDIT后,再UPDATE就行,但SQL数据库不行,我就先DELETE后再ADDNEW才行。set   rs=new   adodb.Recordset是增加一个新记录,但我是要把同样的旧记录覆盖,因为数据库已有了一条或多条记录,我要删除的,然后再写一条同样的记录。能不能不用删除旧记录,直接把新的覆盖它。
      

  8.   


    对数据库多条数据更新一般要采用:Do while not rs.eof
      rs.field(i)=****
      rs.update
      rs.mowenext
    loop你的语句看不太明白,采用ado和DAO是有一定的区别的,如果是DAO,在 rs.field(i)=****之前要增加rs.edit语句,如果是ADO就不必了。
      

  9.   


    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)If Rs.State <> adStateClosed Then Rs.Close
    CopyMemory Rs, 0&, 4 '清空Rs(等同与Set Rs=Nothing,不过比它快)
    Set Rs = New Recordset
    Rs.Open "SELECT * FROM " & STR_SQL_FIELD & " WHERE 地点='" & str_text(1) & "' AND 时间='" & str_text(2) & "' AND 号码='" & str_text(3) & "' AND id=1", cn, adOpenKeyset, adLockOptimistic
    If Rs.EOF Then Rs.Addnew '判断数据库中记录是否存在,如果不存在,则新增(Addnew),如果存在,则直接覆盖(注意:自动编号类型的列是不能覆盖的,会出错)
    For j = i To int_sum
        Rs!str_name(j) = str_text(j)
    Next j
    Rs.Update
    Rs.Close