2009-03-16 3 views
1

Ich sehe nicht, was hier falsch ist, aber ich kann nur die Syntax missverstehen. Ich versuche, einen "Benutzer" Datensatz von meiner "Benutzer" mnesia Tabelle zu löschen, die den ersten Namen von "Ryan" haben (es gibt vielfache von ihnen). Hier ist, was ich tue:mnesia delete_object Ausnahme?

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

Hier ist mein Zeuge Definition:

-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 

Und hier ist die Ausnahme, die ich bin immer:

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

Es scheint wie ein perfekt aufeinander abgestimmt. Was könnte dieses Problem verursachen?

Antwort

9

mnesia:delete_object/1 und /3 werden verwendet, um angegebenen Datensatz aus der Tabelle zu löschen. Es löscht nicht mehrere Datensätze basierend auf Übereinstimmung Spezifikation. Es ist nur eine genauere Version von mnesia:delete/* - es gibt Ihnen eine Möglichkeit, spezifischen Datensatz aus der Tasche Tabelle zu löschen.

Um mehrere Datensätze passende Spezifikation (zB mit name="ryan") Verwenden Sie den folgenden Code zu löschen:

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

oder es ist transaktionale Version:

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). 
+0

Der eigentliche Grund der Lösch versagt ist, dass der Schlüssel nicht gebunden. Wie Sie sagen, löschen alle Löschvorgänge nach Schlüssel, nicht nach Übereinstimmung. – archaelus

Verwandte Themen