4

。という名前のレコードを定義しましたlog。名前を付けてmnesiaテーブルを作成したいと思いますlog_table。テーブルにレコードを書き込もうとすると、bad_type次のようなエラーが発生します。

(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

私は何が欠けていますか?

4

3 に答える 3

7

デフォルトでは、レコード名はテーブル名と同じであると想定されます。

これを修正するには、テーブルに名前を付けるか、テーブル オプションにlogオプションを追加する{record_name, log}必要があります (修正で行ったように)。

通常は、レコードとテーブルに同じ名前を付けることをお勧めします。これにより、コードが読みやすくなり、デバッグしやすくなります。mnesia:write/1また、レコードのみを引数として関数を使用することもできます。次に、Mnesia は名前を見て、どのテーブルにレコードを配置するかを判断します。

于 2008-09-24T12:51:38.343 に答える
2

私はそれを見つけました。mnesia:create_tableこれに電話を変えたとき

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

すべて正常に動作します。

于 2008-09-24T09:35:03.620 に答える
0

ログレコードの定義はどのように見えますか?新しいテーブルを最初から作成した場合(つまり、最初にMnesia @ディレクトリを削除した場合)にも同じエラーが発生しますか?

于 2008-09-24T09:24:12.740 に答える