0

私はこの記録を持っています

-record(transaction, {id, transaction_code, operation_code, ip_access).

このコードを使用して、transaction_backupという名前のこのテーブルのクローンを作成します

mnesia:create_table(transaction_backup,[{disc_copies, [node()]},{attributes, record_info(fields, transaction)},
    {record_name, transaction}]).

このコードを使用して、 transactionからtransaction_backupにデータを転送します

mnesia:transaction(fun() ->
  Records = mnesia:select(transaction, [{'_', [], ['$_']}]),
  [ok = mnesia:write(transaction_backup, Record, write) || Record <- Records]
end).

テーブルトランザクションに次の値が含まれているかどうかを意味します。

1   E001  F200  127.0.01
2   E102  F300  127.0.01
3   E105  F402  127.0.01

テーブルtransaction_backupには同じものが含まれます

1   E001  F200  127.0.01
2   E102  F300  127.0.01
3   E105  F402  127.0.01

ここで、テーブルtransaction_backupを作成したいのですが、今回はテーブルtransaction_backupに、transaction_backupの一意のIDとなるidbackという名前の他のフィールドがあります。

したがって、transaction_backupを別の方法で作成する必要があります。

   mnesia:create_table(transaction_backup,[{disc_copies, [node()]},{attributes, record_info(fields, transaction)},
        {record_name, transaction}]).

idbackの値は、このコードを使用して自動的に増加します

idback= next_id(tranasction_backup),

next_id(T) ->
    mnesia:dirty_update_counter(counter, T, 1).

したがって、transactionからtransaction_backupにデータを転送するときは、次のようなものを作成する必要があります。

 mnesia:transaction(fun() ->
      Records = mnesia:select(transaction, [{'_', [], ['$_']}]),



F = fun() ->

                      Idback= next_id(tranasction_backup),

                        Trans = #tranasaction_backup{idback= Idback},
                        mnesia:write(Trans),
                        {ok};

        end,
    {atomic, Val} = mnesia:transaction(F),
    Val.



[ok = mnesia:write(transaction_backup, Record, write) || Record <- Records]
    end).

したがって、テーブルtransaction_backupにはこの値が含まれます

1  1   E001  F200  127.0.01
2  2   E102  F300  127.0.01
3  3   E105  F402  127.0.01

テーブルtransaction_backupを作成する方法を知りたい

私が言ったように私は試してみます:

 mnesia:create_table(transaction_backup,[{disc_copies, [node()]},{attributes, record_info(fields, transaction)},
        {record_name, transaction}]).

しかし、私の場合、テーブルtransaction_backupには、 idbackという名前のテーブルtransactionよりも多くのフィールドがあります。

したがって、テーブルtransaction_backupを作成するには、別の方法で試す必要があります

4

1 に答える 1

0

はい、同じ取引記録を持つことができます。idback で新しいレコードを作成する必要があります。バックアップ テーブルに書き込む前に、すべての要素を transaction から transaction_backup レコードにコピーする必要があります。または、あなたがすることができます

 Records = mnesia:select(transaction, [{'_', [], ['$_']}]),

[ok = mnesia:write(erlang:setelement(1, erlang:insert_element(2, Record, next_id(tranasction_backup)), transaction_backup) || Record <- Records]

上記はR16A以降でのみ機能します。そうでなければあなたができる

     [ok = mnesia:write(to_backup(Record, next_id(tranasction_backup))) 
|| Record <- Records].

そして to_backup は次のようになります

    to_backup(Record, Id) ->
        [_H| List] = tuple_to_list(Record),
        list_to_tuple([transaction_backup, x| List]).
于 2013-02-19T18:13:11.497 に答える