|
HoHoMaN 님이 쓰신 글 :
: BCB를 처음 사용해보는 사용자입니다
: 한번도 볼랜드 제품을 사용해본적이 없어 툴의 개념을 이해하는데 힘이 드네요
: (MS제품을 되도록이면 안쓰려구요)
:
: 가장 힘이든 부문이 DB를 연결부문입니다.
:
: 라이브러리를 등록해놓고 전역변수로 선언한뒤 GUI환경에 관계없이 DB를 연결하여 사용할 수 있는 MS의 VB나 VC와는 달리 BCB는 구현하고자하는 모든 화면에다 연결 컨트롤을 설치해야하는데 다른 방법(코딩으로만 해결)은 없는 건지 알고 싶습니다.
:
: 화면이 200여개나 되는 어플리케이션을 설계할려고 하는데 모든 화면에다 Connection 컨트롤을 배치하고 속성을 지정하려면 개발뿐만아니라 유지보수도 힘이 들 것 같아요
모든 폼에 DB 컴포넌트을 놓을 필요는 없습니다.
VCL에서는 이런 용도를 위해 폼(TForm)과 유사하나,
실행시에는 표시되지 않는 데이터 모듈(TDataModule)이란 것을 지원합니다.
[File]-[New...] 에서 [Data Module]을 선택(빌더5) 또는
[File]-[New]-[Data Module]을 선택(빌더6)하신 후
Name 속성을 DM으로 하신 후 dm.cpp라는 파일명으로 저장하시고요,
(더 긴 이름도 되지만, 코딩의 편의를 위해 저는 이렇게 합니다.),
이 데이터 모듈에
DB 접근 방식에 따라
TDatabase, TTable, TQuery, TStoredProc 등의 BDE 컴포넌트나,
TADOConnection, TADOCommand, TADOTable, TADOQuery, TADOStoredProc 등의 ADO 컴포넌트나,
TSQLConnection, TSQLTable, TSQLQuery, TSQLStoredProc 등의 dbExpress 컴포넌트나,
TIBDatabase, TIBTransaction, TIBTable, TIBQuery, TIBStoredProc 등과 같은 InterBase 컴포넌트나
TDataSource 컴포넌트 등을 놓습니다.
그리고, 이 DB 컴포넌트를 사용하고자 하는 유닛에서,
[File]-[Include Unit Hdr... Alt+F11]을 써서 dm.h 를 인클루드합니다.
(단지 수작업 타이핑을 대신하는 기능입니다.)
그리고 DB 컴포넌트을 사용할 때는
단지, DM->Table1 과 같이 앞에다 DM-> 만 붙이면 됩니다.
제 의견으로는 폼이 한 두개인 간단한 애플리케이션이 아닌 한,
절대 폼에다 DB 컴포넌트를 놓지 마시고,
꼭 데이터모듈을 만들어서 놓으세요.
DB 컨트롤 외에도, TImageList나 TActionList 등의 non-visual component는 데이터모듈에
놓는 것이 좋습니다.
: 한마디로 그냥 DB에 연결해서 작업만 수행하고 결과값을 리턴하는 DLL을 만들려면 어떻게 해야되는 거죠. 앞서 개발하신분들의 자문을 구합니다.
VCL은 코딩만으로 작업할 때도, MFC같은 허접한 라이브러리보다 훨씬 편리합니다.
예를 들어 TQuery 객체를 코딩만으로 만들어서 쿼리를 날리시려면,
AnsiString sEmpID;
// 중략: sEmpID를 얻어오는 부분
TQuery *Query1 = new TQuery(Owner);
Query1->DatabaseName = DM->Database1 // 데이터모듈에 있는 TDatabase 연결 객체를 지정
Query1->SQL->Add("SELECT NAME");
Query1->SQL->Add("FROM EMP");
Query1->SQL->Add("WHERE ID = '" + sEmpID + "'");
Query1->Open(); // 쿼리 실행
AnsiString sEmpName = Query1->FieldByName("NAME")->AsString;
delete Query1; // 빼먹지 않도록 주의하세요.
이렇게만 하면 끝입니다. 간단하죠?
:이문제만 해결되면 BCB를 회사의 개발툴로 정하여 쓰고 싶은데 2주간 고민고민하다가 지금은 거의 포기 지경입니다. 주변에 BCB를 쓰는 사람이 없다보니 문의할 곳도 마땅치않아 더욱 어렵네요.
저도 처음에는 그랬던 적이 있었습니다.
만약 볼랜드포럼이 없었으면 어떻게 빌더를 쓸 수가 있었을까라는 생각이드네요. ^^;
|