문제

나는 이름이 지정된 레코드를 정의했다 log. 이름이있는 MNESIA 테이블을 만들고 싶습니다 log_table. 테이블에 레코드를 쓰려고 할 때 bad_type 다음과 같이 오류 :

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

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

내가 무엇을 놓치고 있습니까?

도움이 되었습니까?

해결책

기본적으로 레코드 이름은 테이블 이름과 동일하다고 가정합니다.

이 문제를 해결하려면 테이블의 이름을 지정해야합니다. log 또는 옵션을 추가하십시오 {record_name, log} 테이블 옵션에서 (수정에서 수행 한 것처럼).

일반적으로 레코드와 테이블을 동일한 이름으로 지정하는 것이 좋습니다. 코드를 쉽게 읽고 디버그 할 수 있습니다. 그런 다음 사용할 수도 있습니다 mnesia:write/1 당신의 레코드 만으로만 인수로 기능하십시오. 그런 다음 Mnesia는 이름을 보면서 레코드를 넣을 테이블을 알아냅니다.

다른 팁

나는 그것을 발견했다. 내가 변경했을 때 mnesia:create_table 이것에 전화하십시오

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

모든 것이 잘 작동합니다.

로그 레코드의 정의는 어떻게 보입니까? 새 테이블을 처음부터 만들면 동일한 오류가 발생합니까 (즉, 먼저 MNESIA@ Directory를 제거).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top