2008-09-24 90 views
4

我定義了一條名爲log的記錄。我想創建名稱爲log_table的mnesia表。當我嘗試寫一個記錄表,我得到bad_type錯誤如下:Mnesia寫入失敗

([email protected])4> mnesia:create_table(log_table, [{ram_copies, [node()]}, 
               {attributes, record_info(fields, log)}]). 
{atomic,ok} 

([email protected])5> mnesia:dirty_write(log_table, #log{id="hebelek"}). 
** exception exit: {aborted,{bad_type,#log{id = "hebelek"}}} 
in function mnesia:abort/1 

我缺少什麼?

回答

7

默認情況下,記錄名稱假定與表名相同。

要解決這個問題,您應該爲您的表命名爲log或在您的表格選項中附加選項{record_name, log}(就像您在修復中所做的那樣)。

通常情況下,讓您的記錄和表命名爲相同的東西是很好的做法,它使代碼更易於閱讀和調試。您也可以使用mnesia:write/1函數,只將您的記錄作爲參數。然後,Mnesia通過查看名字來計算出哪張表可以記錄下來。

0

您對日誌記錄的定義看起來如何?如果您從頭開始創建一個新表(即先刪除Mnesia @目錄),是否會得到相同的錯誤?

2

我找到了。當我更改mnesia:create_table時致電

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

一切正常。