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 , 数据库(包含打印,安装,报表)