我们有一个旧网站给我们一个错误。它使用VBScript,DB是SQL Server 2005。
以下是代码:
set oNotes = server.CreateObject("SCRIPTING.DICTIONARY")
openSQL "SELECT * FROM v_client_notes WHERE contact_id = " &_
my_contactID & " ORDER BY client_notes_duedate ASC"
do while rs.eof = false
set temp = server.CreateObject("SCRIPTING.DICTIONARY")
load_rs temp, rs
set oNotes(trim(rs("client_notes_id"))) = temp
rs.movenext'error on this line
loop
错误:
Microsoft OLE DB Provider for SQL Server错误“80040e23”
行句指的是已删除的行或标记为删除的行。
此错误不会一直发生,仅适用于使用某些contact_id返回的记录集。无法确定有效的和有效的无差异。
正如您所看到的,rs.movenext上发生了错误。
我已确保该表具有主键(client_notes_id)。
感谢您的帮助!
修改
以下是load_rs的代码:
function load_rs(dict,Byref record)
for each thing_record in record.fields
dict(thing_record.name) = trim(thing_record.value)
next
end function
这是更新脚本。这是我发布的单独页面(有点AJAX风格):
If request("client_notes") <> "" then
client_notes_subject = request("client_notes_subject")
client_notes_postedby = session("user")
client_notes_duedate = request("client_notes_duedate")
if client_notes_duedate = "" then
client_notes_duedate = NULL
end if
client_notes_date_entered = request("client_notes_date_entered")
client_notes = request("client_notes")
if isnumeric(request("contactID")) then contact_id = request("contactID")
if clientnotes_id="" then clientnotes_id="0"
openSQL("SELECT * FROM client_notes WHERE client_notes_id=" & clientnotes_id)
if rs.EOF then
openSQL("SELECT newid()")
client_notes_guid = rs(0)
openSQL("select * from client_notes")
rs.addnew
else
client_notes_guid = rs("guid")
rs.update
end if
rs("contact_id") = contact_id
rs("client_notes_subject") = client_notes_subject
rs("client_notes_postedby") = session("user")
'if client_notes_duedate <> Null then
rs("client_notes_duedate") = client_notes_duedate
'end if
rs("client_notes_date_entered") = client_notes_date_entered
rs("client_notes") = client_notes
rs("guid")=client_notes_guid
rs.update
'if client_notes_duedate = Null then
' sqlSetNullnotes = "UPDATE client_notes SET client_notes_duedate = NULL WHERE client_notes_id=" & clientnotes_id
' opensql sqlSetNullnotes
'end if
next_due_date = request("next_due_date")
if next_due_date = "" then
next_due_date = NULL
end if
openSQL("SELECT * FROM " & MainContactsDB & " WHERE Contact_ID=" & contactID)
rs("Last_Contact_Date") = client_notes_date_entered
rs("Next_Contact_Date") = next_due_date
rs.update
end if
openSQL方法:
Set rs = Server.CreateObject("ADODB.Recordset")
function openSQL(SQLrs)
if rs.state = 1 then rs.close
'response.write sqlRS
rs.Open SQLrs, conn, 3, 3
end function
答案 0 :(得分:1)
你目前有这个:
openSQL("SELECT * FROM " & MainContactsDB & " WHERE Contact_ID=" & contactID)
rs("Last_Contact_Date") = client_notes_date_entered
rs("Next_Contact_Date") = next_due_date
rs.update
为什么rs.EOF
没有处理?也许这就是代码濒临死亡的地方?
答案 1 :(得分:1)
好的,我能够解决这个问题。
我正在针对一个连接2个表的视图运行查询。
问题在于,有时提交的注释没有用户ID,因此从一个表到另一个表的连接不起作用,因为用户ID为null。我将查询修改为以下内容:
"SELECT * FROM v_client_notes WHERE contact_id = " & my_contactID & " AND user_id IS NOT NULL ORDER BY client_notes_duedate ASC"
现在错误没有回来,它只是排除了没有分配给某人的笔记。所以现在要解决为什么说明没有分配给某人。
谢谢!
答案 2 :(得分:0)
在您想要采取行动的表格中应该有主键,之后不会有任何更新该表的问题