2016-04-13 12 views
3

あるコードスニペットです:は5つのレコードを削除しますが、と、RecordsAffectedプロパティは、ここで0

Private Sub frmSearch_UnMarkAll() 
Const sqlD As String = "DELETE * FROM PickList WHERE TableName = ""CARS"" AND KeyNo IN (" & _ 
"SELECT RecNo FROM Cars " 
If frmSearch.WhereSql <> vbNullString Then 
    CurrentDb.Execute sqlD & frmSearch.WhereSql & ")" 
End If 
Stop 
End Sub 

この関数はfrmSearchフォーム上のコマンドボタンをクリックすることによって呼び出されます。このボタンは、上記のコードで処理されるイベントを発生させます。 WhereSqlは、検索画面に表示されるリストボックスのwhere句です。

? Currentdb.RecordsAffected 
0 is the result. 

私はピックリストテーブルと、適切なチェック:それは、コードがStopステートメントに達したときに「> 1441 Cars.RecNoはWHERE」 が、私はすぐに窓やタイピングを使用してRecordsAffectedプロパティをチェックするような値を持っていますアイテムが削除されました。

私の質問:これはバグですか?それとも、レコードを削除してもそれが影響を受けないのは普通ですか?

私はこの問題を回避しました。 PickListテーブルからSequenceNoフィールドを削除しました。私は、PickListテーブルのTableNameとKeyNoを作成してインデックスを作成し、Uniqueをyesと指定しました。今、私はちょうど

INSERT INTOピックリスト(テーブル名、LastChangedDate、KeyNo)
値(今()テーブル名、tablenamedからRECNO)

INSERTは、3022エラーのため失敗した場合、それはこの例では重複して入力を試みます。他のすべては、私が最初に機能したかったやり方で機能します。 RecordsAffectedプロパティは、コードまたはビューでデバッガで印刷してテストすると常にゼロです。インタラクティブにアクセスからアクションクエリを実行すると、その情報がすべて表示されるため、まだ難解です。他のリレーショナルDBMS(標準のもの)を実行する場合は、クエリエンジンを使用するときに常にフィードバックがあります。これがアクセスのバグであれば、他の人が失敗しているとは信じられません。私は何とかやめたと思う傾向があります。うまくいけば、私は孤独なパイオニアではない。ありがとう、事前にこれを見て。

答えて

3

何が問題になるかについては、hereの説明を参照してください。実際には、RecordsAffectedプロパティを取得するときに同じオブジェクトを参照していません。両方の場合に明示的な参照と使用を設定する必要があります。 次のようなもの:

dim db as dao.database 
set db=currentdb 
db.execute "some SQL statement", dbfailonerror 
debug.print db.recordsaffected 
関連する問題