이 글은 Matthias Eißing 의 블로그 글을 번역하면서 주제와 관련된 동영상 소개 및 샘플예제 따라하기를 추가했습니다.

 

·   본문 링크  :  https://community.idera.com/developer-tools/b/blog/posts/interbase-mit-arrays-und-firedac

인터베이스와 FireDac에서  배열 필드 사용하기

인터베이스는 예전부터 배열 필드 사용이  가능했습니다. 

 

배열이란 무엇입니까? 

 

배열은 컬럼에서 동일한 타입의 n 차원 데이터 저장소입니다. 인터베이스는 BLOB를 제외한 모든 표준 데이터 타입에서 

사용할 수 있습니다.

 

언제 사용합니까?

 

배열은 매우 쉽게 정의 할 수 있지만 언제 사용하고 어디에 사용해야  더 유용한지 주의해야합니다.

 

  • 배열의 데이터는 같은 유형입니다
  • 배열의 데이터는 논리적 (데이터가 함께 속해 있음) 및 물리적 (한 컬럼에 저장, 공통 트랜잭션 제어하에) 단위로 사용됩니다.

 

트랜잭션 제어로 인한 로드 감소로 인한 장점 : 단일 트랜잭션 내에서 하나의 데이터 슬라이드 (1 / 다차원)를 배열로 읽고 저장할 수 있습니다. 상당한 성능 향상을 초래할 수 있습니다.

 

배열은 CREATE TABLE 또는 CREATE DOMAIN 명령어로 생성합니다.

 

CREATE TABLE TBL_ARRAY 

(

ID INTEGER,

TICTACTOE BOOLEAN[1:3, 1:3] 

);

 

여기서  컬럼으로 TicTacToe 필드를 정의합니다.

 

델파이 개발환경인 "데이터 탐색기"에서 FireDAC를  사용하면 다음과 같이 보입니다.

 

<데이터 탐색기에서 보기>

 

6470.pastedimage1586855876799v1.png-320x240.png

 

 

<응용 프로그램 내에서 본 결과> 

 

- 일반 DBGrid 및 3x3 DBCheckBox를 사용하여 표시

 

0880.pastedimage1586857592125v2.png-320x240.png

 

 

 

 

 

 

 

 

 

 

배열의 행 / 행과 열 / 열 순으로 진행된다는 점에 유의해야합니다. 예를 들어, 포트란은 열 / 행 순서로 진행합니다.

 

위 링크를 정리하면 인터베이스는 다차원 배열을 행 주요 순서로 저장합니다. 포트란과 같은 일부 호스트 언어는 배열이 열 순서로 정렬 될 것으로 예상합니다. 이 경우 인터베이스와 호스트 언어간에 요소 순서를 올바르게 변환하도록 주의를 기울여야합니다.

 

베를린 10.1부터 DBGrid도 배열을 올바르게 표시합니다 !

 

프로그램에서 배열 요소에 액세스하기

 

배열 요소는 제로(0) 기반 요소를 통해 직접 액세스 할 수 있습니다. 

 

Tbl_arrayTable.Edit;

Tbl_arrayTable.FieldByName('TICTACTOE[0]').Value := 

NOT Tbl_arrayTable.FieldByName('TICTACTOE[0]').AsBoolean;

 

고려해야 할 사항은 무엇입니까?

 

안타깝게도, 인터베이스 콘솔은 배열을 표시 할 수 없습니다 :

 

1121.pastedimage1586858043343v3.png-320x240.png

 

 Stephen Ball이 배열 필드에 관해서 작성한 동영상과 예제를 소개하겠습니다.

 

 

예제 따라하기

1. 인터베이스 서버가 설치 및 구동(Start) 되어 있어야 합니다.

 

2. 아래의 폴더에서 샘플 프로젝트 IBArrays.dpr을 오픈합니다.(샘플이 다른 폴더에 있을 수도 있음).

C:\Users\Public\Documents\Embarcadero\Studio\20.0\Samples\Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\Arrays\IBArrays.dpr 

 

3. 사용하실 데이터베이스(저는 샘플데이터베이스 Connection Name:Employee를 사용)를 연결합니다.

 

4. FDConnection Editor > SQL Script 에서 아래와 같이 SQL문(소소에 스크립트가 있음 복사해서 사용)을 입력하고 실행 버튼(초록색 화살표)을 클릭합니다. 

 

arrayField1.png

 

5. 프로그램을 실행 하고 IB Read 버튼을 클릭하면 다음과 같이 데이터가 없는 테이블이 표시됩니다.

 

arrayField2.png

 

6. 이번에는 IB Write 버튼을 클릭하여 데이터가 입력된 테이블을  확인합니다.

 

