C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75252] Re:Re:[FireDAC] Cannot set MasterSource for database
뽀뽀중 [kissjung] 613 읽음    2019-01-17 08:43
data set 의 정의, data source 의 역활 등을 이해 하지 못해 작성에 많은 어려움이 있었습니다.
어찌어찌 하다 보니, 원하는 기능이 작동(?)이 되었는데, 더 이상의 진척이 잘 안되는 상황이었습니다.

친절하게 설명해 주신 계층구조등 설명을 해주셔서, 이해가 잘 되었습니다.
DB 작성할때 알려주신 계층구조로 하면 큰 문제없이 가능 할것 같습니다.

큰 도움이 되었습니다. 감사 합니다.

긴 답변을 하셨는데, 짧은 인사로 대신하여 미안한 마음이 있네요^^


빌더(TWx) 님이 쓰신 글 :
: 뽀뽀중 님이 쓰신 글 :
: : DB 파일은 하나이고 테이블이 여러개 인데,
: : 각각의 테이블 1개당 하나의 폼을 생성해서 작업을 하려고 합니다.
: :
: : ******Form1
: : void __fastcall TFormUser::FormCreate(TObject *Sender) {
: :
: :     if (AsDBName != "") { // DB가 열렸으면, DB 그리드에 입력한다.
: :         try {
: :             // User DBGrid 설정
: :             FDQueryUser->Connection = FormMain->FDConnection1;
: :             FormMain->DataSource1->DataSet = FDQueryUser;
: :             DBGridUser->DataSource = FormMain->DataSource1;
: :             FDQueryUser->Active = true;
: :         }
: :
: :         catch (Exception& E) {
: :             ShowMessage(E.Message);
: :         }
: :     }
: : }
: :
: : ******Form2
: : // ---------------------------------------------------------------------------
: : void __fastcall TFormDistric::FormCreate(TObject *Sender) {
: :     if (AsDBName != "") { // DB가 열렸으면, DB 그리드에 입력한다.
: :         try {
: :             // District DBGrid 설정
: :             FDQueryDistric->Connection = FormMain->FDConnection1;
: :             FormMain->DataSource1->DataSet = FDQueryDistric;
: :             FDQueryDistric->DataSource = FormMain->DataSource1; <<<=이부분에서 에러가 발생 합니다.
: :             FDQueryDistric->Active = true;
: :         }
: :
: :         catch (Exception& E) {
: :             ShowMessage(E.Message);
: :         }
: :     }
: : }
: :
: : ================
: : 위와 같이 같이 메인 폼에 있는 FDConnection1, DataSource1 를 동일하게 사용을 하는 것으로 하였습니다.
: : 물론 테이블은 다른데,,,  Form2가 생성될때 제목과 같은 에러가 발생을 합니다.
: :
: : FireDAC을 사용해서 SQLite 로컬 사용합니다.
: :
: : 어떻게 수정을 해야 하나요?
: :
: : 미리 감사 드립니다.
: :
: : **** 인터넷을 검색을 해보니...
: : http://www.delphigroups.info/2/32/41591.html
: : creates a master detail relationship between two tables. 라는 문구가 보이네요...
: :
: : 두개의 테이블에서 Master Detail 관게를 설정 하면 될것 같은데,,,
: : 어덯게 설정을 해야 하나요?
:
:
:
:
:
: 답변:
:
:
: VCL에서 데이타 베이스 파트는 크게 보면 3개의 계층 구조로 간단하게 구현되어 있습니다.
:
:
: TTable, TQuery, TFDQuery 등... 물리적으로 데이타 베이스를 액세스 하는 요소들을 통틀어서 "data set" 이라고 하고
: 모든 data set은 TDataSet 으로 부터 상속되어 만들어 집니다.
:
: TDBEdit, TDBGrid 등과 같이 데이타 요소를 비쥬얼 하게 디스플레이 하는 요소들을 "data-aware" 라고 하고요.
:
: 데이타 베이스를 액세스 하기 위한 라이브러리를 설계할 때... data set 과 data-aware 2개의 레이어만 있어도 가능 할 텐데
: VCL에서는 데이타 베이스 종류에 따라 물리적으로 종속적인 구조를 가질 수 밖에 없는 data set 을 바로 사용하지 않고
:
: data set     <----->   data source   <----->  data-aware
:
: 위와 같이 'data source'라는 하나의 레이어를 더 두어 추상화 해 놓은 인터페이스를 별도로 사용해서 물리적인 종속성을
: 피하는 구조로 VCL 라이브러리를 설계해 놓았습니다.
:
:
: 'Circular datalinks are not allowed' 문제는...
: 데이타 베이스 테이블 구조에서의 Master/Detail 관계 때문에 일어나는 문제라기 보다는...
:
: FormMain->DataSource1->DataSet = FDQueryDistric;
: 이 라인에서 data source 와 data set 이... 바인딩 되어 인터페이스가 내부에서 셋업되어 있는데
:
: FDQueryDistric->DataSource = FormMain->DataSource1
: 위에서 이미 바인드 되어 있는 data set 과 data source를 또 다시 바인딩을 하려고 해서 나타나는 에러 입니다.
: 인터페이스 A가 B로 바인드 되어 있는데, 다시 B를 A로 순환적으로 바인드를 시도하려는 행위.
:
: 위에서 이미 바인드 되어 있으므로 두번째 바인딩은 필요없게 되는 거죠.
:
:
: 그리고...
:
: 2개의 TFDQuery가 독립적으로 2개의 폼에서 동시에 사용되는 조건이라면...
: DataSource1 하나를 공유해서 사용하지 말고, 2개로 나누어서 별개로 사용 하세요.
:
:
: 안풀리는 부분... 이해 안가는 부분... 기술적인 문제 등이 있을 때는
: VCL 라이브러리 소스코드를 보세요. 그 안에 답이 다 들어 있습니다.
:
: 파스칼 언어가 begin...end, if...then, procedure, function 등으로 코드가 긴 경우 가독성을 깨뜨려 버려서 보기 불편하지만
: 파스칼은 언어 구조가 상당히 간단합니다. C++을 이미 마스터 하고 있다면 IDE Help 파일만 봐도 파스칼 언어는 간단해서
: 금방 마스터 할 수 있을 겁니다. 언어 구조가 간단해서 초보자들이 접근하기는 쉽지만, 디테일 하게 표현 할 수 있는 능력은
: C++ 보다 많이 떨어지는 단점이 있기도 합니다.
:
: 나 같은 경우도... RTL, VCL 버그 잡을 필요가 있을 때가 아니면, 실전에서 파스칼을 사용할 일은 없지요.
:
:

+ -

관련 글 리스트
75250 [FireDAC] Cannot set MasterSource for database[FDQueryDistric]. 'Circular datalinks are not allowed' 뽀뽀중 603 2019/01/16
75251     Re:[FireDAC] Cannot set MasterSource for database 빌더(TWx) 772 2019/01/17
75252         Re:Re:[FireDAC] Cannot set MasterSource for database 뽀뽀중 613 2019/01/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.