2

ここで何が問題なのかわかりませんが、構文を誤解しているだけかもしれません。「ryan」という名前の「user」mnesia テーブルから「user」レコードを削除しようとしています (それらの倍数があります)。これが私がすることです:

Delete=#user{first_name = "ryan", _ = '_'},
mnesia:dirty_delete_object(Delete)

これが私のレコード定義です:

-record(user, {id,
               username,
               password,
               email,
               first_name,
               last_name,
               last_login, % Date/time user last logged in
               reg_date}). % Date/time user registered the account

そして、ここに私が得ている例外があります:

** exception exit: {aborted,
                       {bad_type,user,
                           {user,'_','_','_','_',"ryan",'_','_','_'}}}
     in function  mnesia:abort/1
     in call from users:register/1

それは完璧な一致のようです。この問題の原因は何ですか?

4

1 に答える 1

12

mnesia:delete_object/1テーブルから特定のレコード/3を削除するために使用されます。一致仕様に基づいて複数のレコードを削除することはありません。これは のより正確なバージョンであり、 bagテーブルから特定のレコードを削除する方法を提供します。mnesia:delete/*

仕様に一致する複数のレコードを削除するには (例: をname="ryan"使用)、次のコードを使用します。

Delete=#user{first_name = "ryan", _ = '_'},
List = mnesia:dirty_match_object(Delete)
lists:foreach(fun(X) ->
                      mnesia:dirty_delete_object(X)
              end, List).

またはそれはトランザクションバージョンです:

Delete=#user{first_name = "ryan", _ = '_'},
Fun = fun() ->
              List = mnesia:match_object(Delete)
              lists:foreach(fun(X) ->
                                    mnesia:delete_object(X)
                            end, List)
      end,
mnesia:transaction(Fun).
于 2009-03-16T14:14:53.153 に答える