2016-07-07 23 views
0

Webページ上でクリックされたボタンに基づいてデータベースから項目を削除します。ユーザーは自分のアカウントからアイテムを削除することを選択できます。従来のASPストアドプロシージャの戻り状況

アカウント番号とアイテム番号をストアドプロシージャに渡します。ストアドプロシージャは、存在する場合はアイテムを削除し、成功の場合は1を返し、エラーがあった場合は0を返します。

私の問題は、常に提出したときにエラーを返すASPページということです:私は、ストアド・プロシージャを直接提出する場合

ADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed.

、私はアイテムを削除することができ、ステータスが1、それであればここでレコードが作成されます

:削除されず、レコードはそのため0

として地位を持って、常にステータスを持っているのいずれかここで1または0

は、ストアドプロシージャで作成されたレコードがあるはずです

CREATE PROCEDURE dbo.SAVED_ITEM_DELETE 
    @AccountID int, 
    @Item int 
AS 
BEGIN 
    DECLARE @Status INT 

    SET @Status = 1  

    IF EXISTS(SELECT AccountID FROM Accounts_Items 
      WHERE AccountID = @AccountID AND Item = @Item) 
    BEGIN TRY     
     DELETE Account_Items 
     WHERE AccountID = @AccountID AND Item = @Item    
    END TRY 
    BEGIN CATCH 
     SET @status = 0 
    END CATCH  

    SELECT @Status AS Status 
END 

そして、ここでは、私はライン上のエラーを取得しています

dim de 
Set de = Server.CreateObject("ADODB.recordset") 
de.open "SAVED_ITEM_DELETE 1,49", connect,2 

IF not de.EOF THEN 
    IF de("Status") = 1 THEN 
     response.write request("delete") & " - deleted" 
    ELSE 
     response.write request("delete") & " - not deleted" 
    END IF 
END IF 

プロシージャを呼び出すASPです:

IF NOT de.EOF THEN 

してください、助けてくださいしてください!私はちょうどASPが、1または0のStatusというフィールドを持つレコードセットを見ないのではないかと思うことができません。

+0

どうしてレコードセットが必要ですか?代わりに出力パラメータを使用してください... –

+0

私はこれまでに聞いたことがありません。説明できますか?返信いただきありがとうございます。 – TVRV8S

+0

sqlは非常にシンプルです。変数からパラメータに '@ status'を変更してキーワード' output'を追加するだけで、 'adoddbo.Command'に戻す方法は本当に思い出せません。私が最後にasp3を使ってから10年以上経ちました。 –

答えて

0

nocountオプションを使用して、あなたのレコードセットに送られた最初の結果です。 また、テーブル名としてAccounts_ItemsとAccount_Itemsを使用しているので、おそらくタイプミスがあります。

CREATE PROCEDURE dbo.SAVED_ITEM_DELETE 
    @AccountID int, 
    @Item int 
AS 
BEGIN 
    SET NOCOUNT ON 
    DECLARE @Status INT 

    SET @Status = 1  

    IF EXISTS(SELECT AccountID FROM Accounts_Items 
      WHERE AccountID = @AccountID AND Item = @Item) 
    BEGIN TRY     
     DELETE Accounts_Items 
     WHERE AccountID = @AccountID AND Item = @Item    
    END TRY 
    BEGIN CATCH 
     SET @status = 0 
    END CATCH  

    SET NOCOUNT OFF 
    SELECT @Status AS Status 
END 
関連する問題