2010-06-17 6 views
1

두 개의 테이블에 하나의 노트와 하나의 태그가 있으며 노트의 기본 키에서 ID를 태그 테이블에 사용하려면 이드를 만들고 싶습니다.하지만 어디에서 잘못했는지는 알 수 없습니다. 내 노트 ID는 dirty_update_counter과 함께 다른 테이블 카운터에서 생성됩니다.mnesia 기본 키

태그의 id_notes에 대한 나의 기능은 다음과 같습니다 :

Fun = fun() -> 
       mnesia:write(#tag{ id_note =0}) 
     end, 
     mnesia:transaction(Fun). 

generate_Oid(TableName) when is_atom(TableName) -> 
     F = fun() -> 
       [Oid] = mnesia:read(tag, TableName, write), 
       NewId = Oid#tag.id_note+1, 
       New = Oid#tag{id_note = NewId}, 
       mnesia:write(New), 
       NewId 
     end, 
     mnesia:transaction(F). 

insert_n(N) when is_record(N, note) -> 
     F = fun() -> 
     {atomic, Id} = generate_Oid(note), 
     New = N#note{id = Id}, 
     mnesia:write(New), 
     New 
     end, 
     mnesia:transaction(F). 

find_n(Id) when is_integer(Id) -> 
     {atomic, [N]} = mnesia:transaction(fun() -> 
       mnesia:read({note, Id}) 
         end), 
N. 

그러나이 기능은 내 노트 테이블에 내 id 필드가 있다는 사실에도 불구하고, 테이블 태그에서 제 분야 id_note를 증가하지 않습니다 카운터 테이블에서 증가합니다.

미리 도움을 청하십시오.

답변

0

mnesia:dirty_update_counter/3 방법이 귀하가 찾고있는 것일 수 있습니다.

+0

감사합니다. 우선, 귀하의 답변에 대해 감사드립니다. 내 기능은 다음과 같습니다. new_id (Id) -> \t mnesia : dirty_update_counter (참고, Id, 1). – user331852