2013-02-18 3 views
0

J'ai deux tables contre et le nombrede transfert de données entre deux tables Mnesia

-record(counter, {key, value}). 
    -record(count, {key, value}). 


    create() -> 
     mnesia:create_schema([node()]), 
     mnesia:start(), 
     mnesia:create_table(counter, [{attributes, record_info(fields, counter)}, {disc_copies, [node()]}]), 
     mnesia:create_table(count, [{attributes, record_info(fields, count)}, {disc_copies, [node()]}]), 



    mnesia:stop(). 

mais quand je tente d'exécuter cette fonction

backup()-> 

    mnesia:transaction(fun() -> 
    Records = mnesia:select(counter, [{'_', [], ['$_']}]), 
    [ok = mnesia:write(count, Record, write) || Record <- Records] 
end). 

J'ai cette erreur

2> model:backup(). 
{aborted,{bad_type,{counter,test,353}}} 

quand J'utilise votre code:

mnesia:create_table(count, [{record_name, counter}, {attributes, record_info(fields, counter)}, {disc_copies, [node()]}]). 

et quand je tente d'exécuter le modèle: reset() il supprime le nombre de table et les données de la table contre

mon objectif est juste de supprimer les données du compteur

c'est le code de réinitialisation()

reset() -> 
    stop(), 
    destroy(), 
    create(), 
    start(), 

    {ok}. 


destroy() -> 
    mnesia:start(), 
    mnesia:delete_table(counter), 
    mnesia:delete_table(person), 
    mnesia:stop(), 
    mnesia:delete_schema([node()]). 


create() -> 
    mnesia:create_schema([node()]), 
    mnesia:start(), 
    mnesia:create_table(counter, [{attributes, record_info(fields, counter)}, {disc_copies, [node()]}]), 
    mnesia:create_table(person, [{attributes, record_info(fields, person)}, {disc_copies, [node()]}]), 
    mnesia:create_table(person_backup,[{disc_copies, [node()]},{attributes, record_info(fields, person)}, 
    {record_name, person}]), 
    mnesia:stop(). 

Répondre

1

Vous essayez d'écrire un enregistrement de compteur dans la table de comptage, ce qui entraîne une erreur. Il y a deux façons de faire ça.

  1. Soit utiliser un enregistrement unique appelé compteur et utiliser dans pour la table de comptage aussi mnesia: create_table (compte, [{record_name, compteur}, {attributs, record_info (champs, compteur)}, { disc_copies, [node()]}]).

  2. Si ce qui précède n'est pas possible si vous avez d'autres champs, vous pouvez copier les éléments requis à partir de l'enregistrement du compteur pour compter l'enregistrement avant d'écrire.

+0

J'ai mis à jour ma question, merci –

Questions connexes