Google에 오류가 발생하는 이전 사이트가 있습니다. 그것은 VBScript를 사용하고 DB 여기에 SQL 서버 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 error '80040e23'
Row handle referred to a deleted row or a row marked for deletion.
이 오류가 기록 세트가 반환 단지에 대한 모든 시간을 발생하지 않습니다 특정 contact_id가 있습니다. 일하는 것과 그렇지 않은 것의 차이점을 정확하게 지적하지 못했습니다.
위에서 알 수 있듯이 오류는 rs.movenext에서 발생합니다.
테이블에 기본 키 (client_notes_id)가 있는지 확인했습니다.
도움 주셔서 감사합니다.
다음function load_rs(dict,Byref record)
for each thing_record in record.fields
dict(thing_record.name) = trim(thing_record.value)
next
end function
업데이트 스크립트입니다 :
편집 여기
는 load_rs 코드입니다.
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
을 갱신 할 문제가 아니라 그 후, 작업을하고자하는에 테이블의 기본 키를 가지고해야 하는가? 또한 줄 번호가 정확합니까? –
@Aaron Bertrand, load_rs 코드로 내 질문을 업데이트했습니다. 주위에 조건을 넣는 것을 포함하여 rs.movenext를 diff 행으로 옮겼습니다. 오류 줄은 그 코드와 일치합니다. – UpHelix
이 사이트는 이전 사이트라고 했으므로 최근까지는 제대로 작동했다고 가정합니다. 그래서 무엇이 바뀌 었습니까? 또한 함수가 수행중인 작업을 정확하게 표시 할 수 있습니까 (예 :'client_notes_id' 열이 어떻게 변경됩니까?)?이 모든 레코드 집합, 루프, 사전 개체의 오버 헤드없이 간단한 UPDATE 문을 사용하여 수행 할 수 및 아마도이 레거시 코드 문제 해결 것보다 더 빨리 다시 작성 될 것이라고 확신합니다 ... –