Pregunta

Definí un registro llamado log.Quiero crear una tabla mnesia con nombre. log_table.Cuando intento escribir un registro en la tabla, obtengo bad_type error de la siguiente manera:

(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é me estoy perdiendo?

¿Fue útil?

Solución

De forma predeterminada, se supone que el nombre del registro es el mismo que el nombre de la tabla.

Para solucionar este problema, debes nombrar tu tabla simplemente log o agregar la opción {record_name, log} en las opciones de su tabla (como lo hizo en su solución).

Generalmente es una buena práctica dejar que el registro y la tabla tengan el mismo nombre, ya que hace que el código sea más fácil de leer y depurar.Luego también puedes usar el mnesia:write/1 funciona con solo su registro como único argumento.Luego, Mnesia determina en qué tabla colocar el registro mirando el nombre.

Otros consejos

Lo encontré.cuando cambié mnesia:create_table llama a esto

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

todo funciona bien.

¿Cómo se ve su definición de los registros de registro?¿Recibe el mismo error si crea una nueva tabla desde cero (es decir,elimine primero el directorio Mnesia@).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top