当前位置:编程学习 > VB >>

vb访问SQL数据库问题

电解?
                                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写进去了,但如果记录已存在,我要覆盖它,上面语句写不进去,急! --------------------编程问答-------------------- 电解? 
                                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写进去了,但如果记录已存在,我要覆盖它,上面语句写不进去,急!
如何确定一条记录? --------------------编程问答-------------------- Set rs = Nothing ????
如果这一句话存在,不就把rs指向一个空地址了吗?
后面的代码难道不提示“对象或者变量名未设置”之类的错误? --------------------编程问答-------------------- 同意楼上.
Set rs = Nothing
之后
set rs=new adodb.Recordset --------------------编程问答-------------------- 第一句:"Set rs = Nothing"
改成
if rs.state=1 then
  rs.close
  Set rs = Nothing 
endif --------------------编程问答--------------------
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的时候,使用&而不是+ --------------------编程问答-------------------- For j = 1 To int_sum 
If str_text(j)  < > "9999" Then rs!str_name(j) = str_text(j) 
Next 

还有,
这里你需要考虑rs的容量,是不是有int_sum那么多
否则会出错
最好做一个判断

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

Do while not rs.eof
  rs.field(i)=****
  rs.update
  rs.mowenext
loop

你的语句看不太明白,采用ado和DAO是有一定的区别的,如果是DAO,在 rs.field(i)=****之前要增加rs.edit语句,如果是ADO就不必了。 --------------------编程问答--------------------

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
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,