3


これらの 3 つのテーブル [ Orders、order_Items、order_comment ] があります。

|    -Orders-    |     |  -Order_Items-   |     | -Order_comment- |
|    order_id    |     |  order_RegCode   |     |    order_id     |
| order_RegCode  |

ご覧のとおり、これら 3 つのテーブルは 2 つの一意のキーによって関連付けられています。order_idorder_RegCode

Ps:order_RegCodeは主キーではなく、文字列です!

注文を削除するときにorder_id、他の2つのテーブルに保存されているすべての関連情報を削除したい。しかし、Do While を使用すると、 が得られerror Operation is not allowed when the object is closedました。

私を導いてください。

コードは次のとおりです。

Dim Order_ID
    Order_ID = Int(Request.Form("ID"))

Set Conn = server.createobject("adodb.connection")
Conn.open StrConn
Set Rs = Conn.execute("SELECT * From orders WHERE order_id="& Order_ID &"")
If NOT Rs.EOF then

    RegCode = Rs("order_RegCode")

    '//== Delete Order
    Set Rs = Conn.execute("Delete From orders where order_id = "& orderID &"")

    '//== Delete All Comments Belong to Order
    Set Rs = Conn.execute("Select * From order_comment where order_id = "& Order_ID &"")
    If NOT Rs.EOF then
        Do While NOT Rs.EOF
            Set Rs = Conn.execute("Delete From order_comment where order_id = "& Order_ID &"")
        Rs.MoveNext
        Loop
    End if

    '//== Delete All Items Belong to Order
    Set Rs = Conn.execute("Select * From order_items where order_code = '"& RegCode &"'")
    If NOT Rs.EOF then
        Do While NOT Rs.EOF
            Set Rs = Conn.execute("Delete From order_items where order_code = '"& RegCode &"'")
        Rs.MoveNext
        Loop
    End if

End if
4

1 に答える 1

1

アクションクエリにレコードセットを使用しないでください。これらの行:

Set Rs = Conn.execute("Delete ...

する必要があります:

Conn.execute("Delete ...

すべてのレコードセットに同じオブジェクトを使用することはできません。外側のループ用にレコードセットが必要になり、内側のループ用に別のレコードセットが必要になります。しかし、私は提案します:

Dim Order_ID
Order_ID = Int(Request.Form("ID"))

Set Conn = server.CreateObject("adodb.connection")
Conn.Open StrConn
Set rs = Conn.Execute("SELECT * From orders WHERE order_id=" & Order_ID)
If Not rs.EOF Then

    RegCode = rs("order_RegCode")

    '//== Delete Order
    Conn.Execute ("Delete From orders where order_id = " & orderID)
    Conn.Execute ("Delete From order_comment where order_id = " & Order_ID)
    Conn.Execute ("Delete From order_items where order_code = '" & RegCode & "'")

End If
于 2012-08-16T22:56:22.860 に答える