レコード名と同じ名前ではないテーブルを作成します。以下はコードスニペットです
%%----レコード定義-------------------------------- -record(object、{key、value})。これを行うと、mnesiaは大声で叫びます。
%%----テーブルの作成------------------------------------- {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)。
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プロジェクトは問題なく、このような奇妙な/予期しない動作はありません。助言がありますか ?