mnesia delete_object exception?
Domanda
Non vedo che cosa non va qui, ma potrei semplicemente fraintendere la sintassi. Sto cercando di eliminare un " utente " registra dal mio "utente" tabella di mnesia che ha il nome di "quotazione" (ce ne sono multipli). Ecco cosa faccio:
Delete=#user{first_name = "ryan", _ = '_'},
mnesia:dirty_delete_object(Delete)
Ecco la mia definizione di record:
-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
Ed ecco l'eccezione che sto ricevendo:
** exception exit: {aborted,
{bad_type,user,
{user,'_','_','_','_',"ryan",'_','_','_'}}}
in function mnesia:abort/1
in call from users:register/1
Sembra una partita perfetta. Cosa potrebbe causare questo problema?
Soluzione
mnesia: delete_object / 1
e / 3
vengono utilizzati per eliminare dati dalla tabella. Non elimina più record in base a specifica partita . È solo una versione più precisa di mnesia: delete / *
- ti dà un modo per eliminare i record specifici dalla tabella bag .
Per eliminare più record corrispondenti alla specifica (ad es. con name = " ryan "
) utilizzare il seguente codice:
Delete=#user{first_name = "ryan", _ = '_'},
List = mnesia:dirty_match_object(Delete)
lists:foreach(fun(X) ->
mnesia:dirty_delete_object(X)
end, List).
o è la sua versione transazionale:
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).