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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top