レコード名と同じ名前ではないテーブルを作成します。以下はコードスニペットです
%%----レコード定義--------------------------------
-record(object、{key、value})。
%%----テーブルの作成-------------------------------------
{atomic、ok} = mnesia:create_table(mytable、[
{type、set}、
{frag_properties、[
{node_pool、[node()]}、
{n_fragments、4}、
{n_disc_copies、1}]}、
{attributes、record_info(fields、object)}]
)、
%%-------挿入--------------------------------
insert()->
F = fun()->
R = #object {
key = "MyKey"、
value="値"
}、
mnesia:write(mytable、R、write)
終わり、
mnesia:activity(transaction、F、[]、mnesia_frag)。
これを行うと、mnesiaは大声で叫びます。tv:start().テーブルは非常によく作成されており、でまたはで表示できますmnesia:info().。これは私のシェルで見たエラーです。**例外終了:{中止、
{bad_type、
#物体{
key = "MyKey"、
value ="Value"}}}
関数mnesia:wrap_trans / 6(mnesia.erl、395行目)
さて、通常、テーブルの作成時に使用されるレコード定義が、テーブルに挿入されているレコード構造と異なる場合、このようなエラーが発生すると思いました。これは、私が使用している関数の問題にすぎないのではないかと思います。つまりmnesia:write/3、テーブル名がレコード名と異なる場合に役立ちます。スキーマを削除して新しく作成しようとしましたが、すべて無駄でした。を使用しない場合
mnesia:write/3、レコードはテーブルに正しく挿入されます。しかし、私のアプリケーションのニーズは、作成されるいくつかの異なるテーブルを持っているが、それらは同じレコード構造/定義を格納するようなものです。別のテーブルが欲しいのですが、それらのrecord_info定義は同じです。ドキュメントのどこかで、これは非常に可能であると読みました。私は走っています:
Erlang otp R15B, mnesia-4.6 , windows 7 enterprise, 32-bit operating system, Dell laptop, intel core i5, 4GB RAM 私が取り組んでいる他のすべてのerlangプロジェクトは問題なく、このような奇妙な/予期しない動作はありません。助言がありますか ?