2009-06-22 2 views
1

MS의 OneNote는 트리 뷰가 아닌 탭 인터페이스를 통해 정보가 표시 되더라도 기본적으로 단순한 트리의 데이터 계층 구조를 사용합니다. 페이지가있는 "섹션"을 포함 할 수있는 "노트"로 시작합니다. 나는 이것을 모델링하려고 노력하고있다. 필자의 경우, 페이지는 RichEdit의 내용에 링크됩니다.Delphi : MS OneNote의 데이터 구조를 모방합니다

내 문제는이 작업을 수행 할 방법을 찾을 수 없다는 것입니다. 내 문제는 몇 가지 가능성 중에서 궁극적으로 가장 단순한 것이 확실하지 않다는 것입니다. 그것이 내가 당신이 들어 오기를 희망하는 곳입니다.

예를 들어, 정규 [MyBase] 데이터베이스를 사용할 수 있습니다. 페이지 데이터 세트에는 이름과 RichEdit 데이터에 대한 필드가 있습니다. 페이지는 섹션 안에 중첩되며 섹션은 노트 안에 중첩됩니다.

잠시 생각해 본다면 간단한 stringLists로 모델링 할 수있는 것처럼 보입니다. 특히 목록의 각 요소에 쉼표로 구분 된 ID 및 위치 값이 포함되어있는 경우 노트/섹션/페이지 이름으로.

는하지만이 또한 내가

:-) XML에 대한 자세한 내용 이었다면 더 많은 경험 사람들은 어떻게 생각하십니까 ... XML에 적합 수 있습니다 뭔가 것 같아?

언제나처럼 ...

답변

2

파일 시스템에 저장하는 경우 .... 폴더를 사용하지 않는 이유는 무엇입니까? 이것이 바로 OneNote의 기능입니다. "노트북"과 "섹션 그룹"은 단순히 일반 파일 시스템 폴더입니다. 유일한 다른 레벨은 .one 파일 인 섹션입니다. 매우 제한된 계층 구조가 있습니다 (단지 페이지 일 뿐이며 서브 페이지로 표시 될 수 있지만 실제로는 부모와 어떤 식 으로든 연결되지 않습니다).

내부.OneNote가하는 것은 아니지만 XML을 사용하여 페이지를 표현할 수 있습니다. OneNote는 빠른 편집, 개체 수준 동기화, 다중 사용자 액세스 및 컴팩트 저장소를 사용하기 위해 이진 파일 형식을 사용합니다.

"임의 액세스 파일"에 대한 정보를 살펴보면이 작업을 수행하는 방법에 대한 아이디어를 얻을 수 있습니다. 그러나 편집을하기가 번거로워 짐에 따라 XML을 사용하지 않는 것이 좋습니다. 전체 XML 파일을로드하고 메모리 내에서 변경 한 다음 전체 내용을 다시 작성해야합니다.

2

데이터를 저장하는 방법에 따라 달라집니다. 공유 액세스를 위해 데이터베이스를 사용하도록 계획 한 경우 속도가 빠르고 많은 양의 데이터가 필요합니다. 데이터를 표준화하고 제안한 구조를 만듭니다.

사용자가 파일 시스템에 로컬로 데이터를 저장하려면 XML을 좋은 해결책으로 생각합니다. 구조화 된 파일에 데이터를 저장할 수 있기 때문입니다.

그래서 사용자가 데이터를 저장하고 사용하기를 원하십니까?

+0

응답 해 주셔서 감사합니다 ... 사용자가 파일 시스템에 로컬로 데이터를 저장하기를 바랍니다. 아마 델파이에서 XML에 대해 더 많이 배울 때가 왔습니다. :-) –

3

데이터베이스 또는 XML과 관계없이 데이터 액세스 루틴을 데이터 모듈에 넣어보십시오. GUI 유닛이 datamodule의 public 메소드를 호출하게하고, 호출이 데이터 저장 방법에 의존하지 않도록하십시오. 그렇게하면 한 가지 방법으로 시작하고 데이터 모듈을 편집하여 다른 방법으로 전환 할 수 있습니다.

3

시도해 볼 수있는 한 가지 방법은 구조화 된 스토리지 시스템을 사용하는 것입니다. 개념은 간단합니다. 디스크와 폴더처럼 데이터 파일을 사용하면 폴더와 파일이 모두 독점적으로 제어됩니다. 유일한 문제는 정확히 여러 사용자에게 확장되지 않지만 XML을 수행하지 않는다는 것입니다. (좋은 구조화 된 저장소 라이브러리는 gabr의 blog에서 사용 가능)

"다중 사용자"시스템의 경우 가장 좋은 방법은 테이블을 사용하여 구현하는 것입니다. MS Sql Server로 쉽게 마이그레이션하는 Microsoft Access 및 ADO를 사용하면 좋은 출발을 얻을 수 있습니다. 귀하의 간단한 설명에서, 나는 당신이 세 개의 테이블, 노트, 섹션, 페이지를 가지기를 기대합니다. 페이지는 섹션과 섹션에 대해 외래 키 관계 (세부/마스터)를 가지며 노트는 외장 키와 관계가 있습니다.

1

나는 나무와 같은 데이터에서 생각합니다.

node { 
    id 
    parent_id 
    content 
    type 
} 

노드가 paren_id = 0 인 노트북입니다. 유형은 선택 사항이지만 유용 할 수 있습니다. 페이지 및 노트북의 콘텐츠는 무료로 페이지/노트 설명을 제공합니다 : D

나는 간단한 테이블을 sqlite 또는 MyBase 등으로 사용합니다. xml은 메모리의 모든 데이터를로드해야하기 때문에 약간의 DB가 Xml보다 낫다고 생각합니다.

관련 문제