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

델파이 팁&트릭
Delphi Programming Tip&Tricks
[291] UniDAC을 이용한 간단한 DB Middleware 예제
권익수 [freepascal] 8150 읽음    2012-12-09 04:08
UniDAC을 이용한 DB Middleware는 몇 년 전부터 제가 써오던 방식인데, 상용컴퍼넌트라서 예제를 올리지 않으려고 하다가 혹시나 필요하신 분이 있을 것 같아서 올리기로 했습니다.

아래 예제에서 "TSimpleDataSet" 이나 "Zeos" 대신 UniDAC을 이용해서 만든 예제입니다.
Delphi 버젼은 XE2 Professional을 이용해서 만들었습니다.

UniDAC은 왠만한 DB는 다 붙여서 쓸 수 있기때문에 상당히 편리한 컴퍼넌트 입니다.
그것도 따로 클라이언트 설치없이 왠만한 DB는 Direct로 접속이 가능합니다.
상용이라 구매를 해야하지만 그리 비싼 가격은 아니라고 생각 합니다. - 제 개인적인 생각으로는...(^_^)
UniDAC의 쿼리 컴퍼넌트는 XML로 저장하는 기능을 기본적으로 지원하고 있고, 그렇게 만들어진 XML은 TVirtualTable이나 ADO 컴퍼넌트에서 불러 쓸 수 있습니다.
이번 예제는 바로 그 기능을 활용해서 만들어졌기때문에 앞의 예제에서 사용된 TDataSetProvider나 TSimpleDataSet이 필요없고, 클라이언트 역시 TVirtualTable을 이용해서 만들었기때문에 midas.dll이 필요 없습니다.

※ UniDAC 싸이트: http://www.devart.com

두번째 첨부된 "돌다리v3.1"은 제가 지금까지 만들어왔던 DB Middleware 중에서 범용으로 쓸만한 기능들을 모아서 만든 프로그램 입니다.
다른 미들웨어 처럼 미들웨어에 업무로직을 넣는 형태는 아니고, 요청에 대해 중계만 하는 단순한 형태의 미들웨어 입니다.
업무로직은 Stored Procedure로 처리하면 되니까 굳이 미들웨어에 넣을 필요가 없을 것 같아서 만든 프로그램 입니다.
클라이언트는 컴퍼넌트 형태로 지원하고, 서버는 32비트와 64비트로 컴파일된 프로그램이 포함되어있습니다.
클라이언트는 TClientDataSet을 상속해서 만들었기때문에 배포시 midas.dll을 같이 배포하거나, 프로젝트 소스에 MidasLib를 넣어서 컴파일해서 배포하세요.
소스는 첨부되어있지는 않고 Delphi XE2만 지원합니다.
사용법은 안에 첨부된 Text 파일을 참고하세요.
무능력 [sykelos]   2012-12-09 14:00 X
여담이지만.. TClientDataSet을 사용해도 midas.dll을 배포하지 않아도 되는 방법이 있습니다.
uses 에 midaslib를 추가하는 방법이 바로 그것이죠.
간단하게 프로젝트파일에 midaslib를 추가하면 midas.dll을 배포하지 않아도 됩니다.
무능력 [sykelos]   2012-12-09 14:01 X
* midaslib를 어디든 uses해도 상관없습니다.
박지훈.임프 [cbuilder]   2012-12-09 14:09 X
제가 보기엔 권익수님도 이미 그렇게 하라고 말씀하신 거 같은데요. ^^

"배포시 midas.dll을 같이 배포하거나, 프로젝트 소스에 MidasLib를 넣어서 컴파일해서 배포하세요."
무능력 [sykelos]   2012-12-09 18:35 X
네 제가 난독증인가봅니다..ㅠㅠ
양용성.우석아빠 [ysyang]   2013-08-27 02:55 X
좋은 자료 같은데 제가 너무 무지하네요.
좀 알고 싶습니다.
언제나초짜 [nofade]   2014-02-26 17:59 X
좋은 자료 감사합니다.
근데, my-sql 에 연결해서 Data 가 한글인 것을 가져오니 grid 상에서 깨지네요.

"Invalid XML" 라는 오류메시지와 함께요
권익수.어느좋은날 [freepascal]   2014-06-17 14:27 X
위의 자료에서 한글 자료를 가져왔을 때 한글이 깨진다면 "돌다리v3.1"에서는 Unicode로 접속하면 될겁니다.

"UniDAC을 이용한 간단한 DB Middleware"에서는 UniDAC이 5 이상 버전일 경우 "TVirtualTable"의 XML 처리 버그로인해 "Invalid XML" 오류가 발생할 수 있습니다.
참고: http://forums.devart.com/viewtopic.php?f=8&t=27724
저 버그가 발생한게 한참 됐는데 아직까지 고쳐지지 않고 있네요.
Client에 TVirtualTable을 사용하지않고 ADODataSet을 사용하면 해당 버그를 피해갈 수 있습니다.

var
  rs: Variant;

      l_Stream.Position := 0;
      rs := CreateOleObject('ADODB.Recordset');
      rs.Open(TStreamAdapter.Create(l_Stream) as IUnknown);
      ADOResult.Recordset := IUnknown(rs) as _Recordset;
허철 [heo899]   2014-06-23 18:45 X
좋은 자료 감사합니다.
첨부 자료중 Simple Middle 를 조금 변형해서 해 보는 중인데요..
클라이언트 접속시 로그인 하도록 하고싶은데 여기 저기 찾아봐도 잘 모르겠습니다.
접속시 간단히 user name pass 입력후 접속되는 방법 부탁드립니다.
권익수.어느좋은날 [freepascal]   2014-06-25 15:18 X
로그인 처리를 미들웨어에 구현해놓고 통신규칙을 통해서 처리하는 방법도 있지만, 간단하게 일반적인 2-tier 프로그램 개발시 로그인 처리하듯이 DB에 로그인용 테이블을 만들고, 클라이언트에서 로그인시 입력된 정보를 받아서 DB에 바로 접속한 후 해당 테이블의 정보와 비교해서 처리하면 될겁니다.
참고로 위의 Simple Middleware에는 패킷에 대한 암호 처리가 없기때문에 중간에서 데이터를 가로채서 볼 경우 주고 받는 정보를 다 볼 수 있습니다. 그렇기때문에 패킷을 주고 받는 부분에는 간단하더라도 암호화 처리를 해주시는게 좋습니다.

+ -

관련 글 리스트
291 UniDAC을 이용한 간단한 DB Middleware 예제 권익수 8150 2012/12/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.