Delphi 델파이 윈도우 앱 샘플 – BLOB 스트림을 내/외부에서 쉽게 사용하기
2020.12.15 16:47
BlobStreams 샘플을 통해 파이어닥을 활용한 BLOB 스트리밍 기술 활용 방안을 확인해보세요. 외부 스트리밍과 내부 스트리밍을 모두 구현하는 방법을 알 수 있습니다.
다운로드 위치
- Start | Programs | Embarcadero RAD Studio Sydney | Samples 경로에서 확인할 수 있습니다:
- 프로젝트명: Object PascalDatabaseFireDACSamplesComp LayerTFDQueryBlobStreams
- 서브버전 리파지토리:
- 깃허브 리파지토리에서 델파이 코드 샘플을 확인할 수 있습니다.
샘플 활용 방법
- 위 경로에서 BlobStreams.dproj 프로젝트를 찾아서 엽니다.
- 실행을 위해 F9 버튼 또는 Run > Run 메뉴를 실행합니다.
사용하는 파일들
델파이에서 활용할 파일 | 포함된 내용 |
BlobStream.dproj BlobStreams.dpr |
프로젝트 |
fBlobStr.pas fBlobStr.fmx |
메인 폼 |
구현하기
샘플을 실행하기 전에, 주요 컴포넌트들을 먼저 확인해보겠습니다. 오브젝트 인스펙터에서 디자인할 때 사용된 컴포넌트들을 확인할 수 있습니다:
- 두 개의 TFDQuery – 각각 qSelect, qInsert 라는 이름으로 되어 있습니다. 이 컴포넌트들은 SQL 쿼리를 실행하는 데이터셋을 구현하는데 사용합니다. 다음과 같은 설정이 필요합니다:
- DBMS 연결을 위해 파이어닥(FireDAC)의 연결 속성을 지정합니다. 두 컴포넌트 모두 FDConnection1로 설정하세요.
- SQL 속성을 설정해줍니다. 쿼리 실행을 위한 SQL 구문은 다음과 같이 지정해주세요.
- qSelect의 SQL 속성은 select * from {id FDQA_Blob} 으로 설정합니다.
- qInsert의 SQL 속성은 insert into {id FDQA_Blob} (blobdata) values (:blobdata)
- qInsert.Param[0] 을 설정해줍시다:
- Name 속성은 BLOBDATA 로 해주세요.
- DataType 속성은 BLOB 데이터 타입 중 하나로 설정합니다. 이 샘플에서는 ftBlob 으로 해줍시다.
- ParamType 속성은 ptInput 으로 설정합니다. 스트림이 데이터베이스 BLOB 값에 기록되고 읽힌다는 의미입니다.
- StreamMode 속성은 smOpenRead 로 설정합니다. 이 설정값이 기본값입니다. 스트림이 데이터베이스 BLOB 값을 읽는데 사용된다는 의미입니다.
- TDataSource 이름은 DataSource1로 설정합니다. 이 컴포넌트는 폼에서 데이터 관련 컨트롤과 데이터셋 컴포넌트 사이의 인터페이스를 제공합니다. 이 샘플에서는 데이터셋과 DBMemo1로 이름을 설정한 TDBMemo간의 커뮤니케이션을 위해 사용됩니다. DBMemo1은 데이터셋의 blobdata 필드를 보여줍니다. 이를 위해서는 다음과 같은 설정을 해주셔야 합니다:
- DataSource의 DataSet 속성은 qSelect 로 설정합니다.
- DBMemo1의 DataSource 속성은 DataSource1 로 설정합니다.
- DBMemo1의 DataField 속성은 blobdata 로 설정합니다.
주요 컴포넌트들을 설정하고 나면, 애플리케이션을 실행할 수 있습니다. 이제 세 개의 버튼들을 설정해볼까요?
- 데이터 준비 버튼. 이 버튼에는 OnClick 이벤트를 설정해줍니다. TFileStream.Create 메소드를 사용할텐데요. 파일에 문자열을 쓰기위해 파일 스트림을 인스턴스화할 것입니다.
- 인서트 버튼 (외부 스트림). 이 버튼에 OnClick 이벤트를 설정해줍니다. 외부 스트리밍을 구현해줄 것입니다. 외부 스트림은 애플리케이션에 의해 파이어닥으로 제공되는 것입니다 (외부에서 파이어닥으로). 그럼 파이어닥이 이 스트림을 읽게됩니다.
- 인서트 버튼 (내부 스트림). 이 버튼에 OnClick 이벤트를 설정해줍니다. 내부 스트림이 파이어닥에 의해서 애플리케이션으로 넘어가게 됩니다 (내부에서 파이어닥으로). 그러면 애플리케이션이 스트림을 읽어오게 됩니다. 샘플에서의 설정은 다음과 같이 해주세요:
- StarTransaction 메소드를 사용해 필수 트랜잭션을 시작합니다.
- DataStyle 파라메터를 ftStream 으로 설정합니다.
- StreamMode 파라메터를 smOpenWrite로 설정해 데이터베이스 BLOB 값을 작성합니다.
- ExecSQL 메소드를 사용해 SQL 커맨드를 실행합니다. 내부 스트림 참조값을 반환해줄 것입니다.
- 외부 스트림 참조값을 작성합니다.
- CloseStreams 메소드를 불러와 데이터베이스 API 버퍼를 플러시하고 내부 스트림을 닫습니다.
- Commit 메소드를 사용해 트랜잭션을 종료합니다.
이 샘플에 대한 더 많은 정보를 다음 링크를 참고하세요: