2013-02-12 44 views
0

我有我的数据库Mnesia的两条表有该语法:将数据传送到另一台

-record(person, {firstname, lastname,adress}). 
-record(personBackup, {firstname, lastname,adress}). 

我希望将数据从表中转移personBackup

我认为我应该与这个语法创建两个表(我与你的想法一致)

mnesia:create_table(person, 
    [{disc_copies, [node()]}, 
    {attributes, record_info(fields, person)}]), 
mnesia:create_table(person_backup, 
    [{disc_copies, [node()]}, 
    {attributes, record_info(fields, person)}, 
    {record_name, person}]), 

现在我有一个名为功能验证

在此功能,我会做一个测试,如果测试验证,我应该从 transfert数据person_backup,然后我应该做一个重置

这是我的功能

verify(Form)-> 

if Form =:= 40 -> 

%%here I should transert data from person to person_backup : read all lines from person and write this lines into person_backup 

reset(); 

Form =/= 40 -> 
io:format("it is ok") 
end. 

这是功能重置

reset() -> 
    stop(), 
    destroy(), 
    create(), 
    start(), 
    {ok}. 

回答

0

您不必为每个表使用单独的记录定义。 mnesia:create_table需要record_name选项,这样你就可以创建你的表是这样的:

mnesia:create_table(person, 
    [{disc_copies, [node()]}, 
    {attributes, record_info(fields, person)}]), 
mnesia:create_table(person_backup, 
    [{disc_copies, [node()]}, 
    {attributes, record_info(fields, person)}, 
    {record_name, person}]), 

的价值record_name默认为表的名称,所以没有必要指定它person。 (我将personBackup更改为person_backup,因为Erlang原子通常写成不带驼峰的情况,与变量不同)。

然后您可以在两个表中放入相同类型的记录。阅读或选择person,并写入person_backup,不需要转换。

+0

,谢谢,我已经更新了我的问题 – 2013-02-12 14:43:02

+1

所有副本和节点我认为我们应该读表的人都行,之后我们应该写这行到表每son_backup – 2013-02-12 16:45:03

0

没有必要为每个表格分别定义一个记录。变量90和80将会诀窍。如果你想采取recod_name的选项,你可以使用函数mnesia:CREATE_TABLE

@ legoscia,你是除了第6行

Mnesia的一切正确的:CREATE_TABLE(人,如果球员值= 1

这样的结果可以盘。

+0

可以请你更具体地澄清你的答案关于这行mnesia:create_table(person,如果player值= 1,并且正如我所说我想从表中传输数据到另一个表,所以我们应该读取第一个表中的所有数据然后将这些数据传输到第二个表格 – 2013-02-13 13:13:35

相关问题