1

エラーが発生する古いサイトがあります。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
4

3 に答える 3

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"

現在、エラーは再発しません。誰かに割り当てられていないメモが除外されるだけです。それでは、メモが誰かに割り当てられなかった理由を修正しましょう。

ありがとう!

于 2012-05-22T20:24:27.310 に答える
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ですか?おそらく、これはコードが死んでいる場所ですか?

于 2012-05-22T18:41:06.227 に答える