Question

J'ai défini un enregistrement nommé log . Je souhaite créer une table mnesia nommée log_table . Lorsque j'essaie d'écrire un enregistrement dans la table, l'erreur bad_type se présente comme suit:

(node1@kitt)4> mnesia:create_table(log_table, [{ram_copies, [node()]}, 
                                               {attributes, record_info(fields, log)}]).
{atomic,ok}

(node1@kitt)5> mnesia:dirty_write(log_table, #log{id="hebelek"}).
** exception exit: {aborted,{bad_type,#log{id = "hebelek"}}}
in function  mnesia:abort/1

Qu'est-ce qui me manque?

Était-ce utile?

La solution

Par défaut, le nom de l'enregistrement est supposé être le même que celui de la table.

Pour résoudre ce problème, vous devez nommer votre table uniquement log ou ajouter l'option {nom_enregistrement, log} dans les options de votre table (comme vous l'avez fait dans votre correctif). ).

Il est généralement judicieux de laisser le même nom à votre enregistrement et à votre table, cela facilite la lecture et le débogage du code. Vous pouvez également utiliser la fonction mnesia: write / 1 avec uniquement votre enregistrement comme argument. Mnesia détermine ensuite la table dans laquelle enregistrer le disque en regardant son nom.

Autres conseils

Je l'ai trouvé. Quand j'ai changé mnesia: create_table appel à cette

mnesia:create_table(log_table, [{ram_copies, [node()]},
                                {record_name, log},
                                {attributes, record_info(fields, log)}]).

tout fonctionne bien.

À quoi ressemble votre définition des enregistrements de journaux? Obtenez-vous la même erreur si vous créez une nouvelle table à partir de zéro (c’est-à-dire supprimez d’abord le répertoire Mnesia @).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top