Frage
I definiert einen Datensatz namens log
. Ich möchte eine Mnesia Tabelle mit dem Namen log_table
erstellen. Wenn ich versuche, einen Datensatz zu Tisch zu schreiben, erhalte ich bad_type
Fehler wie folgt:
(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
Was bin ich fehlt?
Lösung
Standardmäßig wird der Satznamen angenommen wird, der gleiche wie der Tabellenname sein.
Um dies zu beheben Sie entweder Ihre Tabelle nur nennen sollte log
oder die Option {record_name, log}
in der Tabelle Optionen anhängen (wie Sie in Ihrem fix getan haben).
Es ist in der Regel eine gute Praxis, um Ihre Aufzeichnung und Tisch lassen die gleiche Sache zu nennen, es ist der Code leichter zu lesen und zu debuggen macht. Sie können die mnesia:write/1
Funktion auch dann nur mit Ihrem Datensatz als einziges Argument. Mnesia dann herausfindet, welche Tabelle in den Datensatz zu setzen, indem du den Namen suchen.
Andere Tipps
Ich habe es gefunden. Wenn ich geändert mnesia:create_table
Aufruf dieses
mnesia:create_table(log_table, [{ram_copies, [node()]},
{record_name, log},
{attributes, record_info(fields, log)}]).
alles funktioniert OK.
Wie sieht Ihre Definition der Log-Aufzeichnungen aus? Haben Sie die gleiche Fehlermeldung erhalten, wenn Sie eine neue Tabelle von Grund auf (das heißt entfernen Sie das Mnesia @ Verzeichnis zuerst).
erstellen