Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr
  • 0

TREST~ 컴포넌트 사용 REST API (JSON형태) 연동시 TFDMemTable Fields Editor 생산적인 사용법은?


미스터몽키

질문

1. 다음과 같은 DB의 자료를 REST API (JSON형식) 서버를 통해 델파이 TDBGrid에 구현하려고 합니다.

image.png.2ce55894985e80e63a05434213c06303.png

image.png.531cdab29acb6e61104c3c789fe18924.png

 

2. REST Debugger 를 통해 Copy Components 할때  "Response" > "Tabular Data" 의 Use Types 를   "Rich" 가 아닌 Strings 나 JSON 으로 해야

TRESTResponseDataSetAdapter, TFMemTable 컴포넌트도 같이 생성됩니다.   "Rich" 로 하면  TRESTClient, TRESTRequest, TRESTResponse 만 생성됩니다.

그런데 Strings 로 하면 모든 컬럼이 DB 컬럼 타입(문자타입, 숫자타입, 날짜타입)과 무관하게 TWideStringField 255 크기로 설정되는 문제가 있습니다.

image.png.d202b210a590d5d002c49a258ecc4015.png

image.png.02b7333d8e1de145abade8995b4d560e.png

 

그래서 복사해온 TRESTResponseDataSetAdapter 의 TypesMode 를 Rich 로 바꾸고   TFMemTable 의 Fields Editor 에서 마우스 우클릭 "Add all fields" 하면 그림처럼 자료의 첫번째 레코드 크기("김구") 에 맞추어 져서 Size 가 2로 되네요. 실제는 더 큰 사이즈인데 첫번째 레코드로 판별합니다. 

image.png

숫자 컬럼도  DB 는 integer 인데 TFloatField 로 변경되고요.ㅠㅠ

2Tier 의 경우 직접 DB와 연결되므로 정확한 컬럼 타입을 알수가 있지만 Rest 서버의 경우 JSON으로 자료를 전달하니 이해되는 부분이기는 합니다.

어쩔수 없이 TFMemTable 의 Fields Editor 에서 "New fIeld..." 로  하나 하나 추가하면서 데이터 Type 을 정확히 매칭시키고 있습니다.

image.png.bd6e5039ba962e4e8c38f9e97f118a49.pngimage.png.7acd21c86435077b9935ff8f614f4378.png 

 

 

image.png.ebde1f885e463450ed025efdee34ac58.pngimage.png.734d7af8608e250b0710a430a6426386.png

 

기존 TFMemTable 의 Fields Editor 에서 데이터 타입을 변경하는 방법이 있으면 일단 모든 필드를 가져오고 타입과 사이즈만 변경하면 편리할 듯 한데 현재는 그럴 수 없는 것 같네요.

필드의 타입이 정확해야  숫자형은 DisplayFormat 속성으로 "##,#" 등을 설정하여 천단위 숫자 콤마도 표현하고  DBGrid에 타이틀을 한글로 바꾸고 할 수 있습니다. 또한 정렬시에도 정확히 될 거구요

이 부분에 대해 좀 더 생산적인 방법을 알고 계신분 있으신가요?

대부분의 참고 동영상이  REST Debugger 로 연결하고 자료가 보이는 부분까지이지 이런 부분까지는 언급한 자료는 찾지를 못했네요

 

 

Edited by 미스터몽키
이 댓글 링크
다른 사이트에 공유하기

2 answers to this question

Recommended Posts

  • 0

아래 링크를 보시면 Rest Debugger 를 사용하지 않고 json 데이터를 불러와서 TFDMemTable 에 데이터를 넣는 샘플이 있습니다.

TFDMemTable 에 해당필드를 동적으로 생성하고 타입을 맞추어 주면 소스상에서 빠르게 작업 하실 수 있습니다.

 

이 댓글 링크
다른 사이트에 공유하기

  • 0

c2design 님 답변감사합니다.

해당 동영상은 참고했었습니다. 해당 동영상은 TREST~ 컴포넌트 대신 TNetHTTP~ 컴포넌트를 사용한 것입니다.

제가 개발하는 스타일은 디자인타임에 가능한 정적인 디자인은 최대한 한다는 것입니다. 
즉 
1. Dataset (TFDMemTable) 의 Field Editor에서 각 필드마다 DisplayLabel 속성을 각각 모두 한글로 바꿔주고 (NAME -> "이름", AGE -> "나이")
2. 숫자 타입(Integer) 필드의 경우 1000단위 콤마 사용을 위해 DisplayFormat 속성에서 "#,##" 을 설정하고
3. Size 속성이 DB와 동일하게 하고
4. 정렬 Alignment 속성을 가운데(taCenter), 또는 오른쪽(taRightJustify) 으로 해야할 것은 설정합니다.
5. 그리고 DBGrid에 Columns Editor 에서 "Add All Fields" 하여 Dataset에서 앞에서 설정한 것이 반영된 필드를 DBGrid 컬럼으로 가져옵니다.
6. 이렇게 하면 작업이 수월하고 DBGrid의 Columns Editor 에서도 별다른 작업을 하지 않고 컬럼 Width 만 적당히 조절하면 됩니다.

물론 DBGrid Column Editor 에서도 컬럼 타이틀(Title) 이나 정렬(Alignment) 조정할 수 있지만 컬럼을 삭제하고 다시 추가하면 일일이 다시 설정해야해서 가능하면 Dataset Field Editor에서 작업을 합니다.

2Tier 에서는 이렇게 수년간 작업을 해서 델파이 생산성의 장점을 최대한 활용하고 있습니다.
디자인타임에 정적인 것을 설정하는 것은 화면을 미리 볼 수 있기에 여러가지로 동적으로 설정하는 것에 비해 편리합니다.

차기 델파이 버전에서 Dataset Field Editor 에서 데이터타입을 변경할 수 있다면 참으로 생산성이 좋을 듯합니다.
JSON 데이터라도 정확한 자료형은 알수 없어도 필드(컬럼) 명은 정확히 알수 있으므로 일단 모든 필드를 Dataset Field Editor 로 가져와서 각각 컬럼의 타입과 사이즈를 변경하면 생산성이 향상 될것입니다.

감사합니다.
 

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 질문에 답변하기...

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.