arrayField3.png

 

7. 위와 같이 데이터를 입력하기 위해 아래와 같은 코드가 구현되어 있습니다. 

 

procedure TFrmMain.btnWriteClick(Sender: TObject);

var

  i: Integer;

begin

  FDQuery1.Active := False;

  FDConnection1.ExecSQL('delete from FDQA_Array');

 

  FDQuery1.SQL.Text := 'insert into FDQA_Array values (:id, :name, :items)';

 

  // TFDParam.DataTypeName에는 <Table name>.<Field name>로 설정해야합니다.

  FDQuery1.Params[2].DataTypeName := 'FDQA_ARRAY.ITEMS';

 

  // TFDParam.ArayType에는 atArray 이 아닌, atTable로 설정하셔야 합니다.  

  FDQuery1.Params[2].ArrayType := atTable;

 

  // TFDParam.ArraySize에는 배열 사이즈를 지정해야합니다.

  FDQuery1.Params[2].ArraySize := 4;

 

  for i := 1 to 5 do begin

    FDQuery1.Params[0].AsInteger := i;

    FDQuery1.Params[1].AsString := 'aaa' + IntToStr(i);

    FDQuery1.Params[2].AsStrings[0] := 'A' + IntToStr(i) + '1';

    FDQuery1.Params[2].AsStrings[1] := 'A' + IntToStr(i) + '2';

    FDQuery1.Params[2].AsStrings[2] := 'A' + IntToStr(i) + '3';

    FDQuery1.Params[2].AsStrings[3] := 'A' + IntToStr(i) + '4';   

    FDQuery1.ExecSQL;  // 반드시 ExecSQL 를 사용합니다,  Execute(4, 0) 혹은 다른 것은 안됩니다.

  end;

 

  btnOpenClick(nil);

end;

 

 

8. 그리드에서 배열 필드들을 수정한 후 다시 Read 버튼을 클릭하여 수정 된 배열필드를 확인합니다.

 

arrayField4.png

 

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15428
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13961
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16497
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22054
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23268
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18922
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39253
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174698
1223 [델파이 문법] 클래스와 객체 #16 file 관리자 2012.06.26 6339
1222 [동영상 강의] 델파이 기본 교육_20.스토어드 프로시저 관리자 2012.08.07 6328
1221 인터베이스 (InterBase) 매뉴얼 및 튜토리얼 관리자 2012.06.15 6327
1220 RAD Studio XE3와 SQLite 관리자 2012.10.09 6325
1219 [REST API] 다음 Kakao > 로컬 > 주소검색 연동하기 [2] 험프리 2017.09.18 6309
1218 [세미나자료] 인터베이스(InterBase) in Action, Live! file 관리자 2012.05.10 6261
1217 [C++빌더 XE3 비디오 31] dbExpress와 ClientDataSet을 사용해 SQL 데이터베이스 C++ 파이어몽키 앱 만들기 관리자 2013.01.09 6250
1216 안드로이드 API를 파이어몽키에서 사용하기(Toast 메세지 구현) file Humphery 2013.12.17 6220
1215 [환경설정] 아마존 EC2 이용해 윈도우 서버 환경 구축하기 [1] file 험프리 2017.04.13 6213
1214 [델파이 문법 시리즈] #7. 제네릭 - 클래스 변수, 표준함수 file 관리자 2012.04.02 6210
1213 파이어몽키 모바일에서 사용자 파일 배포 및 사용 file 험프리 2013.12.27 6198
1212 델파이 에서 안드로이드로 박병일 2012.01.06 6196
1211 [동영상강의] 델파이 기본 교육_11.메뉴 작성 컴포넌트 설명 관리자 2012.06.20 6182
1210 RAD스튜디오나 델파이만으로 (별도 맥 컴퓨터 없이) 아이폰 앱을 만들고 앱스토어에 올릴 수 있습니다. 관리자 2013.05.30 6160
1209 David I의 31 XE3 퀵 비디오 - 윈도우8 스타일 사용하기 관리자 2012.10.08 6159
1208 [동영상강의] 델파이 기본 교육_14.메모장 만들기3 (스프래쉬 화면과 리포지토리) 관리자 2012.07.06 6158
1207 PrintDialog 를 사용하지 않고 프린트 하기 박병일 2011.12.22 6155
1206 [델파이 문법] 프로시저와 함수 #7 file 관리자 2012.08.13 6134
1205 [10.2 도쿄] 델파이/C++빌더 리눅스 개발환경 설정하기 [1] file 험프리 2017.02.21 6124
1204 [델파이 문법] 문법 요소 #13 file 관리자 2012.11.20 6